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 filemap_write_and_wait(inode->i_mapping); 345 nfs_wb_all(inode); 346 /* 347 * Return any delegations if we're going to change ACLs 348 */ 349 if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) 350 nfs_inode_return_delegation(inode); 351 error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr); 352 if (error == 0) 353 nfs_refresh_inode(inode, &fattr); 354 nfs_end_data_update(inode); 355 unlock_kernel(); 356 return error; 357 } 358 359 /** 360 * nfs_setattr_update_inode - Update inode metadata after a setattr call. 361 * @inode: pointer to struct inode 362 * @attr: pointer to struct iattr 363 * 364 * Note: we do this in the *proc.c in order to ensure that 365 * it works for things like exclusive creates too. 366 */ 367 void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr) 368 { 369 if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) { 370 if ((attr->ia_valid & ATTR_MODE) != 0) { 371 int mode = attr->ia_mode & S_IALLUGO; 372 mode |= inode->i_mode & ~S_IALLUGO; 373 inode->i_mode = mode; 374 } 375 if ((attr->ia_valid & ATTR_UID) != 0) 376 inode->i_uid = attr->ia_uid; 377 if ((attr->ia_valid & ATTR_GID) != 0) 378 inode->i_gid = attr->ia_gid; 379 spin_lock(&inode->i_lock); 380 NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 381 spin_unlock(&inode->i_lock); 382 } 383 if ((attr->ia_valid & ATTR_SIZE) != 0) { 384 nfs_inc_stats(inode, NFSIOS_SETATTRTRUNC); 385 inode->i_size = attr->ia_size; 386 vmtruncate(inode, attr->ia_size); 387 } 388 } 389 390 static int nfs_wait_schedule(void *word) 391 { 392 if (signal_pending(current)) 393 return -ERESTARTSYS; 394 schedule(); 395 return 0; 396 } 397 398 /* 399 * Wait for the inode to get unlocked. 400 */ 401 static int nfs_wait_on_inode(struct inode *inode) 402 { 403 struct rpc_clnt *clnt = NFS_CLIENT(inode); 404 struct nfs_inode *nfsi = NFS_I(inode); 405 sigset_t oldmask; 406 int error; 407 408 rpc_clnt_sigmask(clnt, &oldmask); 409 error = wait_on_bit_lock(&nfsi->flags, NFS_INO_REVALIDATING, 410 nfs_wait_schedule, TASK_INTERRUPTIBLE); 411 rpc_clnt_sigunmask(clnt, &oldmask); 412 413 return error; 414 } 415 416 static void nfs_wake_up_inode(struct inode *inode) 417 { 418 struct nfs_inode *nfsi = NFS_I(inode); 419 420 clear_bit(NFS_INO_REVALIDATING, &nfsi->flags); 421 smp_mb__after_clear_bit(); 422 wake_up_bit(&nfsi->flags, NFS_INO_REVALIDATING); 423 } 424 425 int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) 426 { 427 struct inode *inode = dentry->d_inode; 428 int need_atime = NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATIME; 429 int err; 430 431 /* Flush out writes to the server in order to update c/mtime */ 432 nfs_sync_mapping_range(inode->i_mapping, 0, 0, FLUSH_NOCOMMIT); 433 434 /* 435 * We may force a getattr if the user cares about atime. 436 * 437 * Note that we only have to check the vfsmount flags here: 438 * - NFS always sets S_NOATIME by so checking it would give a 439 * bogus result 440 * - NFS never sets MS_NOATIME or MS_NODIRATIME so there is 441 * no point in checking those. 442 */ 443 if ((mnt->mnt_flags & MNT_NOATIME) || 444 ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))) 445 need_atime = 0; 446 447 if (need_atime) 448 err = __nfs_revalidate_inode(NFS_SERVER(inode), inode); 449 else 450 err = nfs_revalidate_inode(NFS_SERVER(inode), inode); 451 if (!err) 452 generic_fillattr(inode, stat); 453 return err; 454 } 455 456 static struct nfs_open_context *alloc_nfs_open_context(struct vfsmount *mnt, struct dentry *dentry, struct rpc_cred *cred) 457 { 458 struct nfs_open_context *ctx; 459 460 ctx = kmalloc(sizeof(*ctx), GFP_KERNEL); 461 if (ctx != NULL) { 462 atomic_set(&ctx->count, 1); 463 ctx->dentry = dget(dentry); 464 ctx->vfsmnt = mntget(mnt); 465 ctx->cred = get_rpccred(cred); 466 ctx->state = NULL; 467 ctx->lockowner = current->files; 468 ctx->error = 0; 469 ctx->dir_cookie = 0; 470 } 471 return ctx; 472 } 473 474 struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx) 475 { 476 if (ctx != NULL) 477 atomic_inc(&ctx->count); 478 return ctx; 479 } 480 481 void put_nfs_open_context(struct nfs_open_context *ctx) 482 { 483 if (atomic_dec_and_test(&ctx->count)) { 484 if (!list_empty(&ctx->list)) { 485 struct inode *inode = ctx->dentry->d_inode; 486 spin_lock(&inode->i_lock); 487 list_del(&ctx->list); 488 spin_unlock(&inode->i_lock); 489 } 490 if (ctx->state != NULL) 491 nfs4_close_state(ctx->state, ctx->mode); 492 if (ctx->cred != NULL) 493 put_rpccred(ctx->cred); 494 dput(ctx->dentry); 495 mntput(ctx->vfsmnt); 496 kfree(ctx); 497 } 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 if and only if this is the root directory */ 963 if (inode == inode->i_sb->s_root->d_inode 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 |= invalid; 1069 1070 return 0; 1071 out_changed: 1072 /* 1073 * Big trouble! The inode has become a different object. 1074 */ 1075 #ifdef NFS_PARANOIA 1076 printk(KERN_DEBUG "%s: inode %ld mode changed, %07o to %07o\n", 1077 __FUNCTION__, inode->i_ino, inode->i_mode, fattr->mode); 1078 #endif 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 struct nfs_inode *nfsi = NFS_I(inode); 1107 1108 /* If we are holding a delegation, return it! */ 1109 nfs_inode_return_delegation(inode); 1110 /* First call standard NFS clear_inode() code */ 1111 nfs_clear_inode(inode); 1112 /* Now clear out any remaining state */ 1113 while (!list_empty(&nfsi->open_states)) { 1114 struct nfs4_state *state; 1115 1116 state = list_entry(nfsi->open_states.next, 1117 struct nfs4_state, 1118 inode_states); 1119 dprintk("%s(%s/%Ld): found unclaimed NFSv4 state %p\n", 1120 __FUNCTION__, 1121 inode->i_sb->s_id, 1122 (long long)NFS_FILEID(inode), 1123 state); 1124 BUG_ON(atomic_read(&state->count) != 1); 1125 nfs4_close_state(state, state->state); 1126 } 1127 } 1128 #endif 1129 1130 struct inode *nfs_alloc_inode(struct super_block *sb) 1131 { 1132 struct nfs_inode *nfsi; 1133 nfsi = (struct nfs_inode *)kmem_cache_alloc(nfs_inode_cachep, GFP_KERNEL); 1134 if (!nfsi) 1135 return NULL; 1136 nfsi->flags = 0UL; 1137 nfsi->cache_validity = 0UL; 1138 #ifdef CONFIG_NFS_V3_ACL 1139 nfsi->acl_access = ERR_PTR(-EAGAIN); 1140 nfsi->acl_default = ERR_PTR(-EAGAIN); 1141 #endif 1142 #ifdef CONFIG_NFS_V4 1143 nfsi->nfs4_acl = NULL; 1144 #endif /* CONFIG_NFS_V4 */ 1145 return &nfsi->vfs_inode; 1146 } 1147 1148 void nfs_destroy_inode(struct inode *inode) 1149 { 1150 kmem_cache_free(nfs_inode_cachep, NFS_I(inode)); 1151 } 1152 1153 static inline void nfs4_init_once(struct nfs_inode *nfsi) 1154 { 1155 #ifdef CONFIG_NFS_V4 1156 INIT_LIST_HEAD(&nfsi->open_states); 1157 nfsi->delegation = NULL; 1158 nfsi->delegation_state = 0; 1159 init_rwsem(&nfsi->rwsem); 1160 #endif 1161 } 1162 1163 static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) 1164 { 1165 struct nfs_inode *nfsi = (struct nfs_inode *) foo; 1166 1167 if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) == 1168 SLAB_CTOR_CONSTRUCTOR) { 1169 inode_init_once(&nfsi->vfs_inode); 1170 spin_lock_init(&nfsi->req_lock); 1171 INIT_LIST_HEAD(&nfsi->dirty); 1172 INIT_LIST_HEAD(&nfsi->commit); 1173 INIT_LIST_HEAD(&nfsi->open_files); 1174 INIT_LIST_HEAD(&nfsi->access_cache_entry_lru); 1175 INIT_LIST_HEAD(&nfsi->access_cache_inode_lru); 1176 INIT_RADIX_TREE(&nfsi->nfs_page_tree, GFP_ATOMIC); 1177 atomic_set(&nfsi->data_updates, 0); 1178 nfsi->ndirty = 0; 1179 nfsi->ncommit = 0; 1180 nfsi->npages = 0; 1181 nfs4_init_once(nfsi); 1182 } 1183 } 1184 1185 static int __init nfs_init_inodecache(void) 1186 { 1187 nfs_inode_cachep = kmem_cache_create("nfs_inode_cache", 1188 sizeof(struct nfs_inode), 1189 0, (SLAB_RECLAIM_ACCOUNT| 1190 SLAB_MEM_SPREAD), 1191 init_once, NULL); 1192 if (nfs_inode_cachep == NULL) 1193 return -ENOMEM; 1194 1195 return 0; 1196 } 1197 1198 static void nfs_destroy_inodecache(void) 1199 { 1200 kmem_cache_destroy(nfs_inode_cachep); 1201 } 1202 1203 /* 1204 * Initialize NFS 1205 */ 1206 static int __init init_nfs_fs(void) 1207 { 1208 int err; 1209 1210 err = nfs_fs_proc_init(); 1211 if (err) 1212 goto out5; 1213 1214 err = nfs_init_nfspagecache(); 1215 if (err) 1216 goto out4; 1217 1218 err = nfs_init_inodecache(); 1219 if (err) 1220 goto out3; 1221 1222 err = nfs_init_readpagecache(); 1223 if (err) 1224 goto out2; 1225 1226 err = nfs_init_writepagecache(); 1227 if (err) 1228 goto out1; 1229 1230 err = nfs_init_directcache(); 1231 if (err) 1232 goto out0; 1233 1234 #ifdef CONFIG_PROC_FS 1235 rpc_proc_register(&nfs_rpcstat); 1236 #endif 1237 if ((err = register_nfs_fs()) != 0) 1238 goto out; 1239 return 0; 1240 out: 1241 #ifdef CONFIG_PROC_FS 1242 rpc_proc_unregister("nfs"); 1243 #endif 1244 nfs_destroy_directcache(); 1245 out0: 1246 nfs_destroy_writepagecache(); 1247 out1: 1248 nfs_destroy_readpagecache(); 1249 out2: 1250 nfs_destroy_inodecache(); 1251 out3: 1252 nfs_destroy_nfspagecache(); 1253 out4: 1254 nfs_fs_proc_exit(); 1255 out5: 1256 return err; 1257 } 1258 1259 static void __exit exit_nfs_fs(void) 1260 { 1261 nfs_destroy_directcache(); 1262 nfs_destroy_writepagecache(); 1263 nfs_destroy_readpagecache(); 1264 nfs_destroy_inodecache(); 1265 nfs_destroy_nfspagecache(); 1266 #ifdef CONFIG_PROC_FS 1267 rpc_proc_unregister("nfs"); 1268 #endif 1269 unregister_nfs_fs(); 1270 nfs_fs_proc_exit(); 1271 } 1272 1273 /* Not quite true; I just maintain it */ 1274 MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>"); 1275 MODULE_LICENSE("GPL"); 1276 1277 module_init(init_nfs_fs) 1278 module_exit(exit_nfs_fs) 1279