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