Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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