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