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.Cox@linux.org>, 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/config.h> 17 #include <linux/module.h> 18 #include <linux/init.h> 19 20 #include <linux/time.h> 21 #include <linux/kernel.h> 22 #include <linux/mm.h> 23 #include <linux/string.h> 24 #include <linux/stat.h> 25 #include <linux/errno.h> 26 #include <linux/unistd.h> 27 #include <linux/sunrpc/clnt.h> 28 #include <linux/sunrpc/stats.h> 29 #include <linux/sunrpc/metrics.h> 30 #include <linux/nfs_fs.h> 31 #include <linux/nfs_mount.h> 32 #include <linux/nfs4_mount.h> 33 #include <linux/lockd/bind.h> 34 #include <linux/smp_lock.h> 35 #include <linux/seq_file.h> 36 #include <linux/mount.h> 37 #include <linux/nfs_idmap.h> 38 #include <linux/vfs.h> 39 #include <linux/inet.h> 40 #include <linux/nfs_xdr.h> 41 42 #include <asm/system.h> 43 #include <asm/uaccess.h> 44 45 #include "nfs4_fs.h" 46 #include "callback.h" 47 #include "delegation.h" 48 #include "iostat.h" 49 #include "internal.h" 50 51 #define NFSDBG_FACILITY NFSDBG_VFS 52 #define NFS_PARANOIA 1 53 54 static void nfs_invalidate_inode(struct inode *); 55 static int nfs_update_inode(struct inode *, struct nfs_fattr *); 56 57 static void nfs_zap_acl_cache(struct inode *); 58 59 static kmem_cache_t * nfs_inode_cachep; 60 61 static inline unsigned long 62 nfs_fattr_to_ino_t(struct nfs_fattr *fattr) 63 { 64 return nfs_fileid_to_ino_t(fattr->fileid); 65 } 66 67 int nfs_write_inode(struct inode *inode, int sync) 68 { 69 int flags = sync ? FLUSH_SYNC : 0; 70 int ret; 71 72 ret = nfs_commit_inode(inode, flags); 73 if (ret < 0) 74 return ret; 75 return 0; 76 } 77 78 void nfs_clear_inode(struct inode *inode) 79 { 80 struct nfs_inode *nfsi = NFS_I(inode); 81 struct rpc_cred *cred; 82 83 /* 84 * The following should never happen... 85 */ 86 BUG_ON(nfs_have_writebacks(inode)); 87 BUG_ON (!list_empty(&nfsi->open_files)); 88 nfs_zap_acl_cache(inode); 89 cred = nfsi->cache_access.cred; 90 if (cred) 91 put_rpccred(cred); 92 BUG_ON(atomic_read(&nfsi->data_updates) != 0); 93 } 94 95 /** 96 * nfs_sync_mapping - helper to flush all mmapped dirty data to disk 97 */ 98 int nfs_sync_mapping(struct address_space *mapping) 99 { 100 int ret; 101 102 if (mapping->nrpages == 0) 103 return 0; 104 unmap_mapping_range(mapping, 0, 0, 0); 105 ret = filemap_write_and_wait(mapping); 106 if (ret != 0) 107 goto out; 108 ret = nfs_wb_all(mapping->host); 109 out: 110 return ret; 111 } 112 113 /* 114 * Invalidate the local caches 115 */ 116 static void nfs_zap_caches_locked(struct inode *inode) 117 { 118 struct nfs_inode *nfsi = NFS_I(inode); 119 int mode = inode->i_mode; 120 121 nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE); 122 123 NFS_ATTRTIMEO(inode) = NFS_MINATTRTIMEO(inode); 124 NFS_ATTRTIMEO_UPDATE(inode) = jiffies; 125 126 memset(NFS_COOKIEVERF(inode), 0, sizeof(NFS_COOKIEVERF(inode))); 127 if (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) 128 nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; 129 else 130 nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; 131 } 132 133 void nfs_zap_caches(struct inode *inode) 134 { 135 spin_lock(&inode->i_lock); 136 nfs_zap_caches_locked(inode); 137 spin_unlock(&inode->i_lock); 138 } 139 140 static void nfs_zap_acl_cache(struct inode *inode) 141 { 142 void (*clear_acl_cache)(struct inode *); 143 144 clear_acl_cache = NFS_PROTO(inode)->clear_acl_cache; 145 if (clear_acl_cache != NULL) 146 clear_acl_cache(inode); 147 spin_lock(&inode->i_lock); 148 NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_ACL; 149 spin_unlock(&inode->i_lock); 150 } 151 152 /* 153 * Invalidate, but do not unhash, the inode. 154 * NB: must be called with inode->i_lock held! 155 */ 156 static void nfs_invalidate_inode(struct inode *inode) 157 { 158 set_bit(NFS_INO_STALE, &NFS_FLAGS(inode)); 159 nfs_zap_caches_locked(inode); 160 } 161 162 struct nfs_find_desc { 163 struct nfs_fh *fh; 164 struct nfs_fattr *fattr; 165 }; 166 167 /* 168 * In NFSv3 we can have 64bit inode numbers. In order to support 169 * this, and re-exported directories (also seen in NFSv2) 170 * we are forced to allow 2 different inodes to have the same 171 * i_ino. 172 */ 173 static int 174 nfs_find_actor(struct inode *inode, void *opaque) 175 { 176 struct nfs_find_desc *desc = (struct nfs_find_desc *)opaque; 177 struct nfs_fh *fh = desc->fh; 178 struct nfs_fattr *fattr = desc->fattr; 179 180 if (NFS_FILEID(inode) != fattr->fileid) 181 return 0; 182 if (nfs_compare_fh(NFS_FH(inode), fh)) 183 return 0; 184 if (is_bad_inode(inode) || NFS_STALE(inode)) 185 return 0; 186 return 1; 187 } 188 189 static int 190 nfs_init_locked(struct inode *inode, void *opaque) 191 { 192 struct nfs_find_desc *desc = (struct nfs_find_desc *)opaque; 193 struct nfs_fattr *fattr = desc->fattr; 194 195 NFS_FILEID(inode) = fattr->fileid; 196 nfs_copy_fh(NFS_FH(inode), desc->fh); 197 return 0; 198 } 199 200 /* Don't use READDIRPLUS on directories that we believe are too large */ 201 #define NFS_LIMIT_READDIRPLUS (8*PAGE_SIZE) 202 203 /* 204 * This is our front-end to iget that looks up inodes by file handle 205 * instead of inode number. 206 */ 207 struct inode * 208 nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr) 209 { 210 struct nfs_find_desc desc = { 211 .fh = fh, 212 .fattr = fattr 213 }; 214 struct inode *inode = ERR_PTR(-ENOENT); 215 unsigned long hash; 216 217 if ((fattr->valid & NFS_ATTR_FATTR) == 0) 218 goto out_no_inode; 219 220 if (!fattr->nlink) { 221 printk("NFS: Buggy server - nlink == 0!\n"); 222 goto out_no_inode; 223 } 224 225 hash = nfs_fattr_to_ino_t(fattr); 226 227 inode = iget5_locked(sb, hash, nfs_find_actor, nfs_init_locked, &desc); 228 if (inode == NULL) { 229 inode = ERR_PTR(-ENOMEM); 230 goto out_no_inode; 231 } 232 233 if (inode->i_state & I_NEW) { 234 struct nfs_inode *nfsi = NFS_I(inode); 235 236 /* We set i_ino for the few things that still rely on it, 237 * such as stat(2) */ 238 inode->i_ino = hash; 239 240 /* We can't support update_atime(), since the server will reset it */ 241 inode->i_flags |= S_NOATIME|S_NOCMTIME; 242 inode->i_mode = fattr->mode; 243 /* Why so? Because we want revalidate for devices/FIFOs, and 244 * that's precisely what we have in nfs_file_inode_operations. 245 */ 246 inode->i_op = NFS_SB(sb)->rpc_ops->file_inode_ops; 247 if (S_ISREG(inode->i_mode)) { 248 inode->i_fop = &nfs_file_operations; 249 inode->i_data.a_ops = &nfs_file_aops; 250 inode->i_data.backing_dev_info = &NFS_SB(sb)->backing_dev_info; 251 } else if (S_ISDIR(inode->i_mode)) { 252 inode->i_op = NFS_SB(sb)->rpc_ops->dir_inode_ops; 253 inode->i_fop = &nfs_dir_operations; 254 if (nfs_server_capable(inode, NFS_CAP_READDIRPLUS) 255 && fattr->size <= NFS_LIMIT_READDIRPLUS) 256 set_bit(NFS_INO_ADVISE_RDPLUS, &NFS_FLAGS(inode)); 257 /* Deal with crossing mountpoints */ 258 if (!nfs_fsid_equal(&NFS_SB(sb)->fsid, &fattr->fsid)) { 259 if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) 260 inode->i_op = &nfs_referral_inode_operations; 261 else 262 inode->i_op = &nfs_mountpoint_inode_operations; 263 inode->i_fop = NULL; 264 } 265 } else if (S_ISLNK(inode->i_mode)) 266 inode->i_op = &nfs_symlink_inode_operations; 267 else 268 init_special_inode(inode, inode->i_mode, fattr->rdev); 269 270 nfsi->read_cache_jiffies = fattr->time_start; 271 nfsi->last_updated = jiffies; 272 inode->i_atime = fattr->atime; 273 inode->i_mtime = fattr->mtime; 274 inode->i_ctime = fattr->ctime; 275 if (fattr->valid & NFS_ATTR_FATTR_V4) 276 nfsi->change_attr = fattr->change_attr; 277 inode->i_size = nfs_size_to_loff_t(fattr->size); 278 inode->i_nlink = fattr->nlink; 279 inode->i_uid = fattr->uid; 280 inode->i_gid = fattr->gid; 281 if (fattr->valid & (NFS_ATTR_FATTR_V3 | NFS_ATTR_FATTR_V4)) { 282 /* 283 * report the blocks in 512byte units 284 */ 285 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used); 286 inode->i_blksize = inode->i_sb->s_blocksize; 287 } else { 288 inode->i_blocks = fattr->du.nfs2.blocks; 289 inode->i_blksize = fattr->du.nfs2.blocksize; 290 } 291 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode); 292 nfsi->attrtimeo_timestamp = jiffies; 293 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf)); 294 nfsi->cache_access.cred = NULL; 295 296 unlock_new_inode(inode); 297 } else 298 nfs_refresh_inode(inode, fattr); 299 dprintk("NFS: nfs_fhget(%s/%Ld ct=%d)\n", 300 inode->i_sb->s_id, 301 (long long)NFS_FILEID(inode), 302 atomic_read(&inode->i_count)); 303 304 out: 305 return inode; 306 307 out_no_inode: 308 dprintk("nfs_fhget: iget failed with error %ld\n", PTR_ERR(inode)); 309 goto out; 310 } 311 312 #define NFS_VALID_ATTRS (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_SIZE|ATTR_ATIME|ATTR_ATIME_SET|ATTR_MTIME|ATTR_MTIME_SET) 313 314 int 315 nfs_setattr(struct dentry *dentry, struct iattr *attr) 316 { 317 struct inode *inode = dentry->d_inode; 318 struct nfs_fattr fattr; 319 int error; 320 321 nfs_inc_stats(inode, NFSIOS_VFSSETATTR); 322 323 if (attr->ia_valid & ATTR_SIZE) { 324 if (!S_ISREG(inode->i_mode) || attr->ia_size == i_size_read(inode)) 325 attr->ia_valid &= ~ATTR_SIZE; 326 } 327 328 /* Optimization: if the end result is no change, don't RPC */ 329 attr->ia_valid &= NFS_VALID_ATTRS; 330 if (attr->ia_valid == 0) 331 return 0; 332 333 lock_kernel(); 334 nfs_begin_data_update(inode); 335 /* Write all dirty data */ 336 filemap_write_and_wait(inode->i_mapping); 337 nfs_wb_all(inode); 338 /* 339 * Return any delegations if we're going to change ACLs 340 */ 341 if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) 342 nfs_inode_return_delegation(inode); 343 error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr); 344 if (error == 0) 345 nfs_refresh_inode(inode, &fattr); 346 nfs_end_data_update(inode); 347 unlock_kernel(); 348 return error; 349 } 350 351 /** 352 * nfs_setattr_update_inode - Update inode metadata after a setattr call. 353 * @inode: pointer to struct inode 354 * @attr: pointer to struct iattr 355 * 356 * Note: we do this in the *proc.c in order to ensure that 357 * it works for things like exclusive creates too. 358 */ 359 void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr) 360 { 361 if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) { 362 if ((attr->ia_valid & ATTR_MODE) != 0) { 363 int mode = attr->ia_mode & S_IALLUGO; 364 mode |= inode->i_mode & ~S_IALLUGO; 365 inode->i_mode = mode; 366 } 367 if ((attr->ia_valid & ATTR_UID) != 0) 368 inode->i_uid = attr->ia_uid; 369 if ((attr->ia_valid & ATTR_GID) != 0) 370 inode->i_gid = attr->ia_gid; 371 spin_lock(&inode->i_lock); 372 NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 373 spin_unlock(&inode->i_lock); 374 } 375 if ((attr->ia_valid & ATTR_SIZE) != 0) { 376 nfs_inc_stats(inode, NFSIOS_SETATTRTRUNC); 377 inode->i_size = attr->ia_size; 378 vmtruncate(inode, attr->ia_size); 379 } 380 } 381 382 static int nfs_wait_schedule(void *word) 383 { 384 if (signal_pending(current)) 385 return -ERESTARTSYS; 386 schedule(); 387 return 0; 388 } 389 390 /* 391 * Wait for the inode to get unlocked. 392 */ 393 static int nfs_wait_on_inode(struct inode *inode) 394 { 395 struct rpc_clnt *clnt = NFS_CLIENT(inode); 396 struct nfs_inode *nfsi = NFS_I(inode); 397 sigset_t oldmask; 398 int error; 399 400 rpc_clnt_sigmask(clnt, &oldmask); 401 error = wait_on_bit_lock(&nfsi->flags, NFS_INO_REVALIDATING, 402 nfs_wait_schedule, TASK_INTERRUPTIBLE); 403 rpc_clnt_sigunmask(clnt, &oldmask); 404 405 return error; 406 } 407 408 static void nfs_wake_up_inode(struct inode *inode) 409 { 410 struct nfs_inode *nfsi = NFS_I(inode); 411 412 clear_bit(NFS_INO_REVALIDATING, &nfsi->flags); 413 smp_mb__after_clear_bit(); 414 wake_up_bit(&nfsi->flags, NFS_INO_REVALIDATING); 415 } 416 417 int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) 418 { 419 struct inode *inode = dentry->d_inode; 420 int need_atime = NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATIME; 421 int err; 422 423 /* Flush out writes to the server in order to update c/mtime */ 424 nfs_sync_inode_wait(inode, 0, 0, FLUSH_NOCOMMIT); 425 426 /* 427 * We may force a getattr if the user cares about atime. 428 * 429 * Note that we only have to check the vfsmount flags here: 430 * - NFS always sets S_NOATIME by so checking it would give a 431 * bogus result 432 * - NFS never sets MS_NOATIME or MS_NODIRATIME so there is 433 * no point in checking those. 434 */ 435 if ((mnt->mnt_flags & MNT_NOATIME) || 436 ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))) 437 need_atime = 0; 438 439 if (need_atime) 440 err = __nfs_revalidate_inode(NFS_SERVER(inode), inode); 441 else 442 err = nfs_revalidate_inode(NFS_SERVER(inode), inode); 443 if (!err) 444 generic_fillattr(inode, stat); 445 return err; 446 } 447 448 static struct nfs_open_context *alloc_nfs_open_context(struct vfsmount *mnt, struct dentry *dentry, struct rpc_cred *cred) 449 { 450 struct nfs_open_context *ctx; 451 452 ctx = (struct nfs_open_context *)kmalloc(sizeof(*ctx), GFP_KERNEL); 453 if (ctx != NULL) { 454 atomic_set(&ctx->count, 1); 455 ctx->dentry = dget(dentry); 456 ctx->vfsmnt = mntget(mnt); 457 ctx->cred = get_rpccred(cred); 458 ctx->state = NULL; 459 ctx->lockowner = current->files; 460 ctx->error = 0; 461 ctx->dir_cookie = 0; 462 } 463 return ctx; 464 } 465 466 struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx) 467 { 468 if (ctx != NULL) 469 atomic_inc(&ctx->count); 470 return ctx; 471 } 472 473 void put_nfs_open_context(struct nfs_open_context *ctx) 474 { 475 if (atomic_dec_and_test(&ctx->count)) { 476 if (!list_empty(&ctx->list)) { 477 struct inode *inode = ctx->dentry->d_inode; 478 spin_lock(&inode->i_lock); 479 list_del(&ctx->list); 480 spin_unlock(&inode->i_lock); 481 } 482 if (ctx->state != NULL) 483 nfs4_close_state(ctx->state, ctx->mode); 484 if (ctx->cred != NULL) 485 put_rpccred(ctx->cred); 486 dput(ctx->dentry); 487 mntput(ctx->vfsmnt); 488 kfree(ctx); 489 } 490 } 491 492 /* 493 * Ensure that mmap has a recent RPC credential for use when writing out 494 * shared pages 495 */ 496 static void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx) 497 { 498 struct inode *inode = filp->f_dentry->d_inode; 499 struct nfs_inode *nfsi = NFS_I(inode); 500 501 filp->private_data = get_nfs_open_context(ctx); 502 spin_lock(&inode->i_lock); 503 list_add(&ctx->list, &nfsi->open_files); 504 spin_unlock(&inode->i_lock); 505 } 506 507 /* 508 * Given an inode, search for an open context with the desired characteristics 509 */ 510 struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, int mode) 511 { 512 struct nfs_inode *nfsi = NFS_I(inode); 513 struct nfs_open_context *pos, *ctx = NULL; 514 515 spin_lock(&inode->i_lock); 516 list_for_each_entry(pos, &nfsi->open_files, list) { 517 if (cred != NULL && pos->cred != cred) 518 continue; 519 if ((pos->mode & mode) == mode) { 520 ctx = get_nfs_open_context(pos); 521 break; 522 } 523 } 524 spin_unlock(&inode->i_lock); 525 return ctx; 526 } 527 528 static void nfs_file_clear_open_context(struct file *filp) 529 { 530 struct inode *inode = filp->f_dentry->d_inode; 531 struct nfs_open_context *ctx = (struct nfs_open_context *)filp->private_data; 532 533 if (ctx) { 534 filp->private_data = NULL; 535 spin_lock(&inode->i_lock); 536 list_move_tail(&ctx->list, &NFS_I(inode)->open_files); 537 spin_unlock(&inode->i_lock); 538 put_nfs_open_context(ctx); 539 } 540 } 541 542 /* 543 * These allocate and release file read/write context information. 544 */ 545 int nfs_open(struct inode *inode, struct file *filp) 546 { 547 struct nfs_open_context *ctx; 548 struct rpc_cred *cred; 549 550 cred = rpcauth_lookupcred(NFS_CLIENT(inode)->cl_auth, 0); 551 if (IS_ERR(cred)) 552 return PTR_ERR(cred); 553 ctx = alloc_nfs_open_context(filp->f_vfsmnt, filp->f_dentry, cred); 554 put_rpccred(cred); 555 if (ctx == NULL) 556 return -ENOMEM; 557 ctx->mode = filp->f_mode; 558 nfs_file_set_open_context(filp, ctx); 559 put_nfs_open_context(ctx); 560 return 0; 561 } 562 563 int nfs_release(struct inode *inode, struct file *filp) 564 { 565 nfs_file_clear_open_context(filp); 566 return 0; 567 } 568 569 /* 570 * This function is called whenever some part of NFS notices that 571 * the cached attributes have to be refreshed. 572 */ 573 int 574 __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) 575 { 576 int status = -ESTALE; 577 struct nfs_fattr fattr; 578 struct nfs_inode *nfsi = NFS_I(inode); 579 580 dfprintk(PAGECACHE, "NFS: revalidating (%s/%Ld)\n", 581 inode->i_sb->s_id, (long long)NFS_FILEID(inode)); 582 583 nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE); 584 lock_kernel(); 585 if (!inode || is_bad_inode(inode)) 586 goto out_nowait; 587 if (NFS_STALE(inode)) 588 goto out_nowait; 589 590 status = nfs_wait_on_inode(inode); 591 if (status < 0) 592 goto out; 593 if (NFS_STALE(inode)) { 594 status = -ESTALE; 595 /* Do we trust the cached ESTALE? */ 596 if (NFS_ATTRTIMEO(inode) != 0) { 597 if (nfsi->cache_validity & (NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ATIME)) { 598 /* no */ 599 } else 600 goto out; 601 } 602 } 603 604 status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), &fattr); 605 if (status != 0) { 606 dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) getattr failed, error=%d\n", 607 inode->i_sb->s_id, 608 (long long)NFS_FILEID(inode), status); 609 if (status == -ESTALE) { 610 nfs_zap_caches(inode); 611 if (!S_ISDIR(inode->i_mode)) 612 set_bit(NFS_INO_STALE, &NFS_FLAGS(inode)); 613 } 614 goto out; 615 } 616 617 spin_lock(&inode->i_lock); 618 status = nfs_update_inode(inode, &fattr); 619 if (status) { 620 spin_unlock(&inode->i_lock); 621 dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) refresh failed, error=%d\n", 622 inode->i_sb->s_id, 623 (long long)NFS_FILEID(inode), status); 624 goto out; 625 } 626 spin_unlock(&inode->i_lock); 627 628 if (nfsi->cache_validity & NFS_INO_INVALID_ACL) 629 nfs_zap_acl_cache(inode); 630 631 dfprintk(PAGECACHE, "NFS: (%s/%Ld) revalidation complete\n", 632 inode->i_sb->s_id, 633 (long long)NFS_FILEID(inode)); 634 635 out: 636 nfs_wake_up_inode(inode); 637 638 out_nowait: 639 unlock_kernel(); 640 return status; 641 } 642 643 int nfs_attribute_timeout(struct inode *inode) 644 { 645 struct nfs_inode *nfsi = NFS_I(inode); 646 647 if (nfs_have_delegation(inode, FMODE_READ)) 648 return 0; 649 return time_after(jiffies, nfsi->read_cache_jiffies+nfsi->attrtimeo); 650 } 651 652 /** 653 * nfs_revalidate_inode - Revalidate the inode attributes 654 * @server - pointer to nfs_server struct 655 * @inode - pointer to inode struct 656 * 657 * Updates inode attribute information by retrieving the data from the server. 658 */ 659 int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) 660 { 661 if (!(NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATTR) 662 && !nfs_attribute_timeout(inode)) 663 return NFS_STALE(inode) ? -ESTALE : 0; 664 return __nfs_revalidate_inode(server, inode); 665 } 666 667 /** 668 * nfs_revalidate_mapping - Revalidate the pagecache 669 * @inode - pointer to host inode 670 * @mapping - pointer to mapping 671 */ 672 int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping) 673 { 674 struct nfs_inode *nfsi = NFS_I(inode); 675 int ret = 0; 676 677 if (NFS_STALE(inode)) 678 ret = -ESTALE; 679 if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE) 680 || nfs_attribute_timeout(inode)) 681 ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode); 682 683 if (nfsi->cache_validity & NFS_INO_INVALID_DATA) { 684 nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE); 685 if (S_ISREG(inode->i_mode)) 686 nfs_sync_mapping(mapping); 687 invalidate_inode_pages2(mapping); 688 689 spin_lock(&inode->i_lock); 690 nfsi->cache_validity &= ~NFS_INO_INVALID_DATA; 691 if (S_ISDIR(inode->i_mode)) { 692 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf)); 693 /* This ensures we revalidate child dentries */ 694 nfsi->cache_change_attribute = jiffies; 695 } 696 spin_unlock(&inode->i_lock); 697 698 dfprintk(PAGECACHE, "NFS: (%s/%Ld) data cache invalidated\n", 699 inode->i_sb->s_id, 700 (long long)NFS_FILEID(inode)); 701 } 702 return ret; 703 } 704 705 /** 706 * nfs_begin_data_update 707 * @inode - pointer to inode 708 * Declare that a set of operations will update file data on the server 709 */ 710 void nfs_begin_data_update(struct inode *inode) 711 { 712 atomic_inc(&NFS_I(inode)->data_updates); 713 } 714 715 /** 716 * nfs_end_data_update 717 * @inode - pointer to inode 718 * Declare end of the operations that will update file data 719 * This will mark the inode as immediately needing revalidation 720 * of its attribute cache. 721 */ 722 void nfs_end_data_update(struct inode *inode) 723 { 724 struct nfs_inode *nfsi = NFS_I(inode); 725 726 if (!nfs_have_delegation(inode, FMODE_READ)) { 727 /* Directories and symlinks: invalidate page cache */ 728 if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) { 729 spin_lock(&inode->i_lock); 730 nfsi->cache_validity |= NFS_INO_INVALID_DATA; 731 spin_unlock(&inode->i_lock); 732 } 733 } 734 nfsi->cache_change_attribute = jiffies; 735 atomic_dec(&nfsi->data_updates); 736 } 737 738 static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr) 739 { 740 struct nfs_inode *nfsi = NFS_I(inode); 741 742 /* If we have atomic WCC data, we may update some attributes */ 743 if ((fattr->valid & NFS_ATTR_WCC) != 0) { 744 if (timespec_equal(&inode->i_ctime, &fattr->pre_ctime)) { 745 memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime)); 746 nfsi->cache_change_attribute = jiffies; 747 } 748 if (timespec_equal(&inode->i_mtime, &fattr->pre_mtime)) { 749 memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime)); 750 nfsi->cache_change_attribute = jiffies; 751 } 752 if (inode->i_size == fattr->pre_size && nfsi->npages == 0) { 753 inode->i_size = fattr->size; 754 nfsi->cache_change_attribute = jiffies; 755 } 756 } 757 } 758 759 /** 760 * nfs_check_inode_attributes - verify consistency of the inode attribute cache 761 * @inode - pointer to inode 762 * @fattr - updated attributes 763 * 764 * Verifies the attribute cache. If we have just changed the attributes, 765 * so that fattr carries weak cache consistency data, then it may 766 * also update the ctime/mtime/change_attribute. 767 */ 768 static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr) 769 { 770 struct nfs_inode *nfsi = NFS_I(inode); 771 loff_t cur_size, new_isize; 772 int data_unstable; 773 774 775 /* Has the inode gone and changed behind our back? */ 776 if (nfsi->fileid != fattr->fileid 777 || (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) { 778 return -EIO; 779 } 780 781 /* Are we in the process of updating data on the server? */ 782 data_unstable = nfs_caches_unstable(inode); 783 784 /* Do atomic weak cache consistency updates */ 785 nfs_wcc_update_inode(inode, fattr); 786 787 if ((fattr->valid & NFS_ATTR_FATTR_V4) != 0 && 788 nfsi->change_attr != fattr->change_attr) 789 nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 790 791 /* Verify a few of the more important attributes */ 792 if (!timespec_equal(&inode->i_mtime, &fattr->mtime)) 793 nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 794 795 cur_size = i_size_read(inode); 796 new_isize = nfs_size_to_loff_t(fattr->size); 797 if (cur_size != new_isize && nfsi->npages == 0) 798 nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 799 800 /* Have any file permissions changed? */ 801 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO) 802 || inode->i_uid != fattr->uid 803 || inode->i_gid != fattr->gid) 804 nfsi->cache_validity |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL; 805 806 /* Has the link count changed? */ 807 if (inode->i_nlink != fattr->nlink) 808 nfsi->cache_validity |= NFS_INO_INVALID_ATTR; 809 810 if (!timespec_equal(&inode->i_atime, &fattr->atime)) 811 nfsi->cache_validity |= NFS_INO_INVALID_ATIME; 812 813 nfsi->read_cache_jiffies = fattr->time_start; 814 return 0; 815 } 816 817 /** 818 * nfs_refresh_inode - try to update the inode attribute cache 819 * @inode - pointer to inode 820 * @fattr - updated attributes 821 * 822 * Check that an RPC call that returned attributes has not overlapped with 823 * other recent updates of the inode metadata, then decide whether it is 824 * safe to do a full update of the inode attributes, or whether just to 825 * call nfs_check_inode_attributes. 826 */ 827 int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr) 828 { 829 struct nfs_inode *nfsi = NFS_I(inode); 830 int status; 831 832 if ((fattr->valid & NFS_ATTR_FATTR) == 0) 833 return 0; 834 spin_lock(&inode->i_lock); 835 if (time_after(fattr->time_start, nfsi->last_updated)) 836 status = nfs_update_inode(inode, fattr); 837 else 838 status = nfs_check_inode_attributes(inode, fattr); 839 840 spin_unlock(&inode->i_lock); 841 return status; 842 } 843 844 /** 845 * nfs_post_op_update_inode - try to update the inode attribute cache 846 * @inode - pointer to inode 847 * @fattr - updated attributes 848 * 849 * After an operation that has changed the inode metadata, mark the 850 * attribute cache as being invalid, then try to update it. 851 */ 852 int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr) 853 { 854 struct nfs_inode *nfsi = NFS_I(inode); 855 int status = 0; 856 857 spin_lock(&inode->i_lock); 858 if (unlikely((fattr->valid & NFS_ATTR_FATTR) == 0)) { 859 nfsi->cache_validity |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 860 goto out; 861 } 862 status = nfs_update_inode(inode, fattr); 863 out: 864 spin_unlock(&inode->i_lock); 865 return status; 866 } 867 868 /* 869 * Many nfs protocol calls return the new file attributes after 870 * an operation. Here we update the inode to reflect the state 871 * of the server's inode. 872 * 873 * This is a bit tricky because we have to make sure all dirty pages 874 * have been sent off to the server before calling invalidate_inode_pages. 875 * To make sure no other process adds more write requests while we try 876 * our best to flush them, we make them sleep during the attribute refresh. 877 * 878 * A very similar scenario holds for the dir cache. 879 */ 880 static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) 881 { 882 struct nfs_server *server; 883 struct nfs_inode *nfsi = NFS_I(inode); 884 loff_t cur_isize, new_isize; 885 unsigned int invalid = 0; 886 int data_stable; 887 888 dfprintk(VFS, "NFS: %s(%s/%ld ct=%d info=0x%x)\n", 889 __FUNCTION__, inode->i_sb->s_id, inode->i_ino, 890 atomic_read(&inode->i_count), fattr->valid); 891 892 if (nfsi->fileid != fattr->fileid) 893 goto out_fileid; 894 895 /* 896 * Make sure the inode's type hasn't changed. 897 */ 898 if ((inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) 899 goto out_changed; 900 901 server = NFS_SERVER(inode); 902 /* Update the fsid if and only if this is the root directory */ 903 if (inode == inode->i_sb->s_root->d_inode 904 && !nfs_fsid_equal(&server->fsid, &fattr->fsid)) 905 server->fsid = fattr->fsid; 906 907 /* 908 * Update the read time so we don't revalidate too often. 909 */ 910 nfsi->read_cache_jiffies = fattr->time_start; 911 nfsi->last_updated = jiffies; 912 913 /* Are we racing with known updates of the metadata on the server? */ 914 data_stable = nfs_verify_change_attribute(inode, fattr->time_start); 915 if (data_stable) 916 nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_ATIME); 917 918 /* Do atomic weak cache consistency updates */ 919 nfs_wcc_update_inode(inode, fattr); 920 921 /* Check if our cached file size is stale */ 922 new_isize = nfs_size_to_loff_t(fattr->size); 923 cur_isize = i_size_read(inode); 924 if (new_isize != cur_isize) { 925 /* Do we perhaps have any outstanding writes? */ 926 if (nfsi->npages == 0) { 927 /* No, but did we race with nfs_end_data_update()? */ 928 if (data_stable) { 929 inode->i_size = new_isize; 930 invalid |= NFS_INO_INVALID_DATA; 931 } 932 invalid |= NFS_INO_INVALID_ATTR; 933 } else if (new_isize > cur_isize) { 934 inode->i_size = new_isize; 935 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA; 936 } 937 nfsi->cache_change_attribute = jiffies; 938 dprintk("NFS: isize change on server for file %s/%ld\n", 939 inode->i_sb->s_id, inode->i_ino); 940 } 941 942 /* Check if the mtime agrees */ 943 if (!timespec_equal(&inode->i_mtime, &fattr->mtime)) { 944 memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime)); 945 dprintk("NFS: mtime change on server for file %s/%ld\n", 946 inode->i_sb->s_id, inode->i_ino); 947 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA; 948 nfsi->cache_change_attribute = jiffies; 949 } 950 951 /* If ctime has changed we should definitely clear access+acl caches */ 952 if (!timespec_equal(&inode->i_ctime, &fattr->ctime)) { 953 invalid |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 954 memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime)); 955 nfsi->cache_change_attribute = jiffies; 956 } 957 memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime)); 958 959 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO) || 960 inode->i_uid != fattr->uid || 961 inode->i_gid != fattr->gid) 962 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 963 964 inode->i_mode = fattr->mode; 965 inode->i_nlink = fattr->nlink; 966 inode->i_uid = fattr->uid; 967 inode->i_gid = fattr->gid; 968 969 if (fattr->valid & (NFS_ATTR_FATTR_V3 | NFS_ATTR_FATTR_V4)) { 970 /* 971 * report the blocks in 512byte units 972 */ 973 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used); 974 inode->i_blksize = inode->i_sb->s_blocksize; 975 } else { 976 inode->i_blocks = fattr->du.nfs2.blocks; 977 inode->i_blksize = fattr->du.nfs2.blocksize; 978 } 979 980 if ((fattr->valid & NFS_ATTR_FATTR_V4) != 0 && 981 nfsi->change_attr != fattr->change_attr) { 982 dprintk("NFS: change_attr change on server for file %s/%ld\n", 983 inode->i_sb->s_id, inode->i_ino); 984 nfsi->change_attr = fattr->change_attr; 985 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 986 nfsi->cache_change_attribute = jiffies; 987 } 988 989 /* Update attrtimeo value if we're out of the unstable period */ 990 if (invalid & NFS_INO_INVALID_ATTR) { 991 nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE); 992 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode); 993 nfsi->attrtimeo_timestamp = jiffies; 994 } else if (time_after(jiffies, nfsi->attrtimeo_timestamp+nfsi->attrtimeo)) { 995 if ((nfsi->attrtimeo <<= 1) > NFS_MAXATTRTIMEO(inode)) 996 nfsi->attrtimeo = NFS_MAXATTRTIMEO(inode); 997 nfsi->attrtimeo_timestamp = jiffies; 998 } 999 /* Don't invalidate the data if we were to blame */ 1000 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) 1001 || S_ISLNK(inode->i_mode))) 1002 invalid &= ~NFS_INO_INVALID_DATA; 1003 if (data_stable) 1004 invalid &= ~(NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ATIME|NFS_INO_REVAL_PAGECACHE); 1005 if (!nfs_have_delegation(inode, FMODE_READ)) 1006 nfsi->cache_validity |= invalid; 1007 1008 return 0; 1009 out_changed: 1010 /* 1011 * Big trouble! The inode has become a different object. 1012 */ 1013 #ifdef NFS_PARANOIA 1014 printk(KERN_DEBUG "%s: inode %ld mode changed, %07o to %07o\n", 1015 __FUNCTION__, inode->i_ino, inode->i_mode, fattr->mode); 1016 #endif 1017 out_err: 1018 /* 1019 * No need to worry about unhashing the dentry, as the 1020 * lookup validation will know that the inode is bad. 1021 * (But we fall through to invalidate the caches.) 1022 */ 1023 nfs_invalidate_inode(inode); 1024 return -ESTALE; 1025 1026 out_fileid: 1027 printk(KERN_ERR "NFS: server %s error: fileid changed\n" 1028 "fsid %s: expected fileid 0x%Lx, got 0x%Lx\n", 1029 NFS_SERVER(inode)->hostname, inode->i_sb->s_id, 1030 (long long)nfsi->fileid, (long long)fattr->fileid); 1031 goto out_err; 1032 } 1033 1034 1035 #ifdef CONFIG_NFS_V4 1036 1037 /* 1038 * Clean out any remaining NFSv4 state that might be left over due 1039 * to open() calls that passed nfs_atomic_lookup, but failed to call 1040 * nfs_open(). 1041 */ 1042 void nfs4_clear_inode(struct inode *inode) 1043 { 1044 struct nfs_inode *nfsi = NFS_I(inode); 1045 1046 /* If we are holding a delegation, return it! */ 1047 nfs_inode_return_delegation(inode); 1048 /* First call standard NFS clear_inode() code */ 1049 nfs_clear_inode(inode); 1050 /* Now clear out any remaining state */ 1051 while (!list_empty(&nfsi->open_states)) { 1052 struct nfs4_state *state; 1053 1054 state = list_entry(nfsi->open_states.next, 1055 struct nfs4_state, 1056 inode_states); 1057 dprintk("%s(%s/%Ld): found unclaimed NFSv4 state %p\n", 1058 __FUNCTION__, 1059 inode->i_sb->s_id, 1060 (long long)NFS_FILEID(inode), 1061 state); 1062 BUG_ON(atomic_read(&state->count) != 1); 1063 nfs4_close_state(state, state->state); 1064 } 1065 } 1066 #endif 1067 1068 struct inode *nfs_alloc_inode(struct super_block *sb) 1069 { 1070 struct nfs_inode *nfsi; 1071 nfsi = (struct nfs_inode *)kmem_cache_alloc(nfs_inode_cachep, SLAB_KERNEL); 1072 if (!nfsi) 1073 return NULL; 1074 nfsi->flags = 0UL; 1075 nfsi->cache_validity = 0UL; 1076 nfsi->cache_change_attribute = jiffies; 1077 #ifdef CONFIG_NFS_V3_ACL 1078 nfsi->acl_access = ERR_PTR(-EAGAIN); 1079 nfsi->acl_default = ERR_PTR(-EAGAIN); 1080 #endif 1081 #ifdef CONFIG_NFS_V4 1082 nfsi->nfs4_acl = NULL; 1083 #endif /* CONFIG_NFS_V4 */ 1084 return &nfsi->vfs_inode; 1085 } 1086 1087 void nfs_destroy_inode(struct inode *inode) 1088 { 1089 kmem_cache_free(nfs_inode_cachep, NFS_I(inode)); 1090 } 1091 1092 static inline void nfs4_init_once(struct nfs_inode *nfsi) 1093 { 1094 #ifdef CONFIG_NFS_V4 1095 INIT_LIST_HEAD(&nfsi->open_states); 1096 nfsi->delegation = NULL; 1097 nfsi->delegation_state = 0; 1098 init_rwsem(&nfsi->rwsem); 1099 #endif 1100 } 1101 1102 static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags) 1103 { 1104 struct nfs_inode *nfsi = (struct nfs_inode *) foo; 1105 1106 if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) == 1107 SLAB_CTOR_CONSTRUCTOR) { 1108 inode_init_once(&nfsi->vfs_inode); 1109 spin_lock_init(&nfsi->req_lock); 1110 INIT_LIST_HEAD(&nfsi->dirty); 1111 INIT_LIST_HEAD(&nfsi->commit); 1112 INIT_LIST_HEAD(&nfsi->open_files); 1113 INIT_RADIX_TREE(&nfsi->nfs_page_tree, GFP_ATOMIC); 1114 atomic_set(&nfsi->data_updates, 0); 1115 nfsi->ndirty = 0; 1116 nfsi->ncommit = 0; 1117 nfsi->npages = 0; 1118 nfs4_init_once(nfsi); 1119 } 1120 } 1121 1122 static int __init nfs_init_inodecache(void) 1123 { 1124 nfs_inode_cachep = kmem_cache_create("nfs_inode_cache", 1125 sizeof(struct nfs_inode), 1126 0, (SLAB_RECLAIM_ACCOUNT| 1127 SLAB_MEM_SPREAD), 1128 init_once, NULL); 1129 if (nfs_inode_cachep == NULL) 1130 return -ENOMEM; 1131 1132 return 0; 1133 } 1134 1135 static void __exit nfs_destroy_inodecache(void) 1136 { 1137 if (kmem_cache_destroy(nfs_inode_cachep)) 1138 printk(KERN_INFO "nfs_inode_cache: not all structures were freed\n"); 1139 } 1140 1141 /* 1142 * Initialize NFS 1143 */ 1144 static int __init init_nfs_fs(void) 1145 { 1146 int err; 1147 1148 err = nfs_init_nfspagecache(); 1149 if (err) 1150 goto out4; 1151 1152 err = nfs_init_inodecache(); 1153 if (err) 1154 goto out3; 1155 1156 err = nfs_init_readpagecache(); 1157 if (err) 1158 goto out2; 1159 1160 err = nfs_init_writepagecache(); 1161 if (err) 1162 goto out1; 1163 1164 err = nfs_init_directcache(); 1165 if (err) 1166 goto out0; 1167 1168 #ifdef CONFIG_PROC_FS 1169 rpc_proc_register(&nfs_rpcstat); 1170 #endif 1171 if ((err = register_nfs_fs()) != 0) 1172 goto out; 1173 return 0; 1174 out: 1175 #ifdef CONFIG_PROC_FS 1176 rpc_proc_unregister("nfs"); 1177 #endif 1178 nfs_destroy_directcache(); 1179 out0: 1180 nfs_destroy_writepagecache(); 1181 out1: 1182 nfs_destroy_readpagecache(); 1183 out2: 1184 nfs_destroy_inodecache(); 1185 out3: 1186 nfs_destroy_nfspagecache(); 1187 out4: 1188 return err; 1189 } 1190 1191 static void __exit exit_nfs_fs(void) 1192 { 1193 nfs_destroy_directcache(); 1194 nfs_destroy_writepagecache(); 1195 nfs_destroy_readpagecache(); 1196 nfs_destroy_inodecache(); 1197 nfs_destroy_nfspagecache(); 1198 #ifdef CONFIG_PROC_FS 1199 rpc_proc_unregister("nfs"); 1200 #endif 1201 unregister_nfs_fs(); 1202 } 1203 1204 /* Not quite true; I just maintain it */ 1205 MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>"); 1206 MODULE_LICENSE("GPL"); 1207 1208 module_init(init_nfs_fs) 1209 module_exit(exit_nfs_fs) 1210