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