1 /* 2 * linux/fs/nfs/inode.c 3 * 4 * Copyright (C) 1992 Rick Sladkey 5 * 6 * nfs inode and superblock handling functions 7 * 8 * Modularised by Alan Cox <alan@lxorguk.ukuu.org.uk>, while hacking some 9 * experimental NFS changes. Modularisation taken straight from SYS5 fs. 10 * 11 * Change to nfs_read_super() to permit NFS mounts to multi-homed hosts. 12 * J.S.Peatfield@damtp.cam.ac.uk 13 * 14 */ 15 16 #include <linux/module.h> 17 #include <linux/init.h> 18 #include <linux/sched.h> 19 #include <linux/time.h> 20 #include <linux/kernel.h> 21 #include <linux/mm.h> 22 #include <linux/string.h> 23 #include <linux/stat.h> 24 #include <linux/errno.h> 25 #include <linux/unistd.h> 26 #include <linux/sunrpc/clnt.h> 27 #include <linux/sunrpc/stats.h> 28 #include <linux/sunrpc/metrics.h> 29 #include <linux/nfs_fs.h> 30 #include <linux/nfs_mount.h> 31 #include <linux/nfs4_mount.h> 32 #include <linux/lockd/bind.h> 33 #include <linux/seq_file.h> 34 #include <linux/mount.h> 35 #include <linux/nfs_idmap.h> 36 #include <linux/vfs.h> 37 #include <linux/inet.h> 38 #include <linux/nfs_xdr.h> 39 #include <linux/slab.h> 40 41 #include <asm/system.h> 42 #include <asm/uaccess.h> 43 44 #include "nfs4_fs.h" 45 #include "callback.h" 46 #include "delegation.h" 47 #include "iostat.h" 48 #include "internal.h" 49 #include "fscache.h" 50 #include "dns_resolve.h" 51 52 #define NFSDBG_FACILITY NFSDBG_VFS 53 54 #define NFS_64_BIT_INODE_NUMBERS_ENABLED 1 55 56 /* Default is to see 64-bit inode numbers */ 57 static int enable_ino64 = NFS_64_BIT_INODE_NUMBERS_ENABLED; 58 59 static void nfs_invalidate_inode(struct inode *); 60 static int nfs_update_inode(struct inode *, struct nfs_fattr *); 61 62 static struct kmem_cache * nfs_inode_cachep; 63 64 static inline unsigned long 65 nfs_fattr_to_ino_t(struct nfs_fattr *fattr) 66 { 67 return nfs_fileid_to_ino_t(fattr->fileid); 68 } 69 70 /** 71 * nfs_wait_bit_killable - helper for functions that are sleeping on bit locks 72 * @word: long word containing the bit lock 73 */ 74 int nfs_wait_bit_killable(void *word) 75 { 76 if (fatal_signal_pending(current)) 77 return -ERESTARTSYS; 78 schedule(); 79 return 0; 80 } 81 82 /** 83 * nfs_compat_user_ino64 - returns the user-visible inode number 84 * @fileid: 64-bit fileid 85 * 86 * This function returns a 32-bit inode number if the boot parameter 87 * nfs.enable_ino64 is zero. 88 */ 89 u64 nfs_compat_user_ino64(u64 fileid) 90 { 91 int ino; 92 93 if (enable_ino64) 94 return fileid; 95 ino = fileid; 96 if (sizeof(ino) < sizeof(fileid)) 97 ino ^= fileid >> (sizeof(fileid)-sizeof(ino)) * 8; 98 return ino; 99 } 100 101 static void nfs_clear_inode(struct inode *inode) 102 { 103 /* 104 * The following should never happen... 105 */ 106 BUG_ON(nfs_have_writebacks(inode)); 107 BUG_ON(!list_empty(&NFS_I(inode)->open_files)); 108 nfs_zap_acl_cache(inode); 109 nfs_access_zap_cache(inode); 110 nfs_fscache_release_inode_cookie(inode); 111 } 112 113 void nfs_evict_inode(struct inode *inode) 114 { 115 truncate_inode_pages(&inode->i_data, 0); 116 end_writeback(inode); 117 nfs_clear_inode(inode); 118 } 119 120 /** 121 * nfs_sync_mapping - helper to flush all mmapped dirty data to disk 122 */ 123 int nfs_sync_mapping(struct address_space *mapping) 124 { 125 int ret = 0; 126 127 if (mapping->nrpages != 0) { 128 unmap_mapping_range(mapping, 0, 0, 0); 129 ret = nfs_wb_all(mapping->host); 130 } 131 return ret; 132 } 133 134 /* 135 * Invalidate the local caches 136 */ 137 static void nfs_zap_caches_locked(struct inode *inode) 138 { 139 struct nfs_inode *nfsi = NFS_I(inode); 140 int mode = inode->i_mode; 141 142 nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE); 143 144 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode); 145 nfsi->attrtimeo_timestamp = jiffies; 146 147 memset(NFS_COOKIEVERF(inode), 0, sizeof(NFS_COOKIEVERF(inode))); 148 if (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) 149 nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; 150 else 151 nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; 152 } 153 154 void nfs_zap_caches(struct inode *inode) 155 { 156 spin_lock(&inode->i_lock); 157 nfs_zap_caches_locked(inode); 158 spin_unlock(&inode->i_lock); 159 } 160 161 void nfs_zap_mapping(struct inode *inode, struct address_space *mapping) 162 { 163 if (mapping->nrpages != 0) { 164 spin_lock(&inode->i_lock); 165 NFS_I(inode)->cache_validity |= NFS_INO_INVALID_DATA; 166 spin_unlock(&inode->i_lock); 167 } 168 } 169 170 void nfs_zap_acl_cache(struct inode *inode) 171 { 172 void (*clear_acl_cache)(struct inode *); 173 174 clear_acl_cache = NFS_PROTO(inode)->clear_acl_cache; 175 if (clear_acl_cache != NULL) 176 clear_acl_cache(inode); 177 spin_lock(&inode->i_lock); 178 NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_ACL; 179 spin_unlock(&inode->i_lock); 180 } 181 182 void nfs_invalidate_atime(struct inode *inode) 183 { 184 spin_lock(&inode->i_lock); 185 NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATIME; 186 spin_unlock(&inode->i_lock); 187 } 188 189 /* 190 * Invalidate, but do not unhash, the inode. 191 * NB: must be called with inode->i_lock held! 192 */ 193 static void nfs_invalidate_inode(struct inode *inode) 194 { 195 set_bit(NFS_INO_STALE, &NFS_I(inode)->flags); 196 nfs_zap_caches_locked(inode); 197 } 198 199 struct nfs_find_desc { 200 struct nfs_fh *fh; 201 struct nfs_fattr *fattr; 202 }; 203 204 /* 205 * In NFSv3 we can have 64bit inode numbers. In order to support 206 * this, and re-exported directories (also seen in NFSv2) 207 * we are forced to allow 2 different inodes to have the same 208 * i_ino. 209 */ 210 static int 211 nfs_find_actor(struct inode *inode, void *opaque) 212 { 213 struct nfs_find_desc *desc = (struct nfs_find_desc *)opaque; 214 struct nfs_fh *fh = desc->fh; 215 struct nfs_fattr *fattr = desc->fattr; 216 217 if (NFS_FILEID(inode) != fattr->fileid) 218 return 0; 219 if (nfs_compare_fh(NFS_FH(inode), fh)) 220 return 0; 221 if (is_bad_inode(inode) || NFS_STALE(inode)) 222 return 0; 223 return 1; 224 } 225 226 static int 227 nfs_init_locked(struct inode *inode, void *opaque) 228 { 229 struct nfs_find_desc *desc = (struct nfs_find_desc *)opaque; 230 struct nfs_fattr *fattr = desc->fattr; 231 232 set_nfs_fileid(inode, fattr->fileid); 233 nfs_copy_fh(NFS_FH(inode), desc->fh); 234 return 0; 235 } 236 237 /* Don't use READDIRPLUS on directories that we believe are too large */ 238 #define NFS_LIMIT_READDIRPLUS (8*PAGE_SIZE) 239 240 /* 241 * This is our front-end to iget that looks up inodes by file handle 242 * instead of inode number. 243 */ 244 struct inode * 245 nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr) 246 { 247 struct nfs_find_desc desc = { 248 .fh = fh, 249 .fattr = fattr 250 }; 251 struct inode *inode = ERR_PTR(-ENOENT); 252 unsigned long hash; 253 254 if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0) 255 goto out_no_inode; 256 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) == 0) 257 goto out_no_inode; 258 259 hash = nfs_fattr_to_ino_t(fattr); 260 261 inode = iget5_locked(sb, hash, nfs_find_actor, nfs_init_locked, &desc); 262 if (inode == NULL) { 263 inode = ERR_PTR(-ENOMEM); 264 goto out_no_inode; 265 } 266 267 if (inode->i_state & I_NEW) { 268 struct nfs_inode *nfsi = NFS_I(inode); 269 unsigned long now = jiffies; 270 271 /* We set i_ino for the few things that still rely on it, 272 * such as stat(2) */ 273 inode->i_ino = hash; 274 275 /* We can't support update_atime(), since the server will reset it */ 276 inode->i_flags |= S_NOATIME|S_NOCMTIME; 277 inode->i_mode = fattr->mode; 278 if ((fattr->valid & NFS_ATTR_FATTR_MODE) == 0 279 && nfs_server_capable(inode, NFS_CAP_MODE)) 280 nfsi->cache_validity |= NFS_INO_INVALID_ATTR 281 | NFS_INO_INVALID_ACCESS 282 | NFS_INO_INVALID_ACL; 283 /* Why so? Because we want revalidate for devices/FIFOs, and 284 * that's precisely what we have in nfs_file_inode_operations. 285 */ 286 inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->file_inode_ops; 287 if (S_ISREG(inode->i_mode)) { 288 inode->i_fop = &nfs_file_operations; 289 inode->i_data.a_ops = &nfs_file_aops; 290 inode->i_data.backing_dev_info = &NFS_SB(sb)->backing_dev_info; 291 } else if (S_ISDIR(inode->i_mode)) { 292 inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->dir_inode_ops; 293 inode->i_fop = &nfs_dir_operations; 294 if (nfs_server_capable(inode, NFS_CAP_READDIRPLUS) 295 && fattr->size <= NFS_LIMIT_READDIRPLUS) 296 set_bit(NFS_INO_ADVISE_RDPLUS, &NFS_I(inode)->flags); 297 /* Deal with crossing mountpoints */ 298 if ((fattr->valid & NFS_ATTR_FATTR_FSID) 299 && !nfs_fsid_equal(&NFS_SB(sb)->fsid, &fattr->fsid)) { 300 if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) 301 inode->i_op = &nfs_referral_inode_operations; 302 else 303 inode->i_op = &nfs_mountpoint_inode_operations; 304 inode->i_fop = NULL; 305 set_bit(NFS_INO_MOUNTPOINT, &nfsi->flags); 306 } 307 } else if (S_ISLNK(inode->i_mode)) 308 inode->i_op = &nfs_symlink_inode_operations; 309 else 310 init_special_inode(inode, inode->i_mode, fattr->rdev); 311 312 memset(&inode->i_atime, 0, sizeof(inode->i_atime)); 313 memset(&inode->i_mtime, 0, sizeof(inode->i_mtime)); 314 memset(&inode->i_ctime, 0, sizeof(inode->i_ctime)); 315 nfsi->change_attr = 0; 316 inode->i_size = 0; 317 inode->i_nlink = 0; 318 inode->i_uid = -2; 319 inode->i_gid = -2; 320 inode->i_blocks = 0; 321 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf)); 322 323 nfsi->read_cache_jiffies = fattr->time_start; 324 nfsi->attr_gencount = fattr->gencount; 325 if (fattr->valid & NFS_ATTR_FATTR_ATIME) 326 inode->i_atime = fattr->atime; 327 else if (nfs_server_capable(inode, NFS_CAP_ATIME)) 328 nfsi->cache_validity |= NFS_INO_INVALID_ATTR; 329 if (fattr->valid & NFS_ATTR_FATTR_MTIME) 330 inode->i_mtime = fattr->mtime; 331 else if (nfs_server_capable(inode, NFS_CAP_MTIME)) 332 nfsi->cache_validity |= NFS_INO_INVALID_ATTR 333 | NFS_INO_INVALID_DATA; 334 if (fattr->valid & NFS_ATTR_FATTR_CTIME) 335 inode->i_ctime = fattr->ctime; 336 else if (nfs_server_capable(inode, NFS_CAP_CTIME)) 337 nfsi->cache_validity |= NFS_INO_INVALID_ATTR 338 | NFS_INO_INVALID_ACCESS 339 | NFS_INO_INVALID_ACL; 340 if (fattr->valid & NFS_ATTR_FATTR_CHANGE) 341 nfsi->change_attr = fattr->change_attr; 342 else if (nfs_server_capable(inode, NFS_CAP_CHANGE_ATTR)) 343 nfsi->cache_validity |= NFS_INO_INVALID_ATTR 344 | NFS_INO_INVALID_DATA; 345 if (fattr->valid & NFS_ATTR_FATTR_SIZE) 346 inode->i_size = nfs_size_to_loff_t(fattr->size); 347 else 348 nfsi->cache_validity |= NFS_INO_INVALID_ATTR 349 | NFS_INO_INVALID_DATA 350 | NFS_INO_REVAL_PAGECACHE; 351 if (fattr->valid & NFS_ATTR_FATTR_NLINK) 352 inode->i_nlink = fattr->nlink; 353 else if (nfs_server_capable(inode, NFS_CAP_NLINK)) 354 nfsi->cache_validity |= NFS_INO_INVALID_ATTR; 355 if (fattr->valid & NFS_ATTR_FATTR_OWNER) 356 inode->i_uid = fattr->uid; 357 else if (nfs_server_capable(inode, NFS_CAP_OWNER)) 358 nfsi->cache_validity |= NFS_INO_INVALID_ATTR 359 | NFS_INO_INVALID_ACCESS 360 | NFS_INO_INVALID_ACL; 361 if (fattr->valid & NFS_ATTR_FATTR_GROUP) 362 inode->i_gid = fattr->gid; 363 else if (nfs_server_capable(inode, NFS_CAP_OWNER_GROUP)) 364 nfsi->cache_validity |= NFS_INO_INVALID_ATTR 365 | NFS_INO_INVALID_ACCESS 366 | NFS_INO_INVALID_ACL; 367 if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED) 368 inode->i_blocks = fattr->du.nfs2.blocks; 369 if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) { 370 /* 371 * report the blocks in 512byte units 372 */ 373 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used); 374 } 375 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode); 376 nfsi->attrtimeo_timestamp = now; 377 nfsi->access_cache = RB_ROOT; 378 379 nfs_fscache_init_inode_cookie(inode); 380 381 unlock_new_inode(inode); 382 } else 383 nfs_refresh_inode(inode, fattr); 384 dprintk("NFS: nfs_fhget(%s/%Ld ct=%d)\n", 385 inode->i_sb->s_id, 386 (long long)NFS_FILEID(inode), 387 atomic_read(&inode->i_count)); 388 389 out: 390 return inode; 391 392 out_no_inode: 393 dprintk("nfs_fhget: iget failed with error %ld\n", PTR_ERR(inode)); 394 goto out; 395 } 396 397 #define NFS_VALID_ATTRS (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_SIZE|ATTR_ATIME|ATTR_ATIME_SET|ATTR_MTIME|ATTR_MTIME_SET|ATTR_FILE) 398 399 int 400 nfs_setattr(struct dentry *dentry, struct iattr *attr) 401 { 402 struct inode *inode = dentry->d_inode; 403 struct nfs_fattr *fattr; 404 int error = -ENOMEM; 405 406 nfs_inc_stats(inode, NFSIOS_VFSSETATTR); 407 408 /* skip mode change if it's just for clearing setuid/setgid */ 409 if (attr->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID)) 410 attr->ia_valid &= ~ATTR_MODE; 411 412 if (attr->ia_valid & ATTR_SIZE) { 413 if (!S_ISREG(inode->i_mode) || attr->ia_size == i_size_read(inode)) 414 attr->ia_valid &= ~ATTR_SIZE; 415 } 416 417 /* Optimization: if the end result is no change, don't RPC */ 418 attr->ia_valid &= NFS_VALID_ATTRS; 419 if ((attr->ia_valid & ~ATTR_FILE) == 0) 420 return 0; 421 422 /* Write all dirty data */ 423 if (S_ISREG(inode->i_mode)) 424 nfs_wb_all(inode); 425 426 fattr = nfs_alloc_fattr(); 427 if (fattr == NULL) 428 goto out; 429 /* 430 * Return any delegations if we're going to change ACLs 431 */ 432 if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) 433 nfs_inode_return_delegation(inode); 434 error = NFS_PROTO(inode)->setattr(dentry, fattr, attr); 435 if (error == 0) 436 nfs_refresh_inode(inode, fattr); 437 nfs_free_fattr(fattr); 438 out: 439 return error; 440 } 441 442 /** 443 * nfs_vmtruncate - unmap mappings "freed" by truncate() syscall 444 * @inode: inode of the file used 445 * @offset: file offset to start truncating 446 * 447 * This is a copy of the common vmtruncate, but with the locking 448 * corrected to take into account the fact that NFS requires 449 * inode->i_size to be updated under the inode->i_lock. 450 */ 451 static int nfs_vmtruncate(struct inode * inode, loff_t offset) 452 { 453 loff_t oldsize; 454 int err; 455 456 err = inode_newsize_ok(inode, offset); 457 if (err) 458 goto out; 459 460 spin_lock(&inode->i_lock); 461 oldsize = inode->i_size; 462 i_size_write(inode, offset); 463 spin_unlock(&inode->i_lock); 464 465 truncate_pagecache(inode, oldsize, offset); 466 out: 467 return err; 468 } 469 470 /** 471 * nfs_setattr_update_inode - Update inode metadata after a setattr call. 472 * @inode: pointer to struct inode 473 * @attr: pointer to struct iattr 474 * 475 * Note: we do this in the *proc.c in order to ensure that 476 * it works for things like exclusive creates too. 477 */ 478 void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr) 479 { 480 if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) { 481 spin_lock(&inode->i_lock); 482 if ((attr->ia_valid & ATTR_MODE) != 0) { 483 int mode = attr->ia_mode & S_IALLUGO; 484 mode |= inode->i_mode & ~S_IALLUGO; 485 inode->i_mode = mode; 486 } 487 if ((attr->ia_valid & ATTR_UID) != 0) 488 inode->i_uid = attr->ia_uid; 489 if ((attr->ia_valid & ATTR_GID) != 0) 490 inode->i_gid = attr->ia_gid; 491 NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 492 spin_unlock(&inode->i_lock); 493 } 494 if ((attr->ia_valid & ATTR_SIZE) != 0) { 495 nfs_inc_stats(inode, NFSIOS_SETATTRTRUNC); 496 nfs_vmtruncate(inode, attr->ia_size); 497 } 498 } 499 500 int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) 501 { 502 struct inode *inode = dentry->d_inode; 503 int need_atime = NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATIME; 504 int err; 505 506 /* Flush out writes to the server in order to update c/mtime. */ 507 if (S_ISREG(inode->i_mode)) { 508 err = filemap_write_and_wait(inode->i_mapping); 509 if (err) 510 goto out; 511 } 512 513 /* 514 * We may force a getattr if the user cares about atime. 515 * 516 * Note that we only have to check the vfsmount flags here: 517 * - NFS always sets S_NOATIME by so checking it would give a 518 * bogus result 519 * - NFS never sets MS_NOATIME or MS_NODIRATIME so there is 520 * no point in checking those. 521 */ 522 if ((mnt->mnt_flags & MNT_NOATIME) || 523 ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))) 524 need_atime = 0; 525 526 if (need_atime) 527 err = __nfs_revalidate_inode(NFS_SERVER(inode), inode); 528 else 529 err = nfs_revalidate_inode(NFS_SERVER(inode), inode); 530 if (!err) { 531 generic_fillattr(inode, stat); 532 stat->ino = nfs_compat_user_ino64(NFS_FILEID(inode)); 533 } 534 out: 535 return err; 536 } 537 538 static void nfs_init_lock_context(struct nfs_lock_context *l_ctx) 539 { 540 atomic_set(&l_ctx->count, 1); 541 l_ctx->lockowner = current->files; 542 l_ctx->pid = current->tgid; 543 INIT_LIST_HEAD(&l_ctx->list); 544 } 545 546 static struct nfs_lock_context *__nfs_find_lock_context(struct nfs_open_context *ctx) 547 { 548 struct nfs_lock_context *pos; 549 550 list_for_each_entry(pos, &ctx->lock_context.list, list) { 551 if (pos->lockowner != current->files) 552 continue; 553 if (pos->pid != current->tgid) 554 continue; 555 atomic_inc(&pos->count); 556 return pos; 557 } 558 return NULL; 559 } 560 561 struct nfs_lock_context *nfs_get_lock_context(struct nfs_open_context *ctx) 562 { 563 struct nfs_lock_context *res, *new = NULL; 564 struct inode *inode = ctx->path.dentry->d_inode; 565 566 spin_lock(&inode->i_lock); 567 res = __nfs_find_lock_context(ctx); 568 if (res == NULL) { 569 spin_unlock(&inode->i_lock); 570 new = kmalloc(sizeof(*new), GFP_KERNEL); 571 if (new == NULL) 572 return NULL; 573 nfs_init_lock_context(new); 574 spin_lock(&inode->i_lock); 575 res = __nfs_find_lock_context(ctx); 576 if (res == NULL) { 577 list_add_tail(&new->list, &ctx->lock_context.list); 578 new->open_context = ctx; 579 res = new; 580 new = NULL; 581 } 582 } 583 spin_unlock(&inode->i_lock); 584 kfree(new); 585 return res; 586 } 587 588 void nfs_put_lock_context(struct nfs_lock_context *l_ctx) 589 { 590 struct nfs_open_context *ctx = l_ctx->open_context; 591 struct inode *inode = ctx->path.dentry->d_inode; 592 593 if (!atomic_dec_and_lock(&l_ctx->count, &inode->i_lock)) 594 return; 595 list_del(&l_ctx->list); 596 spin_unlock(&inode->i_lock); 597 kfree(l_ctx); 598 } 599 600 /** 601 * nfs_close_context - Common close_context() routine NFSv2/v3 602 * @ctx: pointer to context 603 * @is_sync: is this a synchronous close 604 * 605 * always ensure that the attributes are up to date if we're mounted 606 * with close-to-open semantics 607 */ 608 void nfs_close_context(struct nfs_open_context *ctx, int is_sync) 609 { 610 struct inode *inode; 611 struct nfs_server *server; 612 613 if (!(ctx->mode & FMODE_WRITE)) 614 return; 615 if (!is_sync) 616 return; 617 inode = ctx->path.dentry->d_inode; 618 if (!list_empty(&NFS_I(inode)->open_files)) 619 return; 620 server = NFS_SERVER(inode); 621 if (server->flags & NFS_MOUNT_NOCTO) 622 return; 623 nfs_revalidate_inode(server, inode); 624 } 625 626 static struct nfs_open_context *alloc_nfs_open_context(struct path *path, struct rpc_cred *cred) 627 { 628 struct nfs_open_context *ctx; 629 630 ctx = kmalloc(sizeof(*ctx), GFP_KERNEL); 631 if (ctx != NULL) { 632 ctx->path = *path; 633 path_get(&ctx->path); 634 ctx->cred = get_rpccred(cred); 635 ctx->state = NULL; 636 ctx->flags = 0; 637 ctx->error = 0; 638 ctx->dir_cookie = 0; 639 nfs_init_lock_context(&ctx->lock_context); 640 ctx->lock_context.open_context = ctx; 641 } 642 return ctx; 643 } 644 645 struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx) 646 { 647 if (ctx != NULL) 648 atomic_inc(&ctx->lock_context.count); 649 return ctx; 650 } 651 652 static void __put_nfs_open_context(struct nfs_open_context *ctx, int is_sync) 653 { 654 struct inode *inode = ctx->path.dentry->d_inode; 655 656 if (!atomic_dec_and_lock(&ctx->lock_context.count, &inode->i_lock)) 657 return; 658 list_del(&ctx->list); 659 spin_unlock(&inode->i_lock); 660 NFS_PROTO(inode)->close_context(ctx, is_sync); 661 if (ctx->cred != NULL) 662 put_rpccred(ctx->cred); 663 path_put(&ctx->path); 664 kfree(ctx); 665 } 666 667 void put_nfs_open_context(struct nfs_open_context *ctx) 668 { 669 __put_nfs_open_context(ctx, 0); 670 } 671 672 /* 673 * Ensure that mmap has a recent RPC credential for use when writing out 674 * shared pages 675 */ 676 static void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx) 677 { 678 struct inode *inode = filp->f_path.dentry->d_inode; 679 struct nfs_inode *nfsi = NFS_I(inode); 680 681 filp->private_data = get_nfs_open_context(ctx); 682 spin_lock(&inode->i_lock); 683 list_add(&ctx->list, &nfsi->open_files); 684 spin_unlock(&inode->i_lock); 685 } 686 687 /* 688 * Given an inode, search for an open context with the desired characteristics 689 */ 690 struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, fmode_t mode) 691 { 692 struct nfs_inode *nfsi = NFS_I(inode); 693 struct nfs_open_context *pos, *ctx = NULL; 694 695 spin_lock(&inode->i_lock); 696 list_for_each_entry(pos, &nfsi->open_files, list) { 697 if (cred != NULL && pos->cred != cred) 698 continue; 699 if ((pos->mode & (FMODE_READ|FMODE_WRITE)) != mode) 700 continue; 701 ctx = get_nfs_open_context(pos); 702 break; 703 } 704 spin_unlock(&inode->i_lock); 705 return ctx; 706 } 707 708 static void nfs_file_clear_open_context(struct file *filp) 709 { 710 struct inode *inode = filp->f_path.dentry->d_inode; 711 struct nfs_open_context *ctx = nfs_file_open_context(filp); 712 713 if (ctx) { 714 filp->private_data = NULL; 715 spin_lock(&inode->i_lock); 716 list_move_tail(&ctx->list, &NFS_I(inode)->open_files); 717 spin_unlock(&inode->i_lock); 718 __put_nfs_open_context(ctx, filp->f_flags & O_DIRECT ? 0 : 1); 719 } 720 } 721 722 /* 723 * These allocate and release file read/write context information. 724 */ 725 int nfs_open(struct inode *inode, struct file *filp) 726 { 727 struct nfs_open_context *ctx; 728 struct rpc_cred *cred; 729 730 cred = rpc_lookup_cred(); 731 if (IS_ERR(cred)) 732 return PTR_ERR(cred); 733 ctx = alloc_nfs_open_context(&filp->f_path, cred); 734 put_rpccred(cred); 735 if (ctx == NULL) 736 return -ENOMEM; 737 ctx->mode = filp->f_mode; 738 nfs_file_set_open_context(filp, ctx); 739 put_nfs_open_context(ctx); 740 nfs_fscache_set_inode_cookie(inode, filp); 741 return 0; 742 } 743 744 int nfs_release(struct inode *inode, struct file *filp) 745 { 746 nfs_file_clear_open_context(filp); 747 return 0; 748 } 749 750 /* 751 * This function is called whenever some part of NFS notices that 752 * the cached attributes have to be refreshed. 753 */ 754 int 755 __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) 756 { 757 int status = -ESTALE; 758 struct nfs_fattr *fattr = NULL; 759 struct nfs_inode *nfsi = NFS_I(inode); 760 761 dfprintk(PAGECACHE, "NFS: revalidating (%s/%Ld)\n", 762 inode->i_sb->s_id, (long long)NFS_FILEID(inode)); 763 764 if (is_bad_inode(inode)) 765 goto out; 766 if (NFS_STALE(inode)) 767 goto out; 768 769 status = -ENOMEM; 770 fattr = nfs_alloc_fattr(); 771 if (fattr == NULL) 772 goto out; 773 774 nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE); 775 status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr); 776 if (status != 0) { 777 dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) getattr failed, error=%d\n", 778 inode->i_sb->s_id, 779 (long long)NFS_FILEID(inode), status); 780 if (status == -ESTALE) { 781 nfs_zap_caches(inode); 782 if (!S_ISDIR(inode->i_mode)) 783 set_bit(NFS_INO_STALE, &NFS_I(inode)->flags); 784 } 785 goto out; 786 } 787 788 status = nfs_refresh_inode(inode, fattr); 789 if (status) { 790 dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) refresh failed, error=%d\n", 791 inode->i_sb->s_id, 792 (long long)NFS_FILEID(inode), status); 793 goto out; 794 } 795 796 if (nfsi->cache_validity & NFS_INO_INVALID_ACL) 797 nfs_zap_acl_cache(inode); 798 799 dfprintk(PAGECACHE, "NFS: (%s/%Ld) revalidation complete\n", 800 inode->i_sb->s_id, 801 (long long)NFS_FILEID(inode)); 802 803 out: 804 nfs_free_fattr(fattr); 805 return status; 806 } 807 808 int nfs_attribute_timeout(struct inode *inode) 809 { 810 struct nfs_inode *nfsi = NFS_I(inode); 811 812 return !time_in_range_open(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo); 813 } 814 815 static int nfs_attribute_cache_expired(struct inode *inode) 816 { 817 if (nfs_have_delegated_attributes(inode)) 818 return 0; 819 return nfs_attribute_timeout(inode); 820 } 821 822 /** 823 * nfs_revalidate_inode - Revalidate the inode attributes 824 * @server - pointer to nfs_server struct 825 * @inode - pointer to inode struct 826 * 827 * Updates inode attribute information by retrieving the data from the server. 828 */ 829 int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) 830 { 831 if (!(NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATTR) 832 && !nfs_attribute_cache_expired(inode)) 833 return NFS_STALE(inode) ? -ESTALE : 0; 834 return __nfs_revalidate_inode(server, inode); 835 } 836 837 static int nfs_invalidate_mapping(struct inode *inode, struct address_space *mapping) 838 { 839 struct nfs_inode *nfsi = NFS_I(inode); 840 841 if (mapping->nrpages != 0) { 842 int ret = invalidate_inode_pages2(mapping); 843 if (ret < 0) 844 return ret; 845 } 846 spin_lock(&inode->i_lock); 847 nfsi->cache_validity &= ~NFS_INO_INVALID_DATA; 848 if (S_ISDIR(inode->i_mode)) 849 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf)); 850 spin_unlock(&inode->i_lock); 851 nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE); 852 nfs_fscache_reset_inode_cookie(inode); 853 dfprintk(PAGECACHE, "NFS: (%s/%Ld) data cache invalidated\n", 854 inode->i_sb->s_id, (long long)NFS_FILEID(inode)); 855 return 0; 856 } 857 858 /** 859 * nfs_revalidate_mapping - Revalidate the pagecache 860 * @inode - pointer to host inode 861 * @mapping - pointer to mapping 862 */ 863 int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping) 864 { 865 struct nfs_inode *nfsi = NFS_I(inode); 866 int ret = 0; 867 868 if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE) 869 || nfs_attribute_cache_expired(inode) 870 || NFS_STALE(inode)) { 871 ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode); 872 if (ret < 0) 873 goto out; 874 } 875 if (nfsi->cache_validity & NFS_INO_INVALID_DATA) 876 ret = nfs_invalidate_mapping(inode, mapping); 877 out: 878 return ret; 879 } 880 881 static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr) 882 { 883 struct nfs_inode *nfsi = NFS_I(inode); 884 885 if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE) 886 && (fattr->valid & NFS_ATTR_FATTR_CHANGE) 887 && nfsi->change_attr == fattr->pre_change_attr) { 888 nfsi->change_attr = fattr->change_attr; 889 if (S_ISDIR(inode->i_mode)) 890 nfsi->cache_validity |= NFS_INO_INVALID_DATA; 891 } 892 /* If we have atomic WCC data, we may update some attributes */ 893 if ((fattr->valid & NFS_ATTR_FATTR_PRECTIME) 894 && (fattr->valid & NFS_ATTR_FATTR_CTIME) 895 && timespec_equal(&inode->i_ctime, &fattr->pre_ctime)) 896 memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime)); 897 898 if ((fattr->valid & NFS_ATTR_FATTR_PREMTIME) 899 && (fattr->valid & NFS_ATTR_FATTR_MTIME) 900 && timespec_equal(&inode->i_mtime, &fattr->pre_mtime)) { 901 memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime)); 902 if (S_ISDIR(inode->i_mode)) 903 nfsi->cache_validity |= NFS_INO_INVALID_DATA; 904 } 905 if ((fattr->valid & NFS_ATTR_FATTR_PRESIZE) 906 && (fattr->valid & NFS_ATTR_FATTR_SIZE) 907 && i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size) 908 && nfsi->npages == 0) 909 i_size_write(inode, nfs_size_to_loff_t(fattr->size)); 910 } 911 912 /** 913 * nfs_check_inode_attributes - verify consistency of the inode attribute cache 914 * @inode - pointer to inode 915 * @fattr - updated attributes 916 * 917 * Verifies the attribute cache. If we have just changed the attributes, 918 * so that fattr carries weak cache consistency data, then it may 919 * also update the ctime/mtime/change_attribute. 920 */ 921 static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr) 922 { 923 struct nfs_inode *nfsi = NFS_I(inode); 924 loff_t cur_size, new_isize; 925 unsigned long invalid = 0; 926 927 928 /* Has the inode gone and changed behind our back? */ 929 if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid) 930 return -EIO; 931 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) 932 return -EIO; 933 934 if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 && 935 nfsi->change_attr != fattr->change_attr) 936 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 937 938 /* Verify a few of the more important attributes */ 939 if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec_equal(&inode->i_mtime, &fattr->mtime)) 940 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 941 942 if (fattr->valid & NFS_ATTR_FATTR_SIZE) { 943 cur_size = i_size_read(inode); 944 new_isize = nfs_size_to_loff_t(fattr->size); 945 if (cur_size != new_isize && nfsi->npages == 0) 946 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 947 } 948 949 /* Have any file permissions changed? */ 950 if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) 951 invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL; 952 if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && inode->i_uid != fattr->uid) 953 invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL; 954 if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && inode->i_gid != fattr->gid) 955 invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL; 956 957 /* Has the link count changed? */ 958 if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink) 959 invalid |= NFS_INO_INVALID_ATTR; 960 961 if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec_equal(&inode->i_atime, &fattr->atime)) 962 invalid |= NFS_INO_INVALID_ATIME; 963 964 if (invalid != 0) 965 nfsi->cache_validity |= invalid; 966 967 nfsi->read_cache_jiffies = fattr->time_start; 968 return 0; 969 } 970 971 static int nfs_ctime_need_update(const struct inode *inode, const struct nfs_fattr *fattr) 972 { 973 if (!(fattr->valid & NFS_ATTR_FATTR_CTIME)) 974 return 0; 975 return timespec_compare(&fattr->ctime, &inode->i_ctime) > 0; 976 } 977 978 static int nfs_size_need_update(const struct inode *inode, const struct nfs_fattr *fattr) 979 { 980 if (!(fattr->valid & NFS_ATTR_FATTR_SIZE)) 981 return 0; 982 return nfs_size_to_loff_t(fattr->size) > i_size_read(inode); 983 } 984 985 static atomic_long_t nfs_attr_generation_counter; 986 987 static unsigned long nfs_read_attr_generation_counter(void) 988 { 989 return atomic_long_read(&nfs_attr_generation_counter); 990 } 991 992 unsigned long nfs_inc_attr_generation_counter(void) 993 { 994 return atomic_long_inc_return(&nfs_attr_generation_counter); 995 } 996 997 void nfs_fattr_init(struct nfs_fattr *fattr) 998 { 999 fattr->valid = 0; 1000 fattr->time_start = jiffies; 1001 fattr->gencount = nfs_inc_attr_generation_counter(); 1002 } 1003 1004 struct nfs_fattr *nfs_alloc_fattr(void) 1005 { 1006 struct nfs_fattr *fattr; 1007 1008 fattr = kmalloc(sizeof(*fattr), GFP_NOFS); 1009 if (fattr != NULL) 1010 nfs_fattr_init(fattr); 1011 return fattr; 1012 } 1013 1014 struct nfs_fh *nfs_alloc_fhandle(void) 1015 { 1016 struct nfs_fh *fh; 1017 1018 fh = kmalloc(sizeof(struct nfs_fh), GFP_NOFS); 1019 if (fh != NULL) 1020 fh->size = 0; 1021 return fh; 1022 } 1023 1024 /** 1025 * nfs_inode_attrs_need_update - check if the inode attributes need updating 1026 * @inode - pointer to inode 1027 * @fattr - attributes 1028 * 1029 * Attempt to divine whether or not an RPC call reply carrying stale 1030 * attributes got scheduled after another call carrying updated ones. 1031 * 1032 * To do so, the function first assumes that a more recent ctime means 1033 * that the attributes in fattr are newer, however it also attempt to 1034 * catch the case where ctime either didn't change, or went backwards 1035 * (if someone reset the clock on the server) by looking at whether 1036 * or not this RPC call was started after the inode was last updated. 1037 * Note also the check for wraparound of 'attr_gencount' 1038 * 1039 * The function returns 'true' if it thinks the attributes in 'fattr' are 1040 * more recent than the ones cached in the inode. 1041 * 1042 */ 1043 static int nfs_inode_attrs_need_update(const struct inode *inode, const struct nfs_fattr *fattr) 1044 { 1045 const struct nfs_inode *nfsi = NFS_I(inode); 1046 1047 return ((long)fattr->gencount - (long)nfsi->attr_gencount) > 0 || 1048 nfs_ctime_need_update(inode, fattr) || 1049 nfs_size_need_update(inode, fattr) || 1050 ((long)nfsi->attr_gencount - (long)nfs_read_attr_generation_counter() > 0); 1051 } 1052 1053 static int nfs_refresh_inode_locked(struct inode *inode, struct nfs_fattr *fattr) 1054 { 1055 if (nfs_inode_attrs_need_update(inode, fattr)) 1056 return nfs_update_inode(inode, fattr); 1057 return nfs_check_inode_attributes(inode, fattr); 1058 } 1059 1060 /** 1061 * nfs_refresh_inode - try to update the inode attribute cache 1062 * @inode - pointer to inode 1063 * @fattr - updated attributes 1064 * 1065 * Check that an RPC call that returned attributes has not overlapped with 1066 * other recent updates of the inode metadata, then decide whether it is 1067 * safe to do a full update of the inode attributes, or whether just to 1068 * call nfs_check_inode_attributes. 1069 */ 1070 int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr) 1071 { 1072 int status; 1073 1074 if ((fattr->valid & NFS_ATTR_FATTR) == 0) 1075 return 0; 1076 spin_lock(&inode->i_lock); 1077 status = nfs_refresh_inode_locked(inode, fattr); 1078 spin_unlock(&inode->i_lock); 1079 1080 return status; 1081 } 1082 1083 static int nfs_post_op_update_inode_locked(struct inode *inode, struct nfs_fattr *fattr) 1084 { 1085 struct nfs_inode *nfsi = NFS_I(inode); 1086 1087 nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 1088 if (S_ISDIR(inode->i_mode)) 1089 nfsi->cache_validity |= NFS_INO_INVALID_DATA; 1090 if ((fattr->valid & NFS_ATTR_FATTR) == 0) 1091 return 0; 1092 return nfs_refresh_inode_locked(inode, fattr); 1093 } 1094 1095 /** 1096 * nfs_post_op_update_inode - try to update the inode attribute cache 1097 * @inode - pointer to inode 1098 * @fattr - updated attributes 1099 * 1100 * After an operation that has changed the inode metadata, mark the 1101 * attribute cache as being invalid, then try to update it. 1102 * 1103 * NB: if the server didn't return any post op attributes, this 1104 * function will force the retrieval of attributes before the next 1105 * NFS request. Thus it should be used only for operations that 1106 * are expected to change one or more attributes, to avoid 1107 * unnecessary NFS requests and trips through nfs_update_inode(). 1108 */ 1109 int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr) 1110 { 1111 int status; 1112 1113 spin_lock(&inode->i_lock); 1114 status = nfs_post_op_update_inode_locked(inode, fattr); 1115 spin_unlock(&inode->i_lock); 1116 return status; 1117 } 1118 1119 /** 1120 * nfs_post_op_update_inode_force_wcc - try to update the inode attribute cache 1121 * @inode - pointer to inode 1122 * @fattr - updated attributes 1123 * 1124 * After an operation that has changed the inode metadata, mark the 1125 * attribute cache as being invalid, then try to update it. Fake up 1126 * weak cache consistency data, if none exist. 1127 * 1128 * This function is mainly designed to be used by the ->write_done() functions. 1129 */ 1130 int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr) 1131 { 1132 int status; 1133 1134 spin_lock(&inode->i_lock); 1135 /* Don't do a WCC update if these attributes are already stale */ 1136 if ((fattr->valid & NFS_ATTR_FATTR) == 0 || 1137 !nfs_inode_attrs_need_update(inode, fattr)) { 1138 fattr->valid &= ~(NFS_ATTR_FATTR_PRECHANGE 1139 | NFS_ATTR_FATTR_PRESIZE 1140 | NFS_ATTR_FATTR_PREMTIME 1141 | NFS_ATTR_FATTR_PRECTIME); 1142 goto out_noforce; 1143 } 1144 if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 && 1145 (fattr->valid & NFS_ATTR_FATTR_PRECHANGE) == 0) { 1146 fattr->pre_change_attr = NFS_I(inode)->change_attr; 1147 fattr->valid |= NFS_ATTR_FATTR_PRECHANGE; 1148 } 1149 if ((fattr->valid & NFS_ATTR_FATTR_CTIME) != 0 && 1150 (fattr->valid & NFS_ATTR_FATTR_PRECTIME) == 0) { 1151 memcpy(&fattr->pre_ctime, &inode->i_ctime, sizeof(fattr->pre_ctime)); 1152 fattr->valid |= NFS_ATTR_FATTR_PRECTIME; 1153 } 1154 if ((fattr->valid & NFS_ATTR_FATTR_MTIME) != 0 && 1155 (fattr->valid & NFS_ATTR_FATTR_PREMTIME) == 0) { 1156 memcpy(&fattr->pre_mtime, &inode->i_mtime, sizeof(fattr->pre_mtime)); 1157 fattr->valid |= NFS_ATTR_FATTR_PREMTIME; 1158 } 1159 if ((fattr->valid & NFS_ATTR_FATTR_SIZE) != 0 && 1160 (fattr->valid & NFS_ATTR_FATTR_PRESIZE) == 0) { 1161 fattr->pre_size = i_size_read(inode); 1162 fattr->valid |= NFS_ATTR_FATTR_PRESIZE; 1163 } 1164 out_noforce: 1165 status = nfs_post_op_update_inode_locked(inode, fattr); 1166 spin_unlock(&inode->i_lock); 1167 return status; 1168 } 1169 1170 /* 1171 * Many nfs protocol calls return the new file attributes after 1172 * an operation. Here we update the inode to reflect the state 1173 * of the server's inode. 1174 * 1175 * This is a bit tricky because we have to make sure all dirty pages 1176 * have been sent off to the server before calling invalidate_inode_pages. 1177 * To make sure no other process adds more write requests while we try 1178 * our best to flush them, we make them sleep during the attribute refresh. 1179 * 1180 * A very similar scenario holds for the dir cache. 1181 */ 1182 static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) 1183 { 1184 struct nfs_server *server; 1185 struct nfs_inode *nfsi = NFS_I(inode); 1186 loff_t cur_isize, new_isize; 1187 unsigned long invalid = 0; 1188 unsigned long now = jiffies; 1189 unsigned long save_cache_validity; 1190 1191 dfprintk(VFS, "NFS: %s(%s/%ld ct=%d info=0x%x)\n", 1192 __func__, inode->i_sb->s_id, inode->i_ino, 1193 atomic_read(&inode->i_count), fattr->valid); 1194 1195 if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid) 1196 goto out_fileid; 1197 1198 /* 1199 * Make sure the inode's type hasn't changed. 1200 */ 1201 if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) 1202 goto out_changed; 1203 1204 server = NFS_SERVER(inode); 1205 /* Update the fsid? */ 1206 if (S_ISDIR(inode->i_mode) && (fattr->valid & NFS_ATTR_FATTR_FSID) && 1207 !nfs_fsid_equal(&server->fsid, &fattr->fsid) && 1208 !test_bit(NFS_INO_MOUNTPOINT, &nfsi->flags)) 1209 server->fsid = fattr->fsid; 1210 1211 /* 1212 * Update the read time so we don't revalidate too often. 1213 */ 1214 nfsi->read_cache_jiffies = fattr->time_start; 1215 1216 save_cache_validity = nfsi->cache_validity; 1217 nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR 1218 | NFS_INO_INVALID_ATIME 1219 | NFS_INO_REVAL_FORCED 1220 | NFS_INO_REVAL_PAGECACHE); 1221 1222 /* Do atomic weak cache consistency updates */ 1223 nfs_wcc_update_inode(inode, fattr); 1224 1225 /* More cache consistency checks */ 1226 if (fattr->valid & NFS_ATTR_FATTR_CHANGE) { 1227 if (nfsi->change_attr != fattr->change_attr) { 1228 dprintk("NFS: change_attr change on server for file %s/%ld\n", 1229 inode->i_sb->s_id, inode->i_ino); 1230 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 1231 if (S_ISDIR(inode->i_mode)) 1232 nfs_force_lookup_revalidate(inode); 1233 nfsi->change_attr = fattr->change_attr; 1234 } 1235 } else if (server->caps & NFS_CAP_CHANGE_ATTR) 1236 invalid |= save_cache_validity; 1237 1238 if (fattr->valid & NFS_ATTR_FATTR_MTIME) { 1239 /* NFSv2/v3: Check if the mtime agrees */ 1240 if (!timespec_equal(&inode->i_mtime, &fattr->mtime)) { 1241 dprintk("NFS: mtime change on server for file %s/%ld\n", 1242 inode->i_sb->s_id, inode->i_ino); 1243 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA; 1244 if (S_ISDIR(inode->i_mode)) 1245 nfs_force_lookup_revalidate(inode); 1246 memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime)); 1247 } 1248 } else if (server->caps & NFS_CAP_MTIME) 1249 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR 1250 | NFS_INO_INVALID_DATA 1251 | NFS_INO_REVAL_PAGECACHE 1252 | NFS_INO_REVAL_FORCED); 1253 1254 if (fattr->valid & NFS_ATTR_FATTR_CTIME) { 1255 /* If ctime has changed we should definitely clear access+acl caches */ 1256 if (!timespec_equal(&inode->i_ctime, &fattr->ctime)) { 1257 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 1258 /* and probably clear data for a directory too as utimes can cause 1259 * havoc with our cache. 1260 */ 1261 if (S_ISDIR(inode->i_mode)) { 1262 invalid |= NFS_INO_INVALID_DATA; 1263 nfs_force_lookup_revalidate(inode); 1264 } 1265 memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime)); 1266 } 1267 } else if (server->caps & NFS_CAP_CTIME) 1268 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR 1269 | NFS_INO_INVALID_ACCESS 1270 | NFS_INO_INVALID_ACL 1271 | NFS_INO_REVAL_FORCED); 1272 1273 /* Check if our cached file size is stale */ 1274 if (fattr->valid & NFS_ATTR_FATTR_SIZE) { 1275 new_isize = nfs_size_to_loff_t(fattr->size); 1276 cur_isize = i_size_read(inode); 1277 if (new_isize != cur_isize) { 1278 /* Do we perhaps have any outstanding writes, or has 1279 * the file grown beyond our last write? */ 1280 if (nfsi->npages == 0 || new_isize > cur_isize) { 1281 i_size_write(inode, new_isize); 1282 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA; 1283 } 1284 dprintk("NFS: isize change on server for file %s/%ld\n", 1285 inode->i_sb->s_id, inode->i_ino); 1286 } 1287 } else 1288 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR 1289 | NFS_INO_REVAL_PAGECACHE 1290 | NFS_INO_REVAL_FORCED); 1291 1292 1293 if (fattr->valid & NFS_ATTR_FATTR_ATIME) 1294 memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime)); 1295 else if (server->caps & NFS_CAP_ATIME) 1296 invalid |= save_cache_validity & (NFS_INO_INVALID_ATIME 1297 | NFS_INO_REVAL_FORCED); 1298 1299 if (fattr->valid & NFS_ATTR_FATTR_MODE) { 1300 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) { 1301 umode_t newmode = inode->i_mode & S_IFMT; 1302 newmode |= fattr->mode & S_IALLUGO; 1303 inode->i_mode = newmode; 1304 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 1305 } 1306 } else if (server->caps & NFS_CAP_MODE) 1307 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR 1308 | NFS_INO_INVALID_ACCESS 1309 | NFS_INO_INVALID_ACL 1310 | NFS_INO_REVAL_FORCED); 1311 1312 if (fattr->valid & NFS_ATTR_FATTR_OWNER) { 1313 if (inode->i_uid != fattr->uid) { 1314 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 1315 inode->i_uid = fattr->uid; 1316 } 1317 } else if (server->caps & NFS_CAP_OWNER) 1318 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR 1319 | NFS_INO_INVALID_ACCESS 1320 | NFS_INO_INVALID_ACL 1321 | NFS_INO_REVAL_FORCED); 1322 1323 if (fattr->valid & NFS_ATTR_FATTR_GROUP) { 1324 if (inode->i_gid != fattr->gid) { 1325 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 1326 inode->i_gid = fattr->gid; 1327 } 1328 } else if (server->caps & NFS_CAP_OWNER_GROUP) 1329 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR 1330 | NFS_INO_INVALID_ACCESS 1331 | NFS_INO_INVALID_ACL 1332 | NFS_INO_REVAL_FORCED); 1333 1334 if (fattr->valid & NFS_ATTR_FATTR_NLINK) { 1335 if (inode->i_nlink != fattr->nlink) { 1336 invalid |= NFS_INO_INVALID_ATTR; 1337 if (S_ISDIR(inode->i_mode)) 1338 invalid |= NFS_INO_INVALID_DATA; 1339 inode->i_nlink = fattr->nlink; 1340 } 1341 } else if (server->caps & NFS_CAP_NLINK) 1342 invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR 1343 | NFS_INO_REVAL_FORCED); 1344 1345 if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) { 1346 /* 1347 * report the blocks in 512byte units 1348 */ 1349 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used); 1350 } 1351 if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED) 1352 inode->i_blocks = fattr->du.nfs2.blocks; 1353 1354 /* Update attrtimeo value if we're out of the unstable period */ 1355 if (invalid & NFS_INO_INVALID_ATTR) { 1356 nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE); 1357 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode); 1358 nfsi->attrtimeo_timestamp = now; 1359 nfsi->attr_gencount = nfs_inc_attr_generation_counter(); 1360 } else { 1361 if (!time_in_range_open(now, nfsi->attrtimeo_timestamp, nfsi->attrtimeo_timestamp + nfsi->attrtimeo)) { 1362 if ((nfsi->attrtimeo <<= 1) > NFS_MAXATTRTIMEO(inode)) 1363 nfsi->attrtimeo = NFS_MAXATTRTIMEO(inode); 1364 nfsi->attrtimeo_timestamp = now; 1365 } 1366 } 1367 invalid &= ~NFS_INO_INVALID_ATTR; 1368 /* Don't invalidate the data if we were to blame */ 1369 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) 1370 || S_ISLNK(inode->i_mode))) 1371 invalid &= ~NFS_INO_INVALID_DATA; 1372 if (!nfs_have_delegation(inode, FMODE_READ) || 1373 (save_cache_validity & NFS_INO_REVAL_FORCED)) 1374 nfsi->cache_validity |= invalid; 1375 1376 return 0; 1377 out_changed: 1378 /* 1379 * Big trouble! The inode has become a different object. 1380 */ 1381 printk(KERN_DEBUG "%s: inode %ld mode changed, %07o to %07o\n", 1382 __func__, inode->i_ino, inode->i_mode, fattr->mode); 1383 out_err: 1384 /* 1385 * No need to worry about unhashing the dentry, as the 1386 * lookup validation will know that the inode is bad. 1387 * (But we fall through to invalidate the caches.) 1388 */ 1389 nfs_invalidate_inode(inode); 1390 return -ESTALE; 1391 1392 out_fileid: 1393 printk(KERN_ERR "NFS: server %s error: fileid changed\n" 1394 "fsid %s: expected fileid 0x%Lx, got 0x%Lx\n", 1395 NFS_SERVER(inode)->nfs_client->cl_hostname, inode->i_sb->s_id, 1396 (long long)nfsi->fileid, (long long)fattr->fileid); 1397 goto out_err; 1398 } 1399 1400 1401 #ifdef CONFIG_NFS_V4 1402 1403 /* 1404 * Clean out any remaining NFSv4 state that might be left over due 1405 * to open() calls that passed nfs_atomic_lookup, but failed to call 1406 * nfs_open(). 1407 */ 1408 void nfs4_evict_inode(struct inode *inode) 1409 { 1410 truncate_inode_pages(&inode->i_data, 0); 1411 end_writeback(inode); 1412 /* If we are holding a delegation, return it! */ 1413 nfs_inode_return_delegation_noreclaim(inode); 1414 /* First call standard NFS clear_inode() code */ 1415 nfs_clear_inode(inode); 1416 } 1417 #endif 1418 1419 struct inode *nfs_alloc_inode(struct super_block *sb) 1420 { 1421 struct nfs_inode *nfsi; 1422 nfsi = (struct nfs_inode *)kmem_cache_alloc(nfs_inode_cachep, GFP_KERNEL); 1423 if (!nfsi) 1424 return NULL; 1425 nfsi->flags = 0UL; 1426 nfsi->cache_validity = 0UL; 1427 #ifdef CONFIG_NFS_V3_ACL 1428 nfsi->acl_access = ERR_PTR(-EAGAIN); 1429 nfsi->acl_default = ERR_PTR(-EAGAIN); 1430 #endif 1431 #ifdef CONFIG_NFS_V4 1432 nfsi->nfs4_acl = NULL; 1433 #endif /* CONFIG_NFS_V4 */ 1434 return &nfsi->vfs_inode; 1435 } 1436 1437 void nfs_destroy_inode(struct inode *inode) 1438 { 1439 kmem_cache_free(nfs_inode_cachep, NFS_I(inode)); 1440 } 1441 1442 static inline void nfs4_init_once(struct nfs_inode *nfsi) 1443 { 1444 #ifdef CONFIG_NFS_V4 1445 INIT_LIST_HEAD(&nfsi->open_states); 1446 nfsi->delegation = NULL; 1447 nfsi->delegation_state = 0; 1448 init_rwsem(&nfsi->rwsem); 1449 #endif 1450 } 1451 1452 static void init_once(void *foo) 1453 { 1454 struct nfs_inode *nfsi = (struct nfs_inode *) foo; 1455 1456 inode_init_once(&nfsi->vfs_inode); 1457 INIT_LIST_HEAD(&nfsi->open_files); 1458 INIT_LIST_HEAD(&nfsi->access_cache_entry_lru); 1459 INIT_LIST_HEAD(&nfsi->access_cache_inode_lru); 1460 INIT_RADIX_TREE(&nfsi->nfs_page_tree, GFP_ATOMIC); 1461 nfsi->npages = 0; 1462 nfsi->ncommit = 0; 1463 atomic_set(&nfsi->silly_count, 1); 1464 INIT_HLIST_HEAD(&nfsi->silly_list); 1465 init_waitqueue_head(&nfsi->waitqueue); 1466 nfs4_init_once(nfsi); 1467 } 1468 1469 static int __init nfs_init_inodecache(void) 1470 { 1471 nfs_inode_cachep = kmem_cache_create("nfs_inode_cache", 1472 sizeof(struct nfs_inode), 1473 0, (SLAB_RECLAIM_ACCOUNT| 1474 SLAB_MEM_SPREAD), 1475 init_once); 1476 if (nfs_inode_cachep == NULL) 1477 return -ENOMEM; 1478 1479 return 0; 1480 } 1481 1482 static void nfs_destroy_inodecache(void) 1483 { 1484 kmem_cache_destroy(nfs_inode_cachep); 1485 } 1486 1487 struct workqueue_struct *nfsiod_workqueue; 1488 1489 /* 1490 * start up the nfsiod workqueue 1491 */ 1492 static int nfsiod_start(void) 1493 { 1494 struct workqueue_struct *wq; 1495 dprintk("RPC: creating workqueue nfsiod\n"); 1496 wq = create_singlethread_workqueue("nfsiod"); 1497 if (wq == NULL) 1498 return -ENOMEM; 1499 nfsiod_workqueue = wq; 1500 return 0; 1501 } 1502 1503 /* 1504 * Destroy the nfsiod workqueue 1505 */ 1506 static void nfsiod_stop(void) 1507 { 1508 struct workqueue_struct *wq; 1509 1510 wq = nfsiod_workqueue; 1511 if (wq == NULL) 1512 return; 1513 nfsiod_workqueue = NULL; 1514 destroy_workqueue(wq); 1515 } 1516 1517 /* 1518 * Initialize NFS 1519 */ 1520 static int __init init_nfs_fs(void) 1521 { 1522 int err; 1523 1524 err = nfs_dns_resolver_init(); 1525 if (err < 0) 1526 goto out8; 1527 1528 err = nfs_fscache_register(); 1529 if (err < 0) 1530 goto out7; 1531 1532 err = nfsiod_start(); 1533 if (err) 1534 goto out6; 1535 1536 err = nfs_fs_proc_init(); 1537 if (err) 1538 goto out5; 1539 1540 err = nfs_init_nfspagecache(); 1541 if (err) 1542 goto out4; 1543 1544 err = nfs_init_inodecache(); 1545 if (err) 1546 goto out3; 1547 1548 err = nfs_init_readpagecache(); 1549 if (err) 1550 goto out2; 1551 1552 err = nfs_init_writepagecache(); 1553 if (err) 1554 goto out1; 1555 1556 err = nfs_init_directcache(); 1557 if (err) 1558 goto out0; 1559 1560 #ifdef CONFIG_PROC_FS 1561 rpc_proc_register(&nfs_rpcstat); 1562 #endif 1563 if ((err = register_nfs_fs()) != 0) 1564 goto out; 1565 return 0; 1566 out: 1567 #ifdef CONFIG_PROC_FS 1568 rpc_proc_unregister("nfs"); 1569 #endif 1570 nfs_destroy_directcache(); 1571 out0: 1572 nfs_destroy_writepagecache(); 1573 out1: 1574 nfs_destroy_readpagecache(); 1575 out2: 1576 nfs_destroy_inodecache(); 1577 out3: 1578 nfs_destroy_nfspagecache(); 1579 out4: 1580 nfs_fs_proc_exit(); 1581 out5: 1582 nfsiod_stop(); 1583 out6: 1584 nfs_fscache_unregister(); 1585 out7: 1586 nfs_dns_resolver_destroy(); 1587 out8: 1588 return err; 1589 } 1590 1591 static void __exit exit_nfs_fs(void) 1592 { 1593 nfs_destroy_directcache(); 1594 nfs_destroy_writepagecache(); 1595 nfs_destroy_readpagecache(); 1596 nfs_destroy_inodecache(); 1597 nfs_destroy_nfspagecache(); 1598 nfs_fscache_unregister(); 1599 nfs_dns_resolver_destroy(); 1600 #ifdef CONFIG_PROC_FS 1601 rpc_proc_unregister("nfs"); 1602 #endif 1603 unregister_nfs_fs(); 1604 nfs_fs_proc_exit(); 1605 nfsiod_stop(); 1606 } 1607 1608 /* Not quite true; I just maintain it */ 1609 MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>"); 1610 MODULE_LICENSE("GPL"); 1611 module_param(enable_ino64, bool, 0644); 1612 1613 module_init(init_nfs_fs) 1614 module_exit(exit_nfs_fs) 1615