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