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