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, int 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 /* 716 * Special case: if the attribute timeout is set to 0, then always 717 * treat the cache as having expired (unless holding 718 * a delegation). 719 */ 720 if (nfsi->attrtimeo == 0) 721 return 1; 722 return !time_in_range(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo); 723 } 724 725 /** 726 * nfs_revalidate_inode - Revalidate the inode attributes 727 * @server - pointer to nfs_server struct 728 * @inode - pointer to inode struct 729 * 730 * Updates inode attribute information by retrieving the data from the server. 731 */ 732 int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode) 733 { 734 if (!(NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATTR) 735 && !nfs_attribute_timeout(inode)) 736 return NFS_STALE(inode) ? -ESTALE : 0; 737 return __nfs_revalidate_inode(server, inode); 738 } 739 740 static int nfs_invalidate_mapping_nolock(struct inode *inode, struct address_space *mapping) 741 { 742 struct nfs_inode *nfsi = NFS_I(inode); 743 744 if (mapping->nrpages != 0) { 745 int ret = invalidate_inode_pages2(mapping); 746 if (ret < 0) 747 return ret; 748 } 749 spin_lock(&inode->i_lock); 750 nfsi->cache_validity &= ~NFS_INO_INVALID_DATA; 751 if (S_ISDIR(inode->i_mode)) 752 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf)); 753 spin_unlock(&inode->i_lock); 754 nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE); 755 dfprintk(PAGECACHE, "NFS: (%s/%Ld) data cache invalidated\n", 756 inode->i_sb->s_id, (long long)NFS_FILEID(inode)); 757 return 0; 758 } 759 760 static int nfs_invalidate_mapping(struct inode *inode, struct address_space *mapping) 761 { 762 int ret = 0; 763 764 mutex_lock(&inode->i_mutex); 765 if (NFS_I(inode)->cache_validity & NFS_INO_INVALID_DATA) { 766 ret = nfs_sync_mapping(mapping); 767 if (ret == 0) 768 ret = nfs_invalidate_mapping_nolock(inode, mapping); 769 } 770 mutex_unlock(&inode->i_mutex); 771 return ret; 772 } 773 774 /** 775 * nfs_revalidate_mapping_nolock - Revalidate the pagecache 776 * @inode - pointer to host inode 777 * @mapping - pointer to mapping 778 */ 779 int nfs_revalidate_mapping_nolock(struct inode *inode, struct address_space *mapping) 780 { 781 struct nfs_inode *nfsi = NFS_I(inode); 782 int ret = 0; 783 784 if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE) 785 || nfs_attribute_timeout(inode) || NFS_STALE(inode)) { 786 ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode); 787 if (ret < 0) 788 goto out; 789 } 790 if (nfsi->cache_validity & NFS_INO_INVALID_DATA) 791 ret = nfs_invalidate_mapping_nolock(inode, mapping); 792 out: 793 return ret; 794 } 795 796 /** 797 * nfs_revalidate_mapping - Revalidate the pagecache 798 * @inode - pointer to host inode 799 * @mapping - pointer to mapping 800 * 801 * This version of the function will take the inode->i_mutex and attempt to 802 * flush out all dirty data if it needs to invalidate the page cache. 803 */ 804 int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping) 805 { 806 struct nfs_inode *nfsi = NFS_I(inode); 807 int ret = 0; 808 809 if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE) 810 || nfs_attribute_timeout(inode) || NFS_STALE(inode)) { 811 ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode); 812 if (ret < 0) 813 goto out; 814 } 815 if (nfsi->cache_validity & NFS_INO_INVALID_DATA) 816 ret = nfs_invalidate_mapping(inode, mapping); 817 out: 818 return ret; 819 } 820 821 static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr) 822 { 823 struct nfs_inode *nfsi = NFS_I(inode); 824 825 if ((fattr->valid & NFS_ATTR_WCC_V4) != 0 && 826 nfsi->change_attr == fattr->pre_change_attr) { 827 nfsi->change_attr = fattr->change_attr; 828 if (S_ISDIR(inode->i_mode)) 829 nfsi->cache_validity |= NFS_INO_INVALID_DATA; 830 } 831 /* If we have atomic WCC data, we may update some attributes */ 832 if ((fattr->valid & NFS_ATTR_WCC) != 0) { 833 if (timespec_equal(&inode->i_ctime, &fattr->pre_ctime)) 834 memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime)); 835 if (timespec_equal(&inode->i_mtime, &fattr->pre_mtime)) { 836 memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime)); 837 if (S_ISDIR(inode->i_mode)) 838 nfsi->cache_validity |= NFS_INO_INVALID_DATA; 839 } 840 if (i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size) && 841 nfsi->npages == 0) 842 i_size_write(inode, nfs_size_to_loff_t(fattr->size)); 843 } 844 } 845 846 /** 847 * nfs_check_inode_attributes - verify consistency of the inode attribute cache 848 * @inode - pointer to inode 849 * @fattr - updated attributes 850 * 851 * Verifies the attribute cache. If we have just changed the attributes, 852 * so that fattr carries weak cache consistency data, then it may 853 * also update the ctime/mtime/change_attribute. 854 */ 855 static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr) 856 { 857 struct nfs_inode *nfsi = NFS_I(inode); 858 loff_t cur_size, new_isize; 859 unsigned long invalid = 0; 860 861 862 /* Has the inode gone and changed behind our back? */ 863 if (nfsi->fileid != fattr->fileid 864 || (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) { 865 return -EIO; 866 } 867 868 if ((fattr->valid & NFS_ATTR_FATTR_V4) != 0 && 869 nfsi->change_attr != fattr->change_attr) 870 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 871 872 /* Verify a few of the more important attributes */ 873 if (!timespec_equal(&inode->i_mtime, &fattr->mtime)) 874 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 875 876 cur_size = i_size_read(inode); 877 new_isize = nfs_size_to_loff_t(fattr->size); 878 if (cur_size != new_isize && nfsi->npages == 0) 879 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 880 881 /* Have any file permissions changed? */ 882 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO) 883 || inode->i_uid != fattr->uid 884 || inode->i_gid != fattr->gid) 885 invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL; 886 887 /* Has the link count changed? */ 888 if (inode->i_nlink != fattr->nlink) 889 invalid |= NFS_INO_INVALID_ATTR; 890 891 if (!timespec_equal(&inode->i_atime, &fattr->atime)) 892 invalid |= NFS_INO_INVALID_ATIME; 893 894 if (invalid != 0) 895 nfsi->cache_validity |= invalid; 896 897 nfsi->read_cache_jiffies = fattr->time_start; 898 return 0; 899 } 900 901 static int nfs_ctime_need_update(const struct inode *inode, const struct nfs_fattr *fattr) 902 { 903 return timespec_compare(&fattr->ctime, &inode->i_ctime) > 0; 904 } 905 906 static int nfs_size_need_update(const struct inode *inode, const struct nfs_fattr *fattr) 907 { 908 return nfs_size_to_loff_t(fattr->size) > i_size_read(inode); 909 } 910 911 static unsigned long nfs_attr_generation_counter; 912 913 static unsigned long nfs_read_attr_generation_counter(void) 914 { 915 smp_rmb(); 916 return nfs_attr_generation_counter; 917 } 918 919 unsigned long nfs_inc_attr_generation_counter(void) 920 { 921 unsigned long ret; 922 smp_rmb(); 923 ret = ++nfs_attr_generation_counter; 924 smp_wmb(); 925 return ret; 926 } 927 928 void nfs_fattr_init(struct nfs_fattr *fattr) 929 { 930 fattr->valid = 0; 931 fattr->time_start = jiffies; 932 fattr->gencount = nfs_inc_attr_generation_counter(); 933 } 934 935 /** 936 * nfs_inode_attrs_need_update - check if the inode attributes need updating 937 * @inode - pointer to inode 938 * @fattr - attributes 939 * 940 * Attempt to divine whether or not an RPC call reply carrying stale 941 * attributes got scheduled after another call carrying updated ones. 942 * 943 * To do so, the function first assumes that a more recent ctime means 944 * that the attributes in fattr are newer, however it also attempt to 945 * catch the case where ctime either didn't change, or went backwards 946 * (if someone reset the clock on the server) by looking at whether 947 * or not this RPC call was started after the inode was last updated. 948 * Note also the check for wraparound of 'attr_gencount' 949 * 950 * The function returns 'true' if it thinks the attributes in 'fattr' are 951 * more recent than the ones cached in the inode. 952 * 953 */ 954 static int nfs_inode_attrs_need_update(const struct inode *inode, const struct nfs_fattr *fattr) 955 { 956 const struct nfs_inode *nfsi = NFS_I(inode); 957 958 return ((long)fattr->gencount - (long)nfsi->attr_gencount) > 0 || 959 nfs_ctime_need_update(inode, fattr) || 960 nfs_size_need_update(inode, fattr) || 961 ((long)nfsi->attr_gencount - (long)nfs_read_attr_generation_counter() > 0); 962 } 963 964 static int nfs_refresh_inode_locked(struct inode *inode, struct nfs_fattr *fattr) 965 { 966 if (nfs_inode_attrs_need_update(inode, fattr)) 967 return nfs_update_inode(inode, fattr); 968 return nfs_check_inode_attributes(inode, fattr); 969 } 970 971 /** 972 * nfs_refresh_inode - try to update the inode attribute cache 973 * @inode - pointer to inode 974 * @fattr - updated attributes 975 * 976 * Check that an RPC call that returned attributes has not overlapped with 977 * other recent updates of the inode metadata, then decide whether it is 978 * safe to do a full update of the inode attributes, or whether just to 979 * call nfs_check_inode_attributes. 980 */ 981 int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr) 982 { 983 int status; 984 985 if ((fattr->valid & NFS_ATTR_FATTR) == 0) 986 return 0; 987 spin_lock(&inode->i_lock); 988 status = nfs_refresh_inode_locked(inode, fattr); 989 spin_unlock(&inode->i_lock); 990 return status; 991 } 992 993 static int nfs_post_op_update_inode_locked(struct inode *inode, struct nfs_fattr *fattr) 994 { 995 struct nfs_inode *nfsi = NFS_I(inode); 996 997 nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; 998 if (S_ISDIR(inode->i_mode)) 999 nfsi->cache_validity |= NFS_INO_INVALID_DATA; 1000 if ((fattr->valid & NFS_ATTR_FATTR) == 0) 1001 return 0; 1002 return nfs_refresh_inode_locked(inode, fattr); 1003 } 1004 1005 /** 1006 * nfs_post_op_update_inode - try to update the inode attribute cache 1007 * @inode - pointer to inode 1008 * @fattr - updated attributes 1009 * 1010 * After an operation that has changed the inode metadata, mark the 1011 * attribute cache as being invalid, then try to update it. 1012 * 1013 * NB: if the server didn't return any post op attributes, this 1014 * function will force the retrieval of attributes before the next 1015 * NFS request. Thus it should be used only for operations that 1016 * are expected to change one or more attributes, to avoid 1017 * unnecessary NFS requests and trips through nfs_update_inode(). 1018 */ 1019 int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr) 1020 { 1021 int status; 1022 1023 spin_lock(&inode->i_lock); 1024 status = nfs_post_op_update_inode_locked(inode, fattr); 1025 spin_unlock(&inode->i_lock); 1026 return status; 1027 } 1028 1029 /** 1030 * nfs_post_op_update_inode_force_wcc - try to update the inode attribute cache 1031 * @inode - pointer to inode 1032 * @fattr - updated attributes 1033 * 1034 * After an operation that has changed the inode metadata, mark the 1035 * attribute cache as being invalid, then try to update it. Fake up 1036 * weak cache consistency data, if none exist. 1037 * 1038 * This function is mainly designed to be used by the ->write_done() functions. 1039 */ 1040 int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr) 1041 { 1042 int status; 1043 1044 spin_lock(&inode->i_lock); 1045 /* Don't do a WCC update if these attributes are already stale */ 1046 if ((fattr->valid & NFS_ATTR_FATTR) == 0 || 1047 !nfs_inode_attrs_need_update(inode, fattr)) { 1048 fattr->valid &= ~(NFS_ATTR_WCC_V4|NFS_ATTR_WCC); 1049 goto out_noforce; 1050 } 1051 if ((fattr->valid & NFS_ATTR_FATTR_V4) != 0 && 1052 (fattr->valid & NFS_ATTR_WCC_V4) == 0) { 1053 fattr->pre_change_attr = NFS_I(inode)->change_attr; 1054 fattr->valid |= NFS_ATTR_WCC_V4; 1055 } 1056 if ((fattr->valid & NFS_ATTR_FATTR) != 0 && 1057 (fattr->valid & NFS_ATTR_WCC) == 0) { 1058 memcpy(&fattr->pre_ctime, &inode->i_ctime, sizeof(fattr->pre_ctime)); 1059 memcpy(&fattr->pre_mtime, &inode->i_mtime, sizeof(fattr->pre_mtime)); 1060 fattr->pre_size = i_size_read(inode); 1061 fattr->valid |= NFS_ATTR_WCC; 1062 } 1063 out_noforce: 1064 status = nfs_post_op_update_inode_locked(inode, fattr); 1065 spin_unlock(&inode->i_lock); 1066 return status; 1067 } 1068 1069 /* 1070 * Many nfs protocol calls return the new file attributes after 1071 * an operation. Here we update the inode to reflect the state 1072 * of the server's inode. 1073 * 1074 * This is a bit tricky because we have to make sure all dirty pages 1075 * have been sent off to the server before calling invalidate_inode_pages. 1076 * To make sure no other process adds more write requests while we try 1077 * our best to flush them, we make them sleep during the attribute refresh. 1078 * 1079 * A very similar scenario holds for the dir cache. 1080 */ 1081 static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) 1082 { 1083 struct nfs_server *server; 1084 struct nfs_inode *nfsi = NFS_I(inode); 1085 loff_t cur_isize, new_isize; 1086 unsigned long invalid = 0; 1087 unsigned long now = jiffies; 1088 1089 dfprintk(VFS, "NFS: %s(%s/%ld ct=%d info=0x%x)\n", 1090 __func__, inode->i_sb->s_id, inode->i_ino, 1091 atomic_read(&inode->i_count), fattr->valid); 1092 1093 if (nfsi->fileid != fattr->fileid) 1094 goto out_fileid; 1095 1096 /* 1097 * Make sure the inode's type hasn't changed. 1098 */ 1099 if ((inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) 1100 goto out_changed; 1101 1102 server = NFS_SERVER(inode); 1103 /* Update the fsid? */ 1104 if (S_ISDIR(inode->i_mode) && 1105 !nfs_fsid_equal(&server->fsid, &fattr->fsid) && 1106 !test_bit(NFS_INO_MOUNTPOINT, &nfsi->flags)) 1107 server->fsid = fattr->fsid; 1108 1109 /* 1110 * Update the read time so we don't revalidate too often. 1111 */ 1112 nfsi->read_cache_jiffies = fattr->time_start; 1113 1114 nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ATIME 1115 | NFS_INO_REVAL_PAGECACHE); 1116 1117 /* Do atomic weak cache consistency updates */ 1118 nfs_wcc_update_inode(inode, fattr); 1119 1120 /* More cache consistency checks */ 1121 if (!(fattr->valid & NFS_ATTR_FATTR_V4)) { 1122 /* NFSv2/v3: Check if the mtime agrees */ 1123 if (!timespec_equal(&inode->i_mtime, &fattr->mtime)) { 1124 dprintk("NFS: mtime change on server for file %s/%ld\n", 1125 inode->i_sb->s_id, inode->i_ino); 1126 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA; 1127 if (S_ISDIR(inode->i_mode)) 1128 nfs_force_lookup_revalidate(inode); 1129 } 1130 /* If ctime has changed we should definitely clear access+acl caches */ 1131 if (!timespec_equal(&inode->i_ctime, &fattr->ctime)) 1132 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 1133 } else if (nfsi->change_attr != fattr->change_attr) { 1134 dprintk("NFS: change_attr change on server for file %s/%ld\n", 1135 inode->i_sb->s_id, inode->i_ino); 1136 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 1137 if (S_ISDIR(inode->i_mode)) 1138 nfs_force_lookup_revalidate(inode); 1139 } 1140 1141 /* Check if our cached file size is stale */ 1142 new_isize = nfs_size_to_loff_t(fattr->size); 1143 cur_isize = i_size_read(inode); 1144 if (new_isize != cur_isize) { 1145 /* Do we perhaps have any outstanding writes, or has 1146 * the file grown beyond our last write? */ 1147 if (nfsi->npages == 0 || new_isize > cur_isize) { 1148 i_size_write(inode, new_isize); 1149 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA; 1150 } 1151 dprintk("NFS: isize change on server for file %s/%ld\n", 1152 inode->i_sb->s_id, inode->i_ino); 1153 } 1154 1155 1156 memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime)); 1157 memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime)); 1158 memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime)); 1159 nfsi->change_attr = fattr->change_attr; 1160 1161 if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO) || 1162 inode->i_uid != fattr->uid || 1163 inode->i_gid != fattr->gid) 1164 invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL; 1165 1166 if (inode->i_nlink != fattr->nlink) 1167 invalid |= NFS_INO_INVALID_ATTR; 1168 1169 inode->i_mode = fattr->mode; 1170 inode->i_nlink = fattr->nlink; 1171 inode->i_uid = fattr->uid; 1172 inode->i_gid = fattr->gid; 1173 1174 if (fattr->valid & (NFS_ATTR_FATTR_V3 | NFS_ATTR_FATTR_V4)) { 1175 /* 1176 * report the blocks in 512byte units 1177 */ 1178 inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used); 1179 } else { 1180 inode->i_blocks = fattr->du.nfs2.blocks; 1181 } 1182 1183 /* Update attrtimeo value if we're out of the unstable period */ 1184 if (invalid & NFS_INO_INVALID_ATTR) { 1185 nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE); 1186 nfsi->attrtimeo = NFS_MINATTRTIMEO(inode); 1187 nfsi->attrtimeo_timestamp = now; 1188 nfsi->attr_gencount = nfs_inc_attr_generation_counter(); 1189 } else { 1190 if (!time_in_range(now, nfsi->attrtimeo_timestamp, nfsi->attrtimeo_timestamp + nfsi->attrtimeo)) { 1191 if ((nfsi->attrtimeo <<= 1) > NFS_MAXATTRTIMEO(inode)) 1192 nfsi->attrtimeo = NFS_MAXATTRTIMEO(inode); 1193 nfsi->attrtimeo_timestamp = now; 1194 } 1195 } 1196 invalid &= ~NFS_INO_INVALID_ATTR; 1197 /* Don't invalidate the data if we were to blame */ 1198 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) 1199 || S_ISLNK(inode->i_mode))) 1200 invalid &= ~NFS_INO_INVALID_DATA; 1201 if (!nfs_have_delegation(inode, FMODE_READ) || 1202 (nfsi->cache_validity & NFS_INO_REVAL_FORCED)) 1203 nfsi->cache_validity |= invalid; 1204 nfsi->cache_validity &= ~NFS_INO_REVAL_FORCED; 1205 1206 return 0; 1207 out_changed: 1208 /* 1209 * Big trouble! The inode has become a different object. 1210 */ 1211 printk(KERN_DEBUG "%s: inode %ld mode changed, %07o to %07o\n", 1212 __func__, inode->i_ino, inode->i_mode, fattr->mode); 1213 out_err: 1214 /* 1215 * No need to worry about unhashing the dentry, as the 1216 * lookup validation will know that the inode is bad. 1217 * (But we fall through to invalidate the caches.) 1218 */ 1219 nfs_invalidate_inode(inode); 1220 return -ESTALE; 1221 1222 out_fileid: 1223 printk(KERN_ERR "NFS: server %s error: fileid changed\n" 1224 "fsid %s: expected fileid 0x%Lx, got 0x%Lx\n", 1225 NFS_SERVER(inode)->nfs_client->cl_hostname, inode->i_sb->s_id, 1226 (long long)nfsi->fileid, (long long)fattr->fileid); 1227 goto out_err; 1228 } 1229 1230 1231 #ifdef CONFIG_NFS_V4 1232 1233 /* 1234 * Clean out any remaining NFSv4 state that might be left over due 1235 * to open() calls that passed nfs_atomic_lookup, but failed to call 1236 * nfs_open(). 1237 */ 1238 void nfs4_clear_inode(struct inode *inode) 1239 { 1240 /* If we are holding a delegation, return it! */ 1241 nfs_inode_return_delegation_noreclaim(inode); 1242 /* First call standard NFS clear_inode() code */ 1243 nfs_clear_inode(inode); 1244 } 1245 #endif 1246 1247 struct inode *nfs_alloc_inode(struct super_block *sb) 1248 { 1249 struct nfs_inode *nfsi; 1250 nfsi = (struct nfs_inode *)kmem_cache_alloc(nfs_inode_cachep, GFP_KERNEL); 1251 if (!nfsi) 1252 return NULL; 1253 nfsi->flags = 0UL; 1254 nfsi->cache_validity = 0UL; 1255 #ifdef CONFIG_NFS_V3_ACL 1256 nfsi->acl_access = ERR_PTR(-EAGAIN); 1257 nfsi->acl_default = ERR_PTR(-EAGAIN); 1258 #endif 1259 #ifdef CONFIG_NFS_V4 1260 nfsi->nfs4_acl = NULL; 1261 #endif /* CONFIG_NFS_V4 */ 1262 return &nfsi->vfs_inode; 1263 } 1264 1265 void nfs_destroy_inode(struct inode *inode) 1266 { 1267 kmem_cache_free(nfs_inode_cachep, NFS_I(inode)); 1268 } 1269 1270 static inline void nfs4_init_once(struct nfs_inode *nfsi) 1271 { 1272 #ifdef CONFIG_NFS_V4 1273 INIT_LIST_HEAD(&nfsi->open_states); 1274 nfsi->delegation = NULL; 1275 nfsi->delegation_state = 0; 1276 init_rwsem(&nfsi->rwsem); 1277 #endif 1278 } 1279 1280 static void init_once(void *foo) 1281 { 1282 struct nfs_inode *nfsi = (struct nfs_inode *) foo; 1283 1284 inode_init_once(&nfsi->vfs_inode); 1285 INIT_LIST_HEAD(&nfsi->open_files); 1286 INIT_LIST_HEAD(&nfsi->access_cache_entry_lru); 1287 INIT_LIST_HEAD(&nfsi->access_cache_inode_lru); 1288 INIT_RADIX_TREE(&nfsi->nfs_page_tree, GFP_ATOMIC); 1289 nfsi->ncommit = 0; 1290 nfsi->npages = 0; 1291 atomic_set(&nfsi->silly_count, 1); 1292 INIT_HLIST_HEAD(&nfsi->silly_list); 1293 init_waitqueue_head(&nfsi->waitqueue); 1294 nfs4_init_once(nfsi); 1295 } 1296 1297 static int __init nfs_init_inodecache(void) 1298 { 1299 nfs_inode_cachep = kmem_cache_create("nfs_inode_cache", 1300 sizeof(struct nfs_inode), 1301 0, (SLAB_RECLAIM_ACCOUNT| 1302 SLAB_MEM_SPREAD), 1303 init_once); 1304 if (nfs_inode_cachep == NULL) 1305 return -ENOMEM; 1306 1307 return 0; 1308 } 1309 1310 static void nfs_destroy_inodecache(void) 1311 { 1312 kmem_cache_destroy(nfs_inode_cachep); 1313 } 1314 1315 struct workqueue_struct *nfsiod_workqueue; 1316 1317 /* 1318 * start up the nfsiod workqueue 1319 */ 1320 static int nfsiod_start(void) 1321 { 1322 struct workqueue_struct *wq; 1323 dprintk("RPC: creating workqueue nfsiod\n"); 1324 wq = create_singlethread_workqueue("nfsiod"); 1325 if (wq == NULL) 1326 return -ENOMEM; 1327 nfsiod_workqueue = wq; 1328 return 0; 1329 } 1330 1331 /* 1332 * Destroy the nfsiod workqueue 1333 */ 1334 static void nfsiod_stop(void) 1335 { 1336 struct workqueue_struct *wq; 1337 1338 wq = nfsiod_workqueue; 1339 if (wq == NULL) 1340 return; 1341 nfsiod_workqueue = NULL; 1342 destroy_workqueue(wq); 1343 } 1344 1345 /* 1346 * Initialize NFS 1347 */ 1348 static int __init init_nfs_fs(void) 1349 { 1350 int err; 1351 1352 err = nfsiod_start(); 1353 if (err) 1354 goto out6; 1355 1356 err = nfs_fs_proc_init(); 1357 if (err) 1358 goto out5; 1359 1360 err = nfs_init_nfspagecache(); 1361 if (err) 1362 goto out4; 1363 1364 err = nfs_init_inodecache(); 1365 if (err) 1366 goto out3; 1367 1368 err = nfs_init_readpagecache(); 1369 if (err) 1370 goto out2; 1371 1372 err = nfs_init_writepagecache(); 1373 if (err) 1374 goto out1; 1375 1376 err = nfs_init_directcache(); 1377 if (err) 1378 goto out0; 1379 1380 #ifdef CONFIG_PROC_FS 1381 rpc_proc_register(&nfs_rpcstat); 1382 #endif 1383 if ((err = register_nfs_fs()) != 0) 1384 goto out; 1385 return 0; 1386 out: 1387 #ifdef CONFIG_PROC_FS 1388 rpc_proc_unregister("nfs"); 1389 #endif 1390 nfs_destroy_directcache(); 1391 out0: 1392 nfs_destroy_writepagecache(); 1393 out1: 1394 nfs_destroy_readpagecache(); 1395 out2: 1396 nfs_destroy_inodecache(); 1397 out3: 1398 nfs_destroy_nfspagecache(); 1399 out4: 1400 nfs_fs_proc_exit(); 1401 out5: 1402 nfsiod_stop(); 1403 out6: 1404 return err; 1405 } 1406 1407 static void __exit exit_nfs_fs(void) 1408 { 1409 nfs_destroy_directcache(); 1410 nfs_destroy_writepagecache(); 1411 nfs_destroy_readpagecache(); 1412 nfs_destroy_inodecache(); 1413 nfs_destroy_nfspagecache(); 1414 #ifdef CONFIG_PROC_FS 1415 rpc_proc_unregister("nfs"); 1416 #endif 1417 unregister_nfs_fs(); 1418 nfs_fs_proc_exit(); 1419 nfsiod_stop(); 1420 } 1421 1422 /* Not quite true; I just maintain it */ 1423 MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>"); 1424 MODULE_LICENSE("GPL"); 1425 module_param(enable_ino64, bool, 0644); 1426 1427 module_init(init_nfs_fs) 1428 module_exit(exit_nfs_fs) 1429