Linux Audio

Check our new training course

Loading...
v4.10.11
   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/vfs.h>
  36#include <linux/inet.h>
  37#include <linux/nfs_xdr.h>
  38#include <linux/slab.h>
  39#include <linux/compat.h>
  40#include <linux/freezer.h>
  41
  42#include <linux/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 "pnfs.h"
  51#include "nfs.h"
  52#include "netns.h"
  53
  54#include "nfstrace.h"
  55
  56#define NFSDBG_FACILITY		NFSDBG_VFS
  57
  58#define NFS_64_BIT_INODE_NUMBERS_ENABLED	1
  59
  60/* Default is to see 64-bit inode numbers */
  61static bool enable_ino64 = NFS_64_BIT_INODE_NUMBERS_ENABLED;
  62
  63static void nfs_invalidate_inode(struct inode *);
  64static int nfs_update_inode(struct inode *, struct nfs_fattr *);
  65
  66static struct kmem_cache * nfs_inode_cachep;
  67
  68static inline unsigned long
  69nfs_fattr_to_ino_t(struct nfs_fattr *fattr)
  70{
  71	return nfs_fileid_to_ino_t(fattr->fileid);
  72}
  73
  74static int nfs_wait_killable(int mode)
  75{
  76	freezable_schedule_unsafe();
  77	if (signal_pending_state(mode, current))
  78		return -ERESTARTSYS;
  79	return 0;
  80}
  81
  82int nfs_wait_bit_killable(struct wait_bit_key *key, int mode)
  83{
  84	return nfs_wait_killable(mode);
  85}
  86EXPORT_SYMBOL_GPL(nfs_wait_bit_killable);
  87
  88int nfs_wait_atomic_killable(atomic_t *p)
  89{
  90	return nfs_wait_killable(TASK_KILLABLE);
  91}
  92
  93/**
  94 * nfs_compat_user_ino64 - returns the user-visible inode number
  95 * @fileid: 64-bit fileid
  96 *
  97 * This function returns a 32-bit inode number if the boot parameter
  98 * nfs.enable_ino64 is zero.
  99 */
 100u64 nfs_compat_user_ino64(u64 fileid)
 101{
 102#ifdef CONFIG_COMPAT
 103	compat_ulong_t ino;
 104#else	
 105	unsigned long ino;
 106#endif
 107
 108	if (enable_ino64)
 109		return fileid;
 110	ino = fileid;
 111	if (sizeof(ino) < sizeof(fileid))
 112		ino ^= fileid >> (sizeof(fileid)-sizeof(ino)) * 8;
 113	return ino;
 114}
 115
 116int nfs_drop_inode(struct inode *inode)
 117{
 118	return NFS_STALE(inode) || generic_drop_inode(inode);
 119}
 120EXPORT_SYMBOL_GPL(nfs_drop_inode);
 121
 122void nfs_clear_inode(struct inode *inode)
 123{
 124	/*
 125	 * The following should never happen...
 126	 */
 127	WARN_ON_ONCE(nfs_have_writebacks(inode));
 128	WARN_ON_ONCE(!list_empty(&NFS_I(inode)->open_files));
 129	nfs_zap_acl_cache(inode);
 130	nfs_access_zap_cache(inode);
 131	nfs_fscache_clear_inode(inode);
 132}
 133EXPORT_SYMBOL_GPL(nfs_clear_inode);
 134
 135void nfs_evict_inode(struct inode *inode)
 136{
 137	truncate_inode_pages_final(&inode->i_data);
 138	clear_inode(inode);
 139	nfs_clear_inode(inode);
 140}
 141
 142int nfs_sync_inode(struct inode *inode)
 143{
 144	inode_dio_wait(inode);
 145	return nfs_wb_all(inode);
 146}
 147EXPORT_SYMBOL_GPL(nfs_sync_inode);
 148
 149/**
 150 * nfs_sync_mapping - helper to flush all mmapped dirty data to disk
 151 */
 152int nfs_sync_mapping(struct address_space *mapping)
 153{
 154	int ret = 0;
 155
 156	if (mapping->nrpages != 0) {
 157		unmap_mapping_range(mapping, 0, 0, 0);
 158		ret = nfs_wb_all(mapping->host);
 159	}
 160	return ret;
 161}
 162
 163static int nfs_attribute_timeout(struct inode *inode)
 164{
 165	struct nfs_inode *nfsi = NFS_I(inode);
 166
 167	return !time_in_range_open(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo);
 168}
 169
 170static bool nfs_check_cache_invalid_delegated(struct inode *inode, unsigned long flags)
 171{
 172	unsigned long cache_validity = READ_ONCE(NFS_I(inode)->cache_validity);
 173
 174	/* Special case for the pagecache or access cache */
 175	if (flags == NFS_INO_REVAL_PAGECACHE &&
 176	    !(cache_validity & NFS_INO_REVAL_FORCED))
 177		return false;
 178	return (cache_validity & flags) != 0;
 179}
 180
 181static bool nfs_check_cache_invalid_not_delegated(struct inode *inode, unsigned long flags)
 182{
 183	unsigned long cache_validity = READ_ONCE(NFS_I(inode)->cache_validity);
 184
 185	if ((cache_validity & flags) != 0)
 186		return true;
 187	if (nfs_attribute_timeout(inode))
 188		return true;
 189	return false;
 190}
 191
 192bool nfs_check_cache_invalid(struct inode *inode, unsigned long flags)
 193{
 194	if (NFS_PROTO(inode)->have_delegation(inode, FMODE_READ))
 195		return nfs_check_cache_invalid_delegated(inode, flags);
 196
 197	return nfs_check_cache_invalid_not_delegated(inode, flags);
 198}
 199
 200static void nfs_set_cache_invalid(struct inode *inode, unsigned long flags)
 201{
 202	struct nfs_inode *nfsi = NFS_I(inode);
 203
 204	if (inode->i_mapping->nrpages == 0)
 205		flags &= ~NFS_INO_INVALID_DATA;
 206	nfsi->cache_validity |= flags;
 207	if (flags & NFS_INO_INVALID_DATA)
 208		nfs_fscache_invalidate(inode);
 209}
 210
 211/*
 212 * Invalidate the local caches
 213 */
 214static void nfs_zap_caches_locked(struct inode *inode)
 215{
 216	struct nfs_inode *nfsi = NFS_I(inode);
 217	int mode = inode->i_mode;
 218
 219	nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE);
 220
 221	nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
 222	nfsi->attrtimeo_timestamp = jiffies;
 223
 224	memset(NFS_I(inode)->cookieverf, 0, sizeof(NFS_I(inode)->cookieverf));
 225	if (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) {
 226		nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR
 227					| NFS_INO_INVALID_DATA
 228					| NFS_INO_INVALID_ACCESS
 229					| NFS_INO_INVALID_ACL
 230					| NFS_INO_REVAL_PAGECACHE);
 231	} else
 232		nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR
 233					| NFS_INO_INVALID_ACCESS
 234					| NFS_INO_INVALID_ACL
 235					| NFS_INO_REVAL_PAGECACHE);
 236	nfs_zap_label_cache_locked(nfsi);
 237}
 238
 239void nfs_zap_caches(struct inode *inode)
 240{
 241	spin_lock(&inode->i_lock);
 242	nfs_zap_caches_locked(inode);
 243	spin_unlock(&inode->i_lock);
 244}
 245
 246void nfs_zap_mapping(struct inode *inode, struct address_space *mapping)
 247{
 248	if (mapping->nrpages != 0) {
 249		spin_lock(&inode->i_lock);
 250		nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA);
 251		spin_unlock(&inode->i_lock);
 252	}
 253}
 254
 255void nfs_zap_acl_cache(struct inode *inode)
 256{
 257	void (*clear_acl_cache)(struct inode *);
 258
 259	clear_acl_cache = NFS_PROTO(inode)->clear_acl_cache;
 260	if (clear_acl_cache != NULL)
 261		clear_acl_cache(inode);
 262	spin_lock(&inode->i_lock);
 263	NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_ACL;
 264	spin_unlock(&inode->i_lock);
 265}
 266EXPORT_SYMBOL_GPL(nfs_zap_acl_cache);
 267
 268void nfs_invalidate_atime(struct inode *inode)
 269{
 270	spin_lock(&inode->i_lock);
 271	nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATIME);
 272	spin_unlock(&inode->i_lock);
 273}
 274EXPORT_SYMBOL_GPL(nfs_invalidate_atime);
 275
 276/*
 277 * Invalidate, but do not unhash, the inode.
 278 * NB: must be called with inode->i_lock held!
 279 */
 280static void nfs_invalidate_inode(struct inode *inode)
 281{
 282	set_bit(NFS_INO_STALE, &NFS_I(inode)->flags);
 283	nfs_zap_caches_locked(inode);
 284}
 285
 286struct nfs_find_desc {
 287	struct nfs_fh		*fh;
 288	struct nfs_fattr	*fattr;
 289};
 290
 291/*
 292 * In NFSv3 we can have 64bit inode numbers. In order to support
 293 * this, and re-exported directories (also seen in NFSv2)
 294 * we are forced to allow 2 different inodes to have the same
 295 * i_ino.
 296 */
 297static int
 298nfs_find_actor(struct inode *inode, void *opaque)
 299{
 300	struct nfs_find_desc	*desc = (struct nfs_find_desc *)opaque;
 301	struct nfs_fh		*fh = desc->fh;
 302	struct nfs_fattr	*fattr = desc->fattr;
 303
 304	if (NFS_FILEID(inode) != fattr->fileid)
 305		return 0;
 306	if ((S_IFMT & inode->i_mode) != (S_IFMT & fattr->mode))
 307		return 0;
 308	if (nfs_compare_fh(NFS_FH(inode), fh))
 309		return 0;
 310	if (is_bad_inode(inode) || NFS_STALE(inode))
 311		return 0;
 312	return 1;
 313}
 314
 315static int
 316nfs_init_locked(struct inode *inode, void *opaque)
 317{
 318	struct nfs_find_desc	*desc = (struct nfs_find_desc *)opaque;
 319	struct nfs_fattr	*fattr = desc->fattr;
 320
 321	set_nfs_fileid(inode, fattr->fileid);
 322	inode->i_mode = fattr->mode;
 323	nfs_copy_fh(NFS_FH(inode), desc->fh);
 324	return 0;
 325}
 326
 327#ifdef CONFIG_NFS_V4_SECURITY_LABEL
 328static void nfs_clear_label_invalid(struct inode *inode)
 329{
 330	spin_lock(&inode->i_lock);
 331	NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_LABEL;
 332	spin_unlock(&inode->i_lock);
 333}
 334
 335void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr,
 336					struct nfs4_label *label)
 337{
 338	int error;
 339
 340	if (label == NULL)
 341		return;
 342
 343	if ((fattr->valid & NFS_ATTR_FATTR_V4_SECURITY_LABEL) && inode->i_security) {
 344		error = security_inode_notifysecctx(inode, label->label,
 345				label->len);
 346		if (error)
 347			printk(KERN_ERR "%s() %s %d "
 348					"security_inode_notifysecctx() %d\n",
 349					__func__,
 350					(char *)label->label,
 351					label->len, error);
 352		nfs_clear_label_invalid(inode);
 353	}
 354}
 355
 356struct nfs4_label *nfs4_label_alloc(struct nfs_server *server, gfp_t flags)
 357{
 358	struct nfs4_label *label = NULL;
 359	int minor_version = server->nfs_client->cl_minorversion;
 360
 361	if (minor_version < 2)
 362		return label;
 363
 364	if (!(server->caps & NFS_CAP_SECURITY_LABEL))
 365		return label;
 366
 367	label = kzalloc(sizeof(struct nfs4_label), flags);
 368	if (label == NULL)
 369		return ERR_PTR(-ENOMEM);
 370
 371	label->label = kzalloc(NFS4_MAXLABELLEN, flags);
 372	if (label->label == NULL) {
 373		kfree(label);
 374		return ERR_PTR(-ENOMEM);
 375	}
 376	label->len = NFS4_MAXLABELLEN;
 377
 378	return label;
 379}
 380EXPORT_SYMBOL_GPL(nfs4_label_alloc);
 381#else
 382void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr,
 383					struct nfs4_label *label)
 384{
 385}
 386#endif
 387EXPORT_SYMBOL_GPL(nfs_setsecurity);
 388
 389/*
 390 * This is our front-end to iget that looks up inodes by file handle
 391 * instead of inode number.
 392 */
 393struct inode *
 394nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr, struct nfs4_label *label)
 395{
 396	struct nfs_find_desc desc = {
 397		.fh	= fh,
 398		.fattr	= fattr
 399	};
 400	struct inode *inode = ERR_PTR(-ENOENT);
 401	unsigned long hash;
 402
 403	nfs_attr_check_mountpoint(sb, fattr);
 404
 405	if (nfs_attr_use_mounted_on_fileid(fattr))
 406		fattr->fileid = fattr->mounted_on_fileid;
 407	else if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0)
 408		goto out_no_inode;
 409	if ((fattr->valid & NFS_ATTR_FATTR_TYPE) == 0)
 410		goto out_no_inode;
 411
 412	hash = nfs_fattr_to_ino_t(fattr);
 413
 414	inode = iget5_locked(sb, hash, nfs_find_actor, nfs_init_locked, &desc);
 415	if (inode == NULL) {
 416		inode = ERR_PTR(-ENOMEM);
 417		goto out_no_inode;
 418	}
 419
 420	if (inode->i_state & I_NEW) {
 421		struct nfs_inode *nfsi = NFS_I(inode);
 422		unsigned long now = jiffies;
 423
 424		/* We set i_ino for the few things that still rely on it,
 425		 * such as stat(2) */
 426		inode->i_ino = hash;
 427
 428		/* We can't support update_atime(), since the server will reset it */
 429		inode->i_flags |= S_NOATIME|S_NOCMTIME;
 430		inode->i_mode = fattr->mode;
 431		if ((fattr->valid & NFS_ATTR_FATTR_MODE) == 0
 432				&& nfs_server_capable(inode, NFS_CAP_MODE))
 433			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 434		/* Why so? Because we want revalidate for devices/FIFOs, and
 435		 * that's precisely what we have in nfs_file_inode_operations.
 436		 */
 437		inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->file_inode_ops;
 438		if (S_ISREG(inode->i_mode)) {
 439			inode->i_fop = NFS_SB(sb)->nfs_client->rpc_ops->file_ops;
 440			inode->i_data.a_ops = &nfs_file_aops;
 441		} else if (S_ISDIR(inode->i_mode)) {
 442			inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->dir_inode_ops;
 443			inode->i_fop = &nfs_dir_operations;
 444			inode->i_data.a_ops = &nfs_dir_aops;
 445			/* Deal with crossing mountpoints */
 446			if (fattr->valid & NFS_ATTR_FATTR_MOUNTPOINT ||
 447					fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) {
 448				if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)
 449					inode->i_op = &nfs_referral_inode_operations;
 450				else
 451					inode->i_op = &nfs_mountpoint_inode_operations;
 452				inode->i_fop = NULL;
 453				inode->i_flags |= S_AUTOMOUNT;
 454			}
 455		} else if (S_ISLNK(inode->i_mode)) {
 456			inode->i_op = &nfs_symlink_inode_operations;
 457			inode_nohighmem(inode);
 458		} else
 459			init_special_inode(inode, inode->i_mode, fattr->rdev);
 460
 461		memset(&inode->i_atime, 0, sizeof(inode->i_atime));
 462		memset(&inode->i_mtime, 0, sizeof(inode->i_mtime));
 463		memset(&inode->i_ctime, 0, sizeof(inode->i_ctime));
 464		inode->i_version = 0;
 465		inode->i_size = 0;
 466		clear_nlink(inode);
 467		inode->i_uid = make_kuid(&init_user_ns, -2);
 468		inode->i_gid = make_kgid(&init_user_ns, -2);
 469		inode->i_blocks = 0;
 470		memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf));
 471		nfsi->write_io = 0;
 472		nfsi->read_io = 0;
 473
 474		nfsi->read_cache_jiffies = fattr->time_start;
 475		nfsi->attr_gencount = fattr->gencount;
 476		if (fattr->valid & NFS_ATTR_FATTR_ATIME)
 477			inode->i_atime = fattr->atime;
 478		else if (nfs_server_capable(inode, NFS_CAP_ATIME))
 479			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 480		if (fattr->valid & NFS_ATTR_FATTR_MTIME)
 481			inode->i_mtime = fattr->mtime;
 482		else if (nfs_server_capable(inode, NFS_CAP_MTIME))
 483			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 484		if (fattr->valid & NFS_ATTR_FATTR_CTIME)
 485			inode->i_ctime = fattr->ctime;
 486		else if (nfs_server_capable(inode, NFS_CAP_CTIME))
 487			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 488		if (fattr->valid & NFS_ATTR_FATTR_CHANGE)
 489			inode->i_version = fattr->change_attr;
 490		else
 491			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR
 492				| NFS_INO_REVAL_PAGECACHE);
 493		if (fattr->valid & NFS_ATTR_FATTR_SIZE)
 494			inode->i_size = nfs_size_to_loff_t(fattr->size);
 495		else
 496			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR
 497				| NFS_INO_REVAL_PAGECACHE);
 498		if (fattr->valid & NFS_ATTR_FATTR_NLINK)
 499			set_nlink(inode, fattr->nlink);
 500		else if (nfs_server_capable(inode, NFS_CAP_NLINK))
 501			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 502		if (fattr->valid & NFS_ATTR_FATTR_OWNER)
 503			inode->i_uid = fattr->uid;
 504		else if (nfs_server_capable(inode, NFS_CAP_OWNER))
 505			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 506		if (fattr->valid & NFS_ATTR_FATTR_GROUP)
 507			inode->i_gid = fattr->gid;
 508		else if (nfs_server_capable(inode, NFS_CAP_OWNER_GROUP))
 509			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 510		if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
 511			inode->i_blocks = fattr->du.nfs2.blocks;
 512		if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
 513			/*
 514			 * report the blocks in 512byte units
 515			 */
 516			inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
 517		}
 518
 519		nfs_setsecurity(inode, fattr, label);
 520
 521		nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
 522		nfsi->attrtimeo_timestamp = now;
 523		nfsi->access_cache = RB_ROOT;
 524
 525		nfs_fscache_init_inode(inode);
 526
 527		unlock_new_inode(inode);
 528	} else
 529		nfs_refresh_inode(inode, fattr);
 530	dprintk("NFS: nfs_fhget(%s/%Lu fh_crc=0x%08x ct=%d)\n",
 531		inode->i_sb->s_id,
 532		(unsigned long long)NFS_FILEID(inode),
 533		nfs_display_fhandle_hash(fh),
 534		atomic_read(&inode->i_count));
 535
 536out:
 537	return inode;
 538
 539out_no_inode:
 540	dprintk("nfs_fhget: iget failed with error %ld\n", PTR_ERR(inode));
 541	goto out;
 542}
 543EXPORT_SYMBOL_GPL(nfs_fhget);
 544
 545#define NFS_VALID_ATTRS (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_SIZE|ATTR_ATIME|ATTR_ATIME_SET|ATTR_MTIME|ATTR_MTIME_SET|ATTR_FILE|ATTR_OPEN)
 546
 547int
 548nfs_setattr(struct dentry *dentry, struct iattr *attr)
 549{
 550	struct inode *inode = d_inode(dentry);
 551	struct nfs_fattr *fattr;
 552	int error = 0;
 553
 554	nfs_inc_stats(inode, NFSIOS_VFSSETATTR);
 555
 556	/* skip mode change if it's just for clearing setuid/setgid */
 557	if (attr->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID))
 558		attr->ia_valid &= ~ATTR_MODE;
 559
 560	if (attr->ia_valid & ATTR_SIZE) {
 561		BUG_ON(!S_ISREG(inode->i_mode));
 562
 563		error = inode_newsize_ok(inode, attr->ia_size);
 564		if (error)
 565			return error;
 566
 567		if (attr->ia_size == i_size_read(inode))
 568			attr->ia_valid &= ~ATTR_SIZE;
 569	}
 570
 571	/* Optimization: if the end result is no change, don't RPC */
 572	attr->ia_valid &= NFS_VALID_ATTRS;
 573	if ((attr->ia_valid & ~(ATTR_FILE|ATTR_OPEN)) == 0)
 574		return 0;
 575
 576	trace_nfs_setattr_enter(inode);
 577
 578	/* Write all dirty data */
 579	if (S_ISREG(inode->i_mode))
 580		nfs_sync_inode(inode);
 581
 582	fattr = nfs_alloc_fattr();
 583	if (fattr == NULL) {
 584		error = -ENOMEM;
 585		goto out;
 586	}
 587
 588	/*
 589	 * Return any delegations if we're going to change ACLs
 590	 */
 591	if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0)
 592		NFS_PROTO(inode)->return_delegation(inode);
 593	error = NFS_PROTO(inode)->setattr(dentry, fattr, attr);
 594	if (error == 0)
 595		error = nfs_refresh_inode(inode, fattr);
 596	nfs_free_fattr(fattr);
 597out:
 598	trace_nfs_setattr_exit(inode, error);
 599	return error;
 600}
 601EXPORT_SYMBOL_GPL(nfs_setattr);
 602
 603/**
 604 * nfs_vmtruncate - unmap mappings "freed" by truncate() syscall
 605 * @inode: inode of the file used
 606 * @offset: file offset to start truncating
 607 *
 608 * This is a copy of the common vmtruncate, but with the locking
 609 * corrected to take into account the fact that NFS requires
 610 * inode->i_size to be updated under the inode->i_lock.
 611 * Note: must be called with inode->i_lock held!
 612 */
 613static int nfs_vmtruncate(struct inode * inode, loff_t offset)
 614{
 615	int err;
 616
 617	err = inode_newsize_ok(inode, offset);
 618	if (err)
 619		goto out;
 620
 621	i_size_write(inode, offset);
 622	/* Optimisation */
 623	if (offset == 0)
 624		NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_DATA;
 625
 626	spin_unlock(&inode->i_lock);
 627	truncate_pagecache(inode, offset);
 628	spin_lock(&inode->i_lock);
 629out:
 630	return err;
 631}
 632
 633/**
 634 * nfs_setattr_update_inode - Update inode metadata after a setattr call.
 635 * @inode: pointer to struct inode
 636 * @attr: pointer to struct iattr
 637 *
 638 * Note: we do this in the *proc.c in order to ensure that
 639 *       it works for things like exclusive creates too.
 640 */
 641void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr,
 642		struct nfs_fattr *fattr)
 643{
 644	/* Barrier: bump the attribute generation count. */
 645	nfs_fattr_set_barrier(fattr);
 646
 647	spin_lock(&inode->i_lock);
 648	NFS_I(inode)->attr_gencount = fattr->gencount;
 649	if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) {
 650		if ((attr->ia_valid & ATTR_MODE) != 0) {
 651			int mode = attr->ia_mode & S_IALLUGO;
 652			mode |= inode->i_mode & ~S_IALLUGO;
 653			inode->i_mode = mode;
 654		}
 655		if ((attr->ia_valid & ATTR_UID) != 0)
 656			inode->i_uid = attr->ia_uid;
 657		if ((attr->ia_valid & ATTR_GID) != 0)
 658			inode->i_gid = attr->ia_gid;
 659		nfs_set_cache_invalid(inode, NFS_INO_INVALID_ACCESS
 660				| NFS_INO_INVALID_ACL);
 661	}
 662	if ((attr->ia_valid & ATTR_SIZE) != 0) {
 663		nfs_inc_stats(inode, NFSIOS_SETATTRTRUNC);
 664		nfs_vmtruncate(inode, attr->ia_size);
 665	}
 666	if (fattr->valid)
 667		nfs_update_inode(inode, fattr);
 668	else
 669		NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATTR;
 670	spin_unlock(&inode->i_lock);
 671}
 672EXPORT_SYMBOL_GPL(nfs_setattr_update_inode);
 673
 674static void nfs_readdirplus_parent_cache_miss(struct dentry *dentry)
 675{
 676	struct dentry *parent;
 677
 678	if (!nfs_server_capable(d_inode(dentry), NFS_CAP_READDIRPLUS))
 679		return;
 680	parent = dget_parent(dentry);
 681	nfs_force_use_readdirplus(d_inode(parent));
 682	dput(parent);
 683}
 684
 685static void nfs_readdirplus_parent_cache_hit(struct dentry *dentry)
 686{
 687	struct dentry *parent;
 688
 689	if (!nfs_server_capable(d_inode(dentry), NFS_CAP_READDIRPLUS))
 690		return;
 691	parent = dget_parent(dentry);
 692	nfs_advise_use_readdirplus(d_inode(parent));
 693	dput(parent);
 694}
 695
 696static bool nfs_need_revalidate_inode(struct inode *inode)
 697{
 698	if (NFS_I(inode)->cache_validity &
 699			(NFS_INO_INVALID_ATTR|NFS_INO_INVALID_LABEL))
 700		return true;
 701	if (nfs_attribute_cache_expired(inode))
 702		return true;
 703	return false;
 704}
 705
 706int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
 707{
 708	struct inode *inode = d_inode(dentry);
 709	int need_atime = NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATIME;
 710	int err = 0;
 711
 712	trace_nfs_getattr_enter(inode);
 713	/* Flush out writes to the server in order to update c/mtime.  */
 714	if (S_ISREG(inode->i_mode)) {
 715		err = filemap_write_and_wait(inode->i_mapping);
 
 
 716		if (err)
 717			goto out;
 718	}
 719
 720	/*
 721	 * We may force a getattr if the user cares about atime.
 722	 *
 723	 * Note that we only have to check the vfsmount flags here:
 724	 *  - NFS always sets S_NOATIME by so checking it would give a
 725	 *    bogus result
 726	 *  - NFS never sets MS_NOATIME or MS_NODIRATIME so there is
 727	 *    no point in checking those.
 728	 */
 729 	if ((mnt->mnt_flags & MNT_NOATIME) ||
 730 	    ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode)))
 731		need_atime = 0;
 732
 733	if (need_atime || nfs_need_revalidate_inode(inode)) {
 734		struct nfs_server *server = NFS_SERVER(inode);
 735
 736		nfs_readdirplus_parent_cache_miss(dentry);
 
 737		err = __nfs_revalidate_inode(server, inode);
 738	} else
 739		nfs_readdirplus_parent_cache_hit(dentry);
 740	if (!err) {
 741		generic_fillattr(inode, stat);
 742		stat->ino = nfs_compat_user_ino64(NFS_FILEID(inode));
 743		if (S_ISDIR(inode->i_mode))
 744			stat->blksize = NFS_SERVER(inode)->dtsize;
 745	}
 746out:
 747	trace_nfs_getattr_exit(inode, err);
 748	return err;
 749}
 750EXPORT_SYMBOL_GPL(nfs_getattr);
 751
 752static void nfs_init_lock_context(struct nfs_lock_context *l_ctx)
 753{
 754	atomic_set(&l_ctx->count, 1);
 755	l_ctx->lockowner = current->files;
 
 756	INIT_LIST_HEAD(&l_ctx->list);
 757	atomic_set(&l_ctx->io_count, 0);
 758}
 759
 760static struct nfs_lock_context *__nfs_find_lock_context(struct nfs_open_context *ctx)
 761{
 762	struct nfs_lock_context *head = &ctx->lock_context;
 763	struct nfs_lock_context *pos = head;
 764
 765	do {
 766		if (pos->lockowner != current->files)
 
 
 767			continue;
 768		atomic_inc(&pos->count);
 769		return pos;
 770	} while ((pos = list_entry(pos->list.next, typeof(*pos), list)) != head);
 771	return NULL;
 772}
 773
 774struct nfs_lock_context *nfs_get_lock_context(struct nfs_open_context *ctx)
 775{
 776	struct nfs_lock_context *res, *new = NULL;
 777	struct inode *inode = d_inode(ctx->dentry);
 778
 779	spin_lock(&inode->i_lock);
 780	res = __nfs_find_lock_context(ctx);
 781	if (res == NULL) {
 782		spin_unlock(&inode->i_lock);
 783		new = kmalloc(sizeof(*new), GFP_KERNEL);
 784		if (new == NULL)
 785			return ERR_PTR(-ENOMEM);
 786		nfs_init_lock_context(new);
 787		spin_lock(&inode->i_lock);
 788		res = __nfs_find_lock_context(ctx);
 789		if (res == NULL) {
 790			list_add_tail(&new->list, &ctx->lock_context.list);
 791			new->open_context = ctx;
 792			res = new;
 793			new = NULL;
 794		}
 795	}
 796	spin_unlock(&inode->i_lock);
 797	kfree(new);
 798	return res;
 799}
 800EXPORT_SYMBOL_GPL(nfs_get_lock_context);
 801
 802void nfs_put_lock_context(struct nfs_lock_context *l_ctx)
 803{
 804	struct nfs_open_context *ctx = l_ctx->open_context;
 805	struct inode *inode = d_inode(ctx->dentry);
 806
 807	if (!atomic_dec_and_lock(&l_ctx->count, &inode->i_lock))
 808		return;
 809	list_del(&l_ctx->list);
 810	spin_unlock(&inode->i_lock);
 811	kfree(l_ctx);
 812}
 813EXPORT_SYMBOL_GPL(nfs_put_lock_context);
 814
 815/**
 816 * nfs_close_context - Common close_context() routine NFSv2/v3
 817 * @ctx: pointer to context
 818 * @is_sync: is this a synchronous close
 819 *
 820 * Ensure that the attributes are up to date if we're mounted
 821 * with close-to-open semantics and we have cached data that will
 822 * need to be revalidated on open.
 823 */
 824void nfs_close_context(struct nfs_open_context *ctx, int is_sync)
 825{
 826	struct nfs_inode *nfsi;
 827	struct inode *inode;
 828	struct nfs_server *server;
 829
 830	if (!(ctx->mode & FMODE_WRITE))
 831		return;
 832	if (!is_sync)
 833		return;
 834	inode = d_inode(ctx->dentry);
 835	if (NFS_PROTO(inode)->have_delegation(inode, FMODE_READ))
 836		return;
 837	nfsi = NFS_I(inode);
 838	if (inode->i_mapping->nrpages == 0)
 839		return;
 840	if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
 841		return;
 842	if (!list_empty(&nfsi->open_files))
 843		return;
 844	server = NFS_SERVER(inode);
 845	if (server->flags & NFS_MOUNT_NOCTO)
 846		return;
 847	nfs_revalidate_inode(server, inode);
 848}
 849EXPORT_SYMBOL_GPL(nfs_close_context);
 850
 851struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry,
 852						fmode_t f_mode,
 853						struct file *filp)
 854{
 855	struct nfs_open_context *ctx;
 856	struct rpc_cred *cred = rpc_lookup_cred();
 857	if (IS_ERR(cred))
 858		return ERR_CAST(cred);
 859
 860	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
 861	if (!ctx) {
 862		put_rpccred(cred);
 863		return ERR_PTR(-ENOMEM);
 864	}
 865	nfs_sb_active(dentry->d_sb);
 866	ctx->dentry = dget(dentry);
 867	ctx->cred = cred;
 868	ctx->state = NULL;
 869	ctx->mode = f_mode;
 870	ctx->flags = 0;
 871	ctx->error = 0;
 872	ctx->flock_owner = (fl_owner_t)filp;
 873	nfs_init_lock_context(&ctx->lock_context);
 874	ctx->lock_context.open_context = ctx;
 875	INIT_LIST_HEAD(&ctx->list);
 876	ctx->mdsthreshold = NULL;
 877	return ctx;
 878}
 879EXPORT_SYMBOL_GPL(alloc_nfs_open_context);
 880
 881struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx)
 882{
 883	if (ctx != NULL)
 884		atomic_inc(&ctx->lock_context.count);
 885	return ctx;
 886}
 887EXPORT_SYMBOL_GPL(get_nfs_open_context);
 888
 889static void __put_nfs_open_context(struct nfs_open_context *ctx, int is_sync)
 890{
 891	struct inode *inode = d_inode(ctx->dentry);
 892	struct super_block *sb = ctx->dentry->d_sb;
 893
 894	if (!list_empty(&ctx->list)) {
 895		if (!atomic_dec_and_lock(&ctx->lock_context.count, &inode->i_lock))
 896			return;
 897		list_del(&ctx->list);
 898		spin_unlock(&inode->i_lock);
 899	} else if (!atomic_dec_and_test(&ctx->lock_context.count))
 900		return;
 901	if (inode != NULL)
 902		NFS_PROTO(inode)->close_context(ctx, is_sync);
 903	if (ctx->cred != NULL)
 904		put_rpccred(ctx->cred);
 905	dput(ctx->dentry);
 906	nfs_sb_deactive(sb);
 907	kfree(ctx->mdsthreshold);
 908	kfree(ctx);
 909}
 910
 911void put_nfs_open_context(struct nfs_open_context *ctx)
 912{
 913	__put_nfs_open_context(ctx, 0);
 914}
 915EXPORT_SYMBOL_GPL(put_nfs_open_context);
 916
 917static void put_nfs_open_context_sync(struct nfs_open_context *ctx)
 918{
 919	__put_nfs_open_context(ctx, 1);
 920}
 921
 922/*
 923 * Ensure that mmap has a recent RPC credential for use when writing out
 924 * shared pages
 925 */
 926void nfs_inode_attach_open_context(struct nfs_open_context *ctx)
 927{
 928	struct inode *inode = d_inode(ctx->dentry);
 929	struct nfs_inode *nfsi = NFS_I(inode);
 930
 931	spin_lock(&inode->i_lock);
 932	if (ctx->mode & FMODE_WRITE)
 933		list_add(&ctx->list, &nfsi->open_files);
 934	else
 935		list_add_tail(&ctx->list, &nfsi->open_files);
 936	spin_unlock(&inode->i_lock);
 937}
 938EXPORT_SYMBOL_GPL(nfs_inode_attach_open_context);
 939
 940void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx)
 941{
 942	filp->private_data = get_nfs_open_context(ctx);
 943	if (list_empty(&ctx->list))
 944		nfs_inode_attach_open_context(ctx);
 945}
 946EXPORT_SYMBOL_GPL(nfs_file_set_open_context);
 947
 948/*
 949 * Given an inode, search for an open context with the desired characteristics
 950 */
 951struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, fmode_t mode)
 952{
 953	struct nfs_inode *nfsi = NFS_I(inode);
 954	struct nfs_open_context *pos, *ctx = NULL;
 955
 956	spin_lock(&inode->i_lock);
 957	list_for_each_entry(pos, &nfsi->open_files, list) {
 958		if (cred != NULL && pos->cred != cred)
 959			continue;
 960		if ((pos->mode & (FMODE_READ|FMODE_WRITE)) != mode)
 961			continue;
 962		ctx = get_nfs_open_context(pos);
 963		break;
 964	}
 965	spin_unlock(&inode->i_lock);
 966	return ctx;
 967}
 968
 969void nfs_file_clear_open_context(struct file *filp)
 970{
 971	struct nfs_open_context *ctx = nfs_file_open_context(filp);
 972
 973	if (ctx) {
 974		struct inode *inode = d_inode(ctx->dentry);
 975
 976		/*
 977		 * We fatal error on write before. Try to writeback
 978		 * every page again.
 979		 */
 980		if (ctx->error < 0)
 981			invalidate_inode_pages2(inode->i_mapping);
 982		filp->private_data = NULL;
 983		spin_lock(&inode->i_lock);
 984		list_move_tail(&ctx->list, &NFS_I(inode)->open_files);
 985		spin_unlock(&inode->i_lock);
 986		put_nfs_open_context_sync(ctx);
 987	}
 988}
 989
 990/*
 991 * These allocate and release file read/write context information.
 992 */
 993int nfs_open(struct inode *inode, struct file *filp)
 994{
 995	struct nfs_open_context *ctx;
 996
 997	ctx = alloc_nfs_open_context(file_dentry(filp), filp->f_mode, filp);
 998	if (IS_ERR(ctx))
 999		return PTR_ERR(ctx);
1000	nfs_file_set_open_context(filp, ctx);
1001	put_nfs_open_context(ctx);
1002	nfs_fscache_open_file(inode, filp);
1003	return 0;
1004}
1005
1006/*
1007 * This function is called whenever some part of NFS notices that
1008 * the cached attributes have to be refreshed.
1009 */
1010int
1011__nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
1012{
1013	int		 status = -ESTALE;
1014	struct nfs4_label *label = NULL;
1015	struct nfs_fattr *fattr = NULL;
1016	struct nfs_inode *nfsi = NFS_I(inode);
1017
1018	dfprintk(PAGECACHE, "NFS: revalidating (%s/%Lu)\n",
1019		inode->i_sb->s_id, (unsigned long long)NFS_FILEID(inode));
1020
1021	trace_nfs_revalidate_inode_enter(inode);
1022
1023	if (is_bad_inode(inode))
1024		goto out;
1025	if (NFS_STALE(inode))
1026		goto out;
1027
1028	/* pNFS: Attributes aren't updated until we layoutcommit */
1029	if (S_ISREG(inode->i_mode)) {
1030		status = pnfs_sync_inode(inode, false);
1031		if (status)
1032			goto out;
1033	}
1034
1035	status = -ENOMEM;
1036	fattr = nfs_alloc_fattr();
1037	if (fattr == NULL)
1038		goto out;
1039
1040	nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE);
1041
1042	label = nfs4_label_alloc(NFS_SERVER(inode), GFP_KERNEL);
1043	if (IS_ERR(label)) {
1044		status = PTR_ERR(label);
1045		goto out;
1046	}
1047
1048	status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr, label);
1049	if (status != 0) {
1050		dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) getattr failed, error=%d\n",
1051			 inode->i_sb->s_id,
1052			 (unsigned long long)NFS_FILEID(inode), status);
1053		if (status == -ESTALE) {
1054			nfs_zap_caches(inode);
1055			if (!S_ISDIR(inode->i_mode))
1056				set_bit(NFS_INO_STALE, &NFS_I(inode)->flags);
1057		}
1058		goto err_out;
1059	}
1060
1061	status = nfs_refresh_inode(inode, fattr);
1062	if (status) {
1063		dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) refresh failed, error=%d\n",
1064			 inode->i_sb->s_id,
1065			 (unsigned long long)NFS_FILEID(inode), status);
1066		goto err_out;
1067	}
1068
1069	if (nfsi->cache_validity & NFS_INO_INVALID_ACL)
1070		nfs_zap_acl_cache(inode);
1071
1072	nfs_setsecurity(inode, fattr, label);
1073
1074	dfprintk(PAGECACHE, "NFS: (%s/%Lu) revalidation complete\n",
1075		inode->i_sb->s_id,
1076		(unsigned long long)NFS_FILEID(inode));
1077
1078err_out:
1079	nfs4_label_free(label);
1080out:
1081	nfs_free_fattr(fattr);
1082	trace_nfs_revalidate_inode_exit(inode, status);
1083	return status;
1084}
1085
 
 
 
 
 
 
 
1086int nfs_attribute_cache_expired(struct inode *inode)
1087{
1088	if (nfs_have_delegated_attributes(inode))
1089		return 0;
1090	return nfs_attribute_timeout(inode);
1091}
1092
1093/**
1094 * nfs_revalidate_inode - Revalidate the inode attributes
1095 * @server - pointer to nfs_server struct
1096 * @inode - pointer to inode struct
1097 *
1098 * Updates inode attribute information by retrieving the data from the server.
1099 */
1100int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
1101{
1102	if (!nfs_need_revalidate_inode(inode))
1103		return NFS_STALE(inode) ? -ESTALE : 0;
1104	return __nfs_revalidate_inode(server, inode);
1105}
1106EXPORT_SYMBOL_GPL(nfs_revalidate_inode);
1107
 
 
 
 
 
 
 
 
 
1108static int nfs_invalidate_mapping(struct inode *inode, struct address_space *mapping)
1109{
1110	struct nfs_inode *nfsi = NFS_I(inode);
1111	int ret;
1112
1113	if (mapping->nrpages != 0) {
1114		if (S_ISREG(inode->i_mode)) {
1115			unmap_mapping_range(mapping, 0, 0, 0);
1116			ret = nfs_sync_mapping(mapping);
1117			if (ret < 0)
1118				return ret;
1119		}
1120		ret = invalidate_inode_pages2(mapping);
1121		if (ret < 0)
1122			return ret;
1123	}
1124	if (S_ISDIR(inode->i_mode)) {
1125		spin_lock(&inode->i_lock);
1126		memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf));
1127		spin_unlock(&inode->i_lock);
1128	}
1129	nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE);
1130	nfs_fscache_wait_on_invalidate(inode);
1131
1132	dfprintk(PAGECACHE, "NFS: (%s/%Lu) data cache invalidated\n",
1133			inode->i_sb->s_id,
1134			(unsigned long long)NFS_FILEID(inode));
1135	return 0;
1136}
1137
1138bool nfs_mapping_need_revalidate_inode(struct inode *inode)
1139{
1140	return nfs_check_cache_invalid(inode, NFS_INO_REVAL_PAGECACHE) ||
1141		NFS_STALE(inode);
 
 
 
1142}
1143
1144int nfs_revalidate_mapping_rcu(struct inode *inode)
1145{
1146	struct nfs_inode *nfsi = NFS_I(inode);
1147	unsigned long *bitlock = &nfsi->flags;
1148	int ret = 0;
1149
1150	if (IS_SWAPFILE(inode))
1151		goto out;
1152	if (nfs_mapping_need_revalidate_inode(inode)) {
1153		ret = -ECHILD;
1154		goto out;
1155	}
1156	spin_lock(&inode->i_lock);
1157	if (test_bit(NFS_INO_INVALIDATING, bitlock) ||
1158	    (nfsi->cache_validity & NFS_INO_INVALID_DATA))
1159		ret = -ECHILD;
1160	spin_unlock(&inode->i_lock);
1161out:
1162	return ret;
1163}
1164
1165/**
1166 * nfs_revalidate_mapping - Revalidate the pagecache
1167 * @inode - pointer to host inode
1168 * @mapping - pointer to mapping
 
1169 */
1170int nfs_revalidate_mapping(struct inode *inode,
1171		struct address_space *mapping)
 
1172{
1173	struct nfs_inode *nfsi = NFS_I(inode);
1174	unsigned long *bitlock = &nfsi->flags;
1175	int ret = 0;
1176
1177	/* swapfiles are not supposed to be shared. */
1178	if (IS_SWAPFILE(inode))
1179		goto out;
1180
1181	if (nfs_mapping_need_revalidate_inode(inode)) {
1182		ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
1183		if (ret < 0)
1184			goto out;
1185	}
1186
1187	/*
1188	 * We must clear NFS_INO_INVALID_DATA first to ensure that
1189	 * invalidations that come in while we're shooting down the mappings
1190	 * are respected. But, that leaves a race window where one revalidator
1191	 * can clear the flag, and then another checks it before the mapping
1192	 * gets invalidated. Fix that by serializing access to this part of
1193	 * the function.
1194	 *
1195	 * At the same time, we need to allow other tasks to see whether we
1196	 * might be in the middle of invalidating the pages, so we only set
1197	 * the bit lock here if it looks like we're going to be doing that.
1198	 */
1199	for (;;) {
1200		ret = wait_on_bit_action(bitlock, NFS_INO_INVALIDATING,
1201					 nfs_wait_bit_killable, TASK_KILLABLE);
1202		if (ret)
1203			goto out;
1204		spin_lock(&inode->i_lock);
1205		if (test_bit(NFS_INO_INVALIDATING, bitlock)) {
1206			spin_unlock(&inode->i_lock);
1207			continue;
1208		}
1209		if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
1210			break;
1211		spin_unlock(&inode->i_lock);
1212		goto out;
1213	}
1214
1215	set_bit(NFS_INO_INVALIDATING, bitlock);
1216	smp_wmb();
1217	nfsi->cache_validity &= ~NFS_INO_INVALID_DATA;
1218	spin_unlock(&inode->i_lock);
1219	trace_nfs_invalidate_mapping_enter(inode);
1220	ret = nfs_invalidate_mapping(inode, mapping);
 
 
 
 
 
1221	trace_nfs_invalidate_mapping_exit(inode, ret);
1222
1223	clear_bit_unlock(NFS_INO_INVALIDATING, bitlock);
1224	smp_mb__after_atomic();
1225	wake_up_bit(bitlock, NFS_INO_INVALIDATING);
1226out:
1227	return ret;
1228}
1229
1230static bool nfs_file_has_writers(struct nfs_inode *nfsi)
 
 
 
 
 
1231{
1232	struct inode *inode = &nfsi->vfs_inode;
1233
1234	assert_spin_locked(&inode->i_lock);
1235
1236	if (!S_ISREG(inode->i_mode))
1237		return false;
1238	if (list_empty(&nfsi->open_files))
1239		return false;
1240	/* Note: This relies on nfsi->open_files being ordered with writers
1241	 *       being placed at the head of the list.
1242	 *       See nfs_inode_attach_open_context()
1243	 */
1244	return (list_first_entry(&nfsi->open_files,
1245			struct nfs_open_context,
1246			list)->mode & FMODE_WRITE) == FMODE_WRITE;
1247}
1248
1249static bool nfs_file_has_buffered_writers(struct nfs_inode *nfsi)
 
 
 
 
 
 
 
 
1250{
1251	return nfs_file_has_writers(nfsi) && nfs_file_io_is_buffered(nfsi);
1252}
1253
1254static unsigned long nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1255{
1256	struct nfs_inode *nfsi = NFS_I(inode);
1257	unsigned long ret = 0;
1258
1259	if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE)
1260			&& (fattr->valid & NFS_ATTR_FATTR_CHANGE)
1261			&& inode->i_version == fattr->pre_change_attr) {
1262		inode->i_version = fattr->change_attr;
1263		if (S_ISDIR(inode->i_mode))
1264			nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA);
1265		ret |= NFS_INO_INVALID_ATTR;
1266	}
1267	/* If we have atomic WCC data, we may update some attributes */
1268	if ((fattr->valid & NFS_ATTR_FATTR_PRECTIME)
1269			&& (fattr->valid & NFS_ATTR_FATTR_CTIME)
1270			&& timespec_equal(&inode->i_ctime, &fattr->pre_ctime)) {
1271		memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
1272		ret |= NFS_INO_INVALID_ATTR;
1273	}
1274
1275	if ((fattr->valid & NFS_ATTR_FATTR_PREMTIME)
1276			&& (fattr->valid & NFS_ATTR_FATTR_MTIME)
1277			&& timespec_equal(&inode->i_mtime, &fattr->pre_mtime)) {
1278		memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
1279		if (S_ISDIR(inode->i_mode))
1280			nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA);
1281		ret |= NFS_INO_INVALID_ATTR;
1282	}
1283	if ((fattr->valid & NFS_ATTR_FATTR_PRESIZE)
1284			&& (fattr->valid & NFS_ATTR_FATTR_SIZE)
1285			&& i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size)
1286			&& nfsi->nrequests == 0) {
1287		i_size_write(inode, nfs_size_to_loff_t(fattr->size));
1288		ret |= NFS_INO_INVALID_ATTR;
1289	}
1290
1291	return ret;
1292}
1293
1294/**
1295 * nfs_check_inode_attributes - verify consistency of the inode attribute cache
1296 * @inode - pointer to inode
1297 * @fattr - updated attributes
1298 *
1299 * Verifies the attribute cache. If we have just changed the attributes,
1300 * so that fattr carries weak cache consistency data, then it may
1301 * also update the ctime/mtime/change_attribute.
1302 */
1303static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr)
1304{
1305	struct nfs_inode *nfsi = NFS_I(inode);
1306	loff_t cur_size, new_isize;
1307	unsigned long invalid = 0;
1308
1309
1310	if (nfs_have_delegated_attributes(inode))
1311		return 0;
1312	/* Has the inode gone and changed behind our back? */
1313	if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid)
1314		return -EIO;
1315	if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT))
1316		return -EIO;
1317
1318	if (!nfs_file_has_buffered_writers(nfsi)) {
1319		/* Verify a few of the more important attributes */
1320		if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 && inode->i_version != fattr->change_attr)
1321			invalid |= NFS_INO_INVALID_ATTR | NFS_INO_REVAL_PAGECACHE;
1322
1323		if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec_equal(&inode->i_mtime, &fattr->mtime))
1324			invalid |= NFS_INO_INVALID_ATTR;
1325
1326		if ((fattr->valid & NFS_ATTR_FATTR_CTIME) && !timespec_equal(&inode->i_ctime, &fattr->ctime))
1327			invalid |= NFS_INO_INVALID_ATTR;
 
1328
1329		if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
1330			cur_size = i_size_read(inode);
1331			new_isize = nfs_size_to_loff_t(fattr->size);
1332			if (cur_size != new_isize)
1333				invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
1334		}
1335	}
 
 
1336
1337	/* Have any file permissions changed? */
1338	if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO))
1339		invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
1340	if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && !uid_eq(inode->i_uid, fattr->uid))
1341		invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
1342	if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && !gid_eq(inode->i_gid, fattr->gid))
1343		invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
1344
1345	/* Has the link count changed? */
1346	if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink)
1347		invalid |= NFS_INO_INVALID_ATTR;
1348
1349	if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec_equal(&inode->i_atime, &fattr->atime))
1350		invalid |= NFS_INO_INVALID_ATIME;
1351
1352	if (invalid != 0)
1353		nfs_set_cache_invalid(inode, invalid | NFS_INO_REVAL_FORCED);
1354
1355	nfsi->read_cache_jiffies = fattr->time_start;
1356	return 0;
1357}
1358
1359static atomic_long_t nfs_attr_generation_counter;
1360
1361static unsigned long nfs_read_attr_generation_counter(void)
1362{
1363	return atomic_long_read(&nfs_attr_generation_counter);
1364}
1365
1366unsigned long nfs_inc_attr_generation_counter(void)
1367{
1368	return atomic_long_inc_return(&nfs_attr_generation_counter);
1369}
1370EXPORT_SYMBOL_GPL(nfs_inc_attr_generation_counter);
1371
1372void nfs_fattr_init(struct nfs_fattr *fattr)
1373{
1374	fattr->valid = 0;
1375	fattr->time_start = jiffies;
1376	fattr->gencount = nfs_inc_attr_generation_counter();
1377	fattr->owner_name = NULL;
1378	fattr->group_name = NULL;
1379}
1380EXPORT_SYMBOL_GPL(nfs_fattr_init);
1381
1382/**
1383 * nfs_fattr_set_barrier
1384 * @fattr: attributes
1385 *
1386 * Used to set a barrier after an attribute was updated. This
1387 * barrier ensures that older attributes from RPC calls that may
1388 * have raced with our update cannot clobber these new values.
1389 * Note that you are still responsible for ensuring that other
1390 * operations which change the attribute on the server do not
1391 * collide.
1392 */
1393void nfs_fattr_set_barrier(struct nfs_fattr *fattr)
1394{
1395	fattr->gencount = nfs_inc_attr_generation_counter();
1396}
1397
1398struct nfs_fattr *nfs_alloc_fattr(void)
1399{
1400	struct nfs_fattr *fattr;
1401
1402	fattr = kmalloc(sizeof(*fattr), GFP_NOFS);
1403	if (fattr != NULL)
1404		nfs_fattr_init(fattr);
1405	return fattr;
1406}
1407EXPORT_SYMBOL_GPL(nfs_alloc_fattr);
1408
1409struct nfs_fh *nfs_alloc_fhandle(void)
1410{
1411	struct nfs_fh *fh;
1412
1413	fh = kmalloc(sizeof(struct nfs_fh), GFP_NOFS);
1414	if (fh != NULL)
1415		fh->size = 0;
1416	return fh;
1417}
1418EXPORT_SYMBOL_GPL(nfs_alloc_fhandle);
1419
1420#ifdef NFS_DEBUG
1421/*
1422 * _nfs_display_fhandle_hash - calculate the crc32 hash for the filehandle
1423 *                             in the same way that wireshark does
1424 *
1425 * @fh: file handle
1426 *
1427 * For debugging only.
1428 */
1429u32 _nfs_display_fhandle_hash(const struct nfs_fh *fh)
1430{
1431	/* wireshark uses 32-bit AUTODIN crc and does a bitwise
1432	 * not on the result */
1433	return nfs_fhandle_hash(fh);
1434}
1435EXPORT_SYMBOL_GPL(_nfs_display_fhandle_hash);
1436
1437/*
1438 * _nfs_display_fhandle - display an NFS file handle on the console
1439 *
1440 * @fh: file handle to display
1441 * @caption: display caption
1442 *
1443 * For debugging only.
1444 */
1445void _nfs_display_fhandle(const struct nfs_fh *fh, const char *caption)
1446{
1447	unsigned short i;
1448
1449	if (fh == NULL || fh->size == 0) {
1450		printk(KERN_DEFAULT "%s at %p is empty\n", caption, fh);
1451		return;
1452	}
1453
1454	printk(KERN_DEFAULT "%s at %p is %u bytes, crc: 0x%08x:\n",
1455	       caption, fh, fh->size, _nfs_display_fhandle_hash(fh));
1456	for (i = 0; i < fh->size; i += 16) {
1457		__be32 *pos = (__be32 *)&fh->data[i];
1458
1459		switch ((fh->size - i - 1) >> 2) {
1460		case 0:
1461			printk(KERN_DEFAULT " %08x\n",
1462				be32_to_cpup(pos));
1463			break;
1464		case 1:
1465			printk(KERN_DEFAULT " %08x %08x\n",
1466				be32_to_cpup(pos), be32_to_cpup(pos + 1));
1467			break;
1468		case 2:
1469			printk(KERN_DEFAULT " %08x %08x %08x\n",
1470				be32_to_cpup(pos), be32_to_cpup(pos + 1),
1471				be32_to_cpup(pos + 2));
1472			break;
1473		default:
1474			printk(KERN_DEFAULT " %08x %08x %08x %08x\n",
1475				be32_to_cpup(pos), be32_to_cpup(pos + 1),
1476				be32_to_cpup(pos + 2), be32_to_cpup(pos + 3));
1477		}
1478	}
1479}
1480EXPORT_SYMBOL_GPL(_nfs_display_fhandle);
1481#endif
1482
1483/**
1484 * nfs_inode_attrs_need_update - check if the inode attributes need updating
1485 * @inode - pointer to inode
1486 * @fattr - attributes
1487 *
1488 * Attempt to divine whether or not an RPC call reply carrying stale
1489 * attributes got scheduled after another call carrying updated ones.
1490 *
1491 * To do so, the function first assumes that a more recent ctime means
1492 * that the attributes in fattr are newer, however it also attempt to
1493 * catch the case where ctime either didn't change, or went backwards
1494 * (if someone reset the clock on the server) by looking at whether
1495 * or not this RPC call was started after the inode was last updated.
1496 * Note also the check for wraparound of 'attr_gencount'
1497 *
1498 * The function returns 'true' if it thinks the attributes in 'fattr' are
1499 * more recent than the ones cached in the inode.
1500 *
1501 */
1502static int nfs_inode_attrs_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
1503{
1504	const struct nfs_inode *nfsi = NFS_I(inode);
1505
1506	return ((long)fattr->gencount - (long)nfsi->attr_gencount) > 0 ||
1507		((long)nfsi->attr_gencount - (long)nfs_read_attr_generation_counter() > 0);
1508}
1509
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1510static int nfs_refresh_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
1511{
1512	int ret;
1513
1514	trace_nfs_refresh_inode_enter(inode);
1515
 
 
1516	if (nfs_inode_attrs_need_update(inode, fattr))
1517		ret = nfs_update_inode(inode, fattr);
1518	else
1519		ret = nfs_check_inode_attributes(inode, fattr);
1520
1521	trace_nfs_refresh_inode_exit(inode, ret);
1522	return ret;
1523}
1524
1525/**
1526 * nfs_refresh_inode - try to update the inode attribute cache
1527 * @inode - pointer to inode
1528 * @fattr - updated attributes
1529 *
1530 * Check that an RPC call that returned attributes has not overlapped with
1531 * other recent updates of the inode metadata, then decide whether it is
1532 * safe to do a full update of the inode attributes, or whether just to
1533 * call nfs_check_inode_attributes.
1534 */
1535int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
1536{
1537	int status;
1538
1539	if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1540		return 0;
1541	spin_lock(&inode->i_lock);
1542	status = nfs_refresh_inode_locked(inode, fattr);
1543	spin_unlock(&inode->i_lock);
1544
1545	return status;
1546}
1547EXPORT_SYMBOL_GPL(nfs_refresh_inode);
1548
1549static int nfs_post_op_update_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
1550{
1551	unsigned long invalid = NFS_INO_INVALID_ATTR;
 
 
 
 
 
 
 
1552
1553	if (S_ISDIR(inode->i_mode))
1554		invalid |= NFS_INO_INVALID_DATA;
1555	nfs_set_cache_invalid(inode, invalid);
1556	if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1557		return 0;
1558	return nfs_refresh_inode_locked(inode, fattr);
1559}
1560
1561/**
1562 * nfs_post_op_update_inode - try to update the inode attribute cache
1563 * @inode - pointer to inode
1564 * @fattr - updated attributes
1565 *
1566 * After an operation that has changed the inode metadata, mark the
1567 * attribute cache as being invalid, then try to update it.
1568 *
1569 * NB: if the server didn't return any post op attributes, this
1570 * function will force the retrieval of attributes before the next
1571 * NFS request.  Thus it should be used only for operations that
1572 * are expected to change one or more attributes, to avoid
1573 * unnecessary NFS requests and trips through nfs_update_inode().
1574 */
1575int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1576{
1577	int status;
1578
1579	spin_lock(&inode->i_lock);
1580	nfs_fattr_set_barrier(fattr);
1581	status = nfs_post_op_update_inode_locked(inode, fattr);
1582	spin_unlock(&inode->i_lock);
1583
1584	return status;
1585}
1586EXPORT_SYMBOL_GPL(nfs_post_op_update_inode);
1587
1588/**
1589 * nfs_post_op_update_inode_force_wcc_locked - update the inode attribute cache
1590 * @inode - pointer to inode
1591 * @fattr - updated attributes
1592 *
1593 * After an operation that has changed the inode metadata, mark the
1594 * attribute cache as being invalid, then try to update it. Fake up
1595 * weak cache consistency data, if none exist.
1596 *
1597 * This function is mainly designed to be used by the ->write_done() functions.
1598 */
1599int nfs_post_op_update_inode_force_wcc_locked(struct inode *inode, struct nfs_fattr *fattr)
1600{
1601	int status;
1602
1603	/* Don't do a WCC update if these attributes are already stale */
1604	if ((fattr->valid & NFS_ATTR_FATTR) == 0 ||
1605			!nfs_inode_attrs_need_update(inode, fattr)) {
1606		fattr->valid &= ~(NFS_ATTR_FATTR_PRECHANGE
1607				| NFS_ATTR_FATTR_PRESIZE
1608				| NFS_ATTR_FATTR_PREMTIME
1609				| NFS_ATTR_FATTR_PRECTIME);
1610		goto out_noforce;
1611	}
1612	if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
1613			(fattr->valid & NFS_ATTR_FATTR_PRECHANGE) == 0) {
1614		fattr->pre_change_attr = inode->i_version;
1615		fattr->valid |= NFS_ATTR_FATTR_PRECHANGE;
1616	}
1617	if ((fattr->valid & NFS_ATTR_FATTR_CTIME) != 0 &&
1618			(fattr->valid & NFS_ATTR_FATTR_PRECTIME) == 0) {
1619		memcpy(&fattr->pre_ctime, &inode->i_ctime, sizeof(fattr->pre_ctime));
1620		fattr->valid |= NFS_ATTR_FATTR_PRECTIME;
1621	}
1622	if ((fattr->valid & NFS_ATTR_FATTR_MTIME) != 0 &&
1623			(fattr->valid & NFS_ATTR_FATTR_PREMTIME) == 0) {
1624		memcpy(&fattr->pre_mtime, &inode->i_mtime, sizeof(fattr->pre_mtime));
1625		fattr->valid |= NFS_ATTR_FATTR_PREMTIME;
1626	}
1627	if ((fattr->valid & NFS_ATTR_FATTR_SIZE) != 0 &&
1628			(fattr->valid & NFS_ATTR_FATTR_PRESIZE) == 0) {
1629		fattr->pre_size = i_size_read(inode);
1630		fattr->valid |= NFS_ATTR_FATTR_PRESIZE;
1631	}
1632out_noforce:
1633	status = nfs_post_op_update_inode_locked(inode, fattr);
1634	return status;
1635}
1636
1637/**
1638 * nfs_post_op_update_inode_force_wcc - try to update the inode attribute cache
1639 * @inode - pointer to inode
1640 * @fattr - updated attributes
1641 *
1642 * After an operation that has changed the inode metadata, mark the
1643 * attribute cache as being invalid, then try to update it. Fake up
1644 * weak cache consistency data, if none exist.
1645 *
1646 * This function is mainly designed to be used by the ->write_done() functions.
1647 */
1648int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr)
1649{
1650	int status;
1651
1652	spin_lock(&inode->i_lock);
1653	nfs_fattr_set_barrier(fattr);
1654	status = nfs_post_op_update_inode_force_wcc_locked(inode, fattr);
1655	spin_unlock(&inode->i_lock);
1656	return status;
1657}
1658EXPORT_SYMBOL_GPL(nfs_post_op_update_inode_force_wcc);
1659
1660
1661static inline bool nfs_fileid_valid(struct nfs_inode *nfsi,
1662				    struct nfs_fattr *fattr)
1663{
1664	bool ret1 = true, ret2 = true;
1665
1666	if (fattr->valid & NFS_ATTR_FATTR_FILEID)
1667		ret1 = (nfsi->fileid == fattr->fileid);
1668	if (fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID)
1669		ret2 = (nfsi->fileid == fattr->mounted_on_fileid);
1670	return ret1 || ret2;
1671}
1672
1673/*
1674 * Many nfs protocol calls return the new file attributes after
1675 * an operation.  Here we update the inode to reflect the state
1676 * of the server's inode.
1677 *
1678 * This is a bit tricky because we have to make sure all dirty pages
1679 * have been sent off to the server before calling invalidate_inode_pages.
1680 * To make sure no other process adds more write requests while we try
1681 * our best to flush them, we make them sleep during the attribute refresh.
1682 *
1683 * A very similar scenario holds for the dir cache.
1684 */
1685static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1686{
1687	struct nfs_server *server;
1688	struct nfs_inode *nfsi = NFS_I(inode);
1689	loff_t cur_isize, new_isize;
1690	unsigned long invalid = 0;
1691	unsigned long now = jiffies;
1692	unsigned long save_cache_validity;
1693	bool have_writers = nfs_file_has_buffered_writers(nfsi);
1694	bool cache_revalidated = true;
1695
1696	dfprintk(VFS, "NFS: %s(%s/%lu fh_crc=0x%08x ct=%d info=0x%x)\n",
1697			__func__, inode->i_sb->s_id, inode->i_ino,
1698			nfs_display_fhandle_hash(NFS_FH(inode)),
1699			atomic_read(&inode->i_count), fattr->valid);
1700
1701	if (!nfs_fileid_valid(nfsi, fattr)) {
1702		printk(KERN_ERR "NFS: server %s error: fileid changed\n"
1703			"fsid %s: expected fileid 0x%Lx, got 0x%Lx\n",
1704			NFS_SERVER(inode)->nfs_client->cl_hostname,
1705			inode->i_sb->s_id, (long long)nfsi->fileid,
1706			(long long)fattr->fileid);
1707		goto out_err;
1708	}
1709
1710	/*
1711	 * Make sure the inode's type hasn't changed.
1712	 */
1713	if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) {
1714		/*
1715		* Big trouble! The inode has become a different object.
1716		*/
1717		printk(KERN_DEBUG "NFS: %s: inode %lu mode changed, %07o to %07o\n",
1718				__func__, inode->i_ino, inode->i_mode, fattr->mode);
1719		goto out_err;
1720	}
1721
1722	server = NFS_SERVER(inode);
1723	/* Update the fsid? */
1724	if (S_ISDIR(inode->i_mode) && (fattr->valid & NFS_ATTR_FATTR_FSID) &&
1725			!nfs_fsid_equal(&server->fsid, &fattr->fsid) &&
1726			!IS_AUTOMOUNT(inode))
1727		server->fsid = fattr->fsid;
1728
1729	/*
1730	 * Update the read time so we don't revalidate too often.
1731	 */
1732	nfsi->read_cache_jiffies = fattr->time_start;
1733
1734	save_cache_validity = nfsi->cache_validity;
1735	nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR
1736			| NFS_INO_INVALID_ATIME
1737			| NFS_INO_REVAL_FORCED
1738			| NFS_INO_REVAL_PAGECACHE);
1739
1740	/* Do atomic weak cache consistency updates */
1741	invalid |= nfs_wcc_update_inode(inode, fattr);
1742
1743	if (pnfs_layoutcommit_outstanding(inode)) {
1744		nfsi->cache_validity |= save_cache_validity & NFS_INO_INVALID_ATTR;
1745		cache_revalidated = false;
1746	}
1747
1748	/* More cache consistency checks */
1749	if (fattr->valid & NFS_ATTR_FATTR_CHANGE) {
1750		if (inode->i_version != fattr->change_attr) {
1751			dprintk("NFS: change_attr change on server for file %s/%ld\n",
1752					inode->i_sb->s_id, inode->i_ino);
1753			/* Could it be a race with writeback? */
1754			if (!have_writers) {
1755				invalid |= NFS_INO_INVALID_ATTR
1756					| NFS_INO_INVALID_DATA
1757					| NFS_INO_INVALID_ACCESS
1758					| NFS_INO_INVALID_ACL;
1759				if (S_ISDIR(inode->i_mode))
1760					nfs_force_lookup_revalidate(inode);
1761			}
1762			inode->i_version = fattr->change_attr;
1763		}
1764	} else {
1765		nfsi->cache_validity |= save_cache_validity;
1766		cache_revalidated = false;
1767	}
1768
1769	if (fattr->valid & NFS_ATTR_FATTR_MTIME) {
1770		memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
1771	} else if (server->caps & NFS_CAP_MTIME) {
1772		nfsi->cache_validity |= save_cache_validity &
1773				(NFS_INO_INVALID_ATTR
1774				| NFS_INO_REVAL_FORCED);
1775		cache_revalidated = false;
1776	}
1777
1778	if (fattr->valid & NFS_ATTR_FATTR_CTIME) {
1779		memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
1780	} else if (server->caps & NFS_CAP_CTIME) {
1781		nfsi->cache_validity |= save_cache_validity &
1782				(NFS_INO_INVALID_ATTR
1783				| NFS_INO_REVAL_FORCED);
1784		cache_revalidated = false;
1785	}
1786
1787	/* Check if our cached file size is stale */
1788	if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
1789		new_isize = nfs_size_to_loff_t(fattr->size);
1790		cur_isize = i_size_read(inode);
1791		if (new_isize != cur_isize) {
1792			/* Do we perhaps have any outstanding writes, or has
1793			 * the file grown beyond our last write? */
1794			if (nfsi->nrequests == 0 || new_isize > cur_isize) {
1795				i_size_write(inode, new_isize);
1796				if (!have_writers)
1797					invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
1798			}
1799			dprintk("NFS: isize change on server for file %s/%ld "
1800					"(%Ld to %Ld)\n",
1801					inode->i_sb->s_id,
1802					inode->i_ino,
1803					(long long)cur_isize,
1804					(long long)new_isize);
1805		}
1806	} else {
1807		nfsi->cache_validity |= save_cache_validity &
1808				(NFS_INO_INVALID_ATTR
1809				| NFS_INO_REVAL_PAGECACHE
1810				| NFS_INO_REVAL_FORCED);
1811		cache_revalidated = false;
1812	}
1813
1814
1815	if (fattr->valid & NFS_ATTR_FATTR_ATIME)
1816		memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime));
1817	else if (server->caps & NFS_CAP_ATIME) {
1818		nfsi->cache_validity |= save_cache_validity &
1819				(NFS_INO_INVALID_ATIME
1820				| NFS_INO_REVAL_FORCED);
1821		cache_revalidated = false;
1822	}
1823
1824	if (fattr->valid & NFS_ATTR_FATTR_MODE) {
1825		if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) {
1826			umode_t newmode = inode->i_mode & S_IFMT;
1827			newmode |= fattr->mode & S_IALLUGO;
1828			inode->i_mode = newmode;
1829			invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1830		}
1831	} else if (server->caps & NFS_CAP_MODE) {
1832		nfsi->cache_validity |= save_cache_validity &
1833				(NFS_INO_INVALID_ATTR
1834				| NFS_INO_INVALID_ACCESS
1835				| NFS_INO_INVALID_ACL
1836				| NFS_INO_REVAL_FORCED);
1837		cache_revalidated = false;
1838	}
1839
1840	if (fattr->valid & NFS_ATTR_FATTR_OWNER) {
1841		if (!uid_eq(inode->i_uid, fattr->uid)) {
1842			invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1843			inode->i_uid = fattr->uid;
1844		}
1845	} else if (server->caps & NFS_CAP_OWNER) {
1846		nfsi->cache_validity |= save_cache_validity &
1847				(NFS_INO_INVALID_ATTR
1848				| NFS_INO_INVALID_ACCESS
1849				| NFS_INO_INVALID_ACL
1850				| NFS_INO_REVAL_FORCED);
1851		cache_revalidated = false;
1852	}
1853
1854	if (fattr->valid & NFS_ATTR_FATTR_GROUP) {
1855		if (!gid_eq(inode->i_gid, fattr->gid)) {
1856			invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1857			inode->i_gid = fattr->gid;
1858		}
1859	} else if (server->caps & NFS_CAP_OWNER_GROUP) {
1860		nfsi->cache_validity |= save_cache_validity &
1861				(NFS_INO_INVALID_ATTR
1862				| NFS_INO_INVALID_ACCESS
1863				| NFS_INO_INVALID_ACL
1864				| NFS_INO_REVAL_FORCED);
1865		cache_revalidated = false;
1866	}
1867
1868	if (fattr->valid & NFS_ATTR_FATTR_NLINK) {
1869		if (inode->i_nlink != fattr->nlink) {
1870			invalid |= NFS_INO_INVALID_ATTR;
1871			if (S_ISDIR(inode->i_mode))
1872				invalid |= NFS_INO_INVALID_DATA;
1873			set_nlink(inode, fattr->nlink);
1874		}
1875	} else if (server->caps & NFS_CAP_NLINK) {
1876		nfsi->cache_validity |= save_cache_validity &
1877				(NFS_INO_INVALID_ATTR
1878				| NFS_INO_REVAL_FORCED);
1879		cache_revalidated = false;
1880	}
1881
1882	if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
1883		/*
1884		 * report the blocks in 512byte units
1885		 */
1886		inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
1887	} else if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
1888		inode->i_blocks = fattr->du.nfs2.blocks;
1889	else
1890		cache_revalidated = false;
1891
1892	/* Update attrtimeo value if we're out of the unstable period */
1893	if (invalid & NFS_INO_INVALID_ATTR) {
1894		nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE);
1895		nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
1896		nfsi->attrtimeo_timestamp = now;
1897		/* Set barrier to be more recent than all outstanding updates */
1898		nfsi->attr_gencount = nfs_inc_attr_generation_counter();
1899	} else {
1900		if (cache_revalidated) {
1901			if (!time_in_range_open(now, nfsi->attrtimeo_timestamp,
1902				nfsi->attrtimeo_timestamp + nfsi->attrtimeo)) {
1903				nfsi->attrtimeo <<= 1;
1904				if (nfsi->attrtimeo > NFS_MAXATTRTIMEO(inode))
1905					nfsi->attrtimeo = NFS_MAXATTRTIMEO(inode);
1906			}
1907			nfsi->attrtimeo_timestamp = now;
1908		}
1909		/* Set the barrier to be more recent than this fattr */
1910		if ((long)fattr->gencount - (long)nfsi->attr_gencount > 0)
1911			nfsi->attr_gencount = fattr->gencount;
1912	}
1913
1914	/* Don't declare attrcache up to date if there were no attrs! */
1915	if (cache_revalidated)
1916		invalid &= ~NFS_INO_INVALID_ATTR;
1917
1918	/* Don't invalidate the data if we were to blame */
1919	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)
1920				|| S_ISLNK(inode->i_mode)))
1921		invalid &= ~NFS_INO_INVALID_DATA;
1922	if (!NFS_PROTO(inode)->have_delegation(inode, FMODE_READ) ||
1923			(save_cache_validity & NFS_INO_REVAL_FORCED))
1924		nfs_set_cache_invalid(inode, invalid);
1925
1926	return 0;
1927 out_err:
1928	/*
1929	 * No need to worry about unhashing the dentry, as the
1930	 * lookup validation will know that the inode is bad.
1931	 * (But we fall through to invalidate the caches.)
1932	 */
1933	nfs_invalidate_inode(inode);
1934	return -ESTALE;
1935}
1936
1937struct inode *nfs_alloc_inode(struct super_block *sb)
1938{
1939	struct nfs_inode *nfsi;
1940	nfsi = kmem_cache_alloc(nfs_inode_cachep, GFP_KERNEL);
1941	if (!nfsi)
1942		return NULL;
1943	nfsi->flags = 0UL;
1944	nfsi->cache_validity = 0UL;
1945#if IS_ENABLED(CONFIG_NFS_V4)
1946	nfsi->nfs4_acl = NULL;
1947#endif /* CONFIG_NFS_V4 */
1948	return &nfsi->vfs_inode;
1949}
1950EXPORT_SYMBOL_GPL(nfs_alloc_inode);
1951
1952static void nfs_i_callback(struct rcu_head *head)
1953{
1954	struct inode *inode = container_of(head, struct inode, i_rcu);
1955	kmem_cache_free(nfs_inode_cachep, NFS_I(inode));
1956}
1957
1958void nfs_destroy_inode(struct inode *inode)
1959{
1960	call_rcu(&inode->i_rcu, nfs_i_callback);
1961}
1962EXPORT_SYMBOL_GPL(nfs_destroy_inode);
1963
1964static inline void nfs4_init_once(struct nfs_inode *nfsi)
1965{
1966#if IS_ENABLED(CONFIG_NFS_V4)
1967	INIT_LIST_HEAD(&nfsi->open_states);
1968	nfsi->delegation = NULL;
1969	init_rwsem(&nfsi->rwsem);
1970	nfsi->layout = NULL;
1971#endif
1972}
1973
1974static void init_once(void *foo)
1975{
1976	struct nfs_inode *nfsi = (struct nfs_inode *) foo;
1977
1978	inode_init_once(&nfsi->vfs_inode);
1979	INIT_LIST_HEAD(&nfsi->open_files);
1980	INIT_LIST_HEAD(&nfsi->access_cache_entry_lru);
1981	INIT_LIST_HEAD(&nfsi->access_cache_inode_lru);
1982	INIT_LIST_HEAD(&nfsi->commit_info.list);
1983	nfsi->nrequests = 0;
1984	nfsi->commit_info.ncommit = 0;
1985	atomic_set(&nfsi->commit_info.rpcs_out, 0);
1986	init_rwsem(&nfsi->rmdir_sem);
 
 
1987	nfs4_init_once(nfsi);
1988}
1989
1990static int __init nfs_init_inodecache(void)
1991{
1992	nfs_inode_cachep = kmem_cache_create("nfs_inode_cache",
1993					     sizeof(struct nfs_inode),
1994					     0, (SLAB_RECLAIM_ACCOUNT|
1995						SLAB_MEM_SPREAD|SLAB_ACCOUNT),
1996					     init_once);
1997	if (nfs_inode_cachep == NULL)
1998		return -ENOMEM;
1999
2000	return 0;
2001}
2002
2003static void nfs_destroy_inodecache(void)
2004{
2005	/*
2006	 * Make sure all delayed rcu free inodes are flushed before we
2007	 * destroy cache.
2008	 */
2009	rcu_barrier();
2010	kmem_cache_destroy(nfs_inode_cachep);
2011}
2012
2013struct workqueue_struct *nfsiod_workqueue;
2014EXPORT_SYMBOL_GPL(nfsiod_workqueue);
2015
2016/*
2017 * start up the nfsiod workqueue
2018 */
2019static int nfsiod_start(void)
2020{
2021	struct workqueue_struct *wq;
2022	dprintk("RPC:       creating workqueue nfsiod\n");
2023	wq = alloc_workqueue("nfsiod", WQ_MEM_RECLAIM, 0);
2024	if (wq == NULL)
2025		return -ENOMEM;
2026	nfsiod_workqueue = wq;
2027	return 0;
2028}
2029
2030/*
2031 * Destroy the nfsiod workqueue
2032 */
2033static void nfsiod_stop(void)
2034{
2035	struct workqueue_struct *wq;
2036
2037	wq = nfsiod_workqueue;
2038	if (wq == NULL)
2039		return;
2040	nfsiod_workqueue = NULL;
2041	destroy_workqueue(wq);
2042}
2043
2044unsigned int nfs_net_id;
2045EXPORT_SYMBOL_GPL(nfs_net_id);
2046
2047static int nfs_net_init(struct net *net)
2048{
2049	nfs_clients_init(net);
2050	return nfs_fs_proc_net_init(net);
2051}
2052
2053static void nfs_net_exit(struct net *net)
2054{
2055	nfs_fs_proc_net_exit(net);
2056	nfs_cleanup_cb_ident_idr(net);
2057}
2058
2059static struct pernet_operations nfs_net_ops = {
2060	.init = nfs_net_init,
2061	.exit = nfs_net_exit,
2062	.id   = &nfs_net_id,
2063	.size = sizeof(struct nfs_net),
2064};
2065
2066/*
2067 * Initialize NFS
2068 */
2069static int __init init_nfs_fs(void)
2070{
2071	int err;
2072
2073	err = register_pernet_subsys(&nfs_net_ops);
2074	if (err < 0)
2075		goto out9;
2076
2077	err = nfs_fscache_register();
2078	if (err < 0)
2079		goto out8;
2080
2081	err = nfsiod_start();
2082	if (err)
2083		goto out7;
2084
2085	err = nfs_fs_proc_init();
2086	if (err)
2087		goto out6;
2088
2089	err = nfs_init_nfspagecache();
2090	if (err)
2091		goto out5;
2092
2093	err = nfs_init_inodecache();
2094	if (err)
2095		goto out4;
2096
2097	err = nfs_init_readpagecache();
2098	if (err)
2099		goto out3;
2100
2101	err = nfs_init_writepagecache();
2102	if (err)
2103		goto out2;
2104
2105	err = nfs_init_directcache();
2106	if (err)
2107		goto out1;
2108
2109	rpc_proc_register(&init_net, &nfs_rpcstat);
2110
2111	err = register_nfs_fs();
2112	if (err)
2113		goto out0;
2114
2115	return 0;
2116out0:
2117	rpc_proc_unregister(&init_net, "nfs");
2118	nfs_destroy_directcache();
2119out1:
2120	nfs_destroy_writepagecache();
2121out2:
2122	nfs_destroy_readpagecache();
2123out3:
2124	nfs_destroy_inodecache();
2125out4:
2126	nfs_destroy_nfspagecache();
2127out5:
2128	nfs_fs_proc_exit();
2129out6:
2130	nfsiod_stop();
2131out7:
2132	nfs_fscache_unregister();
2133out8:
2134	unregister_pernet_subsys(&nfs_net_ops);
2135out9:
2136	return err;
2137}
2138
2139static void __exit exit_nfs_fs(void)
2140{
2141	nfs_destroy_directcache();
2142	nfs_destroy_writepagecache();
2143	nfs_destroy_readpagecache();
2144	nfs_destroy_inodecache();
2145	nfs_destroy_nfspagecache();
2146	nfs_fscache_unregister();
2147	unregister_pernet_subsys(&nfs_net_ops);
2148	rpc_proc_unregister(&init_net, "nfs");
2149	unregister_nfs_fs();
2150	nfs_fs_proc_exit();
2151	nfsiod_stop();
2152}
2153
2154/* Not quite true; I just maintain it */
2155MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
2156MODULE_LICENSE("GPL");
2157module_param(enable_ino64, bool, 0644);
2158
2159module_init(init_nfs_fs)
2160module_exit(exit_nfs_fs)
v4.6
   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/vfs.h>
  36#include <linux/inet.h>
  37#include <linux/nfs_xdr.h>
  38#include <linux/slab.h>
  39#include <linux/compat.h>
  40#include <linux/freezer.h>
  41
  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 "pnfs.h"
  51#include "nfs.h"
  52#include "netns.h"
  53
  54#include "nfstrace.h"
  55
  56#define NFSDBG_FACILITY		NFSDBG_VFS
  57
  58#define NFS_64_BIT_INODE_NUMBERS_ENABLED	1
  59
  60/* Default is to see 64-bit inode numbers */
  61static bool enable_ino64 = NFS_64_BIT_INODE_NUMBERS_ENABLED;
  62
  63static void nfs_invalidate_inode(struct inode *);
  64static int nfs_update_inode(struct inode *, struct nfs_fattr *);
  65
  66static struct kmem_cache * nfs_inode_cachep;
  67
  68static inline unsigned long
  69nfs_fattr_to_ino_t(struct nfs_fattr *fattr)
  70{
  71	return nfs_fileid_to_ino_t(fattr->fileid);
  72}
  73
  74static int nfs_wait_killable(int mode)
  75{
  76	freezable_schedule_unsafe();
  77	if (signal_pending_state(mode, current))
  78		return -ERESTARTSYS;
  79	return 0;
  80}
  81
  82int nfs_wait_bit_killable(struct wait_bit_key *key, int mode)
  83{
  84	return nfs_wait_killable(mode);
  85}
  86EXPORT_SYMBOL_GPL(nfs_wait_bit_killable);
  87
  88int nfs_wait_atomic_killable(atomic_t *p)
  89{
  90	return nfs_wait_killable(TASK_KILLABLE);
  91}
  92
  93/**
  94 * nfs_compat_user_ino64 - returns the user-visible inode number
  95 * @fileid: 64-bit fileid
  96 *
  97 * This function returns a 32-bit inode number if the boot parameter
  98 * nfs.enable_ino64 is zero.
  99 */
 100u64 nfs_compat_user_ino64(u64 fileid)
 101{
 102#ifdef CONFIG_COMPAT
 103	compat_ulong_t ino;
 104#else	
 105	unsigned long ino;
 106#endif
 107
 108	if (enable_ino64)
 109		return fileid;
 110	ino = fileid;
 111	if (sizeof(ino) < sizeof(fileid))
 112		ino ^= fileid >> (sizeof(fileid)-sizeof(ino)) * 8;
 113	return ino;
 114}
 115
 116int nfs_drop_inode(struct inode *inode)
 117{
 118	return NFS_STALE(inode) || generic_drop_inode(inode);
 119}
 120EXPORT_SYMBOL_GPL(nfs_drop_inode);
 121
 122void nfs_clear_inode(struct inode *inode)
 123{
 124	/*
 125	 * The following should never happen...
 126	 */
 127	WARN_ON_ONCE(nfs_have_writebacks(inode));
 128	WARN_ON_ONCE(!list_empty(&NFS_I(inode)->open_files));
 129	nfs_zap_acl_cache(inode);
 130	nfs_access_zap_cache(inode);
 131	nfs_fscache_clear_inode(inode);
 132}
 133EXPORT_SYMBOL_GPL(nfs_clear_inode);
 134
 135void nfs_evict_inode(struct inode *inode)
 136{
 137	truncate_inode_pages_final(&inode->i_data);
 138	clear_inode(inode);
 139	nfs_clear_inode(inode);
 140}
 141
 142int nfs_sync_inode(struct inode *inode)
 143{
 144	inode_dio_wait(inode);
 145	return nfs_wb_all(inode);
 146}
 147EXPORT_SYMBOL_GPL(nfs_sync_inode);
 148
 149/**
 150 * nfs_sync_mapping - helper to flush all mmapped dirty data to disk
 151 */
 152int nfs_sync_mapping(struct address_space *mapping)
 153{
 154	int ret = 0;
 155
 156	if (mapping->nrpages != 0) {
 157		unmap_mapping_range(mapping, 0, 0, 0);
 158		ret = nfs_wb_all(mapping->host);
 159	}
 160	return ret;
 161}
 162
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 163static void nfs_set_cache_invalid(struct inode *inode, unsigned long flags)
 164{
 165	struct nfs_inode *nfsi = NFS_I(inode);
 166
 167	if (inode->i_mapping->nrpages == 0)
 168		flags &= ~NFS_INO_INVALID_DATA;
 169	nfsi->cache_validity |= flags;
 170	if (flags & NFS_INO_INVALID_DATA)
 171		nfs_fscache_invalidate(inode);
 172}
 173
 174/*
 175 * Invalidate the local caches
 176 */
 177static void nfs_zap_caches_locked(struct inode *inode)
 178{
 179	struct nfs_inode *nfsi = NFS_I(inode);
 180	int mode = inode->i_mode;
 181
 182	nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE);
 183
 184	nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
 185	nfsi->attrtimeo_timestamp = jiffies;
 186
 187	memset(NFS_I(inode)->cookieverf, 0, sizeof(NFS_I(inode)->cookieverf));
 188	if (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) {
 189		nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR
 190					| NFS_INO_INVALID_DATA
 191					| NFS_INO_INVALID_ACCESS
 192					| NFS_INO_INVALID_ACL
 193					| NFS_INO_REVAL_PAGECACHE);
 194	} else
 195		nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR
 196					| NFS_INO_INVALID_ACCESS
 197					| NFS_INO_INVALID_ACL
 198					| NFS_INO_REVAL_PAGECACHE);
 199	nfs_zap_label_cache_locked(nfsi);
 200}
 201
 202void nfs_zap_caches(struct inode *inode)
 203{
 204	spin_lock(&inode->i_lock);
 205	nfs_zap_caches_locked(inode);
 206	spin_unlock(&inode->i_lock);
 207}
 208
 209void nfs_zap_mapping(struct inode *inode, struct address_space *mapping)
 210{
 211	if (mapping->nrpages != 0) {
 212		spin_lock(&inode->i_lock);
 213		nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA);
 214		spin_unlock(&inode->i_lock);
 215	}
 216}
 217
 218void nfs_zap_acl_cache(struct inode *inode)
 219{
 220	void (*clear_acl_cache)(struct inode *);
 221
 222	clear_acl_cache = NFS_PROTO(inode)->clear_acl_cache;
 223	if (clear_acl_cache != NULL)
 224		clear_acl_cache(inode);
 225	spin_lock(&inode->i_lock);
 226	NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_ACL;
 227	spin_unlock(&inode->i_lock);
 228}
 229EXPORT_SYMBOL_GPL(nfs_zap_acl_cache);
 230
 231void nfs_invalidate_atime(struct inode *inode)
 232{
 233	spin_lock(&inode->i_lock);
 234	nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATIME);
 235	spin_unlock(&inode->i_lock);
 236}
 237EXPORT_SYMBOL_GPL(nfs_invalidate_atime);
 238
 239/*
 240 * Invalidate, but do not unhash, the inode.
 241 * NB: must be called with inode->i_lock held!
 242 */
 243static void nfs_invalidate_inode(struct inode *inode)
 244{
 245	set_bit(NFS_INO_STALE, &NFS_I(inode)->flags);
 246	nfs_zap_caches_locked(inode);
 247}
 248
 249struct nfs_find_desc {
 250	struct nfs_fh		*fh;
 251	struct nfs_fattr	*fattr;
 252};
 253
 254/*
 255 * In NFSv3 we can have 64bit inode numbers. In order to support
 256 * this, and re-exported directories (also seen in NFSv2)
 257 * we are forced to allow 2 different inodes to have the same
 258 * i_ino.
 259 */
 260static int
 261nfs_find_actor(struct inode *inode, void *opaque)
 262{
 263	struct nfs_find_desc	*desc = (struct nfs_find_desc *)opaque;
 264	struct nfs_fh		*fh = desc->fh;
 265	struct nfs_fattr	*fattr = desc->fattr;
 266
 267	if (NFS_FILEID(inode) != fattr->fileid)
 268		return 0;
 269	if ((S_IFMT & inode->i_mode) != (S_IFMT & fattr->mode))
 270		return 0;
 271	if (nfs_compare_fh(NFS_FH(inode), fh))
 272		return 0;
 273	if (is_bad_inode(inode) || NFS_STALE(inode))
 274		return 0;
 275	return 1;
 276}
 277
 278static int
 279nfs_init_locked(struct inode *inode, void *opaque)
 280{
 281	struct nfs_find_desc	*desc = (struct nfs_find_desc *)opaque;
 282	struct nfs_fattr	*fattr = desc->fattr;
 283
 284	set_nfs_fileid(inode, fattr->fileid);
 
 285	nfs_copy_fh(NFS_FH(inode), desc->fh);
 286	return 0;
 287}
 288
 289#ifdef CONFIG_NFS_V4_SECURITY_LABEL
 290static void nfs_clear_label_invalid(struct inode *inode)
 291{
 292	spin_lock(&inode->i_lock);
 293	NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_LABEL;
 294	spin_unlock(&inode->i_lock);
 295}
 296
 297void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr,
 298					struct nfs4_label *label)
 299{
 300	int error;
 301
 302	if (label == NULL)
 303		return;
 304
 305	if ((fattr->valid & NFS_ATTR_FATTR_V4_SECURITY_LABEL) && inode->i_security) {
 306		error = security_inode_notifysecctx(inode, label->label,
 307				label->len);
 308		if (error)
 309			printk(KERN_ERR "%s() %s %d "
 310					"security_inode_notifysecctx() %d\n",
 311					__func__,
 312					(char *)label->label,
 313					label->len, error);
 314		nfs_clear_label_invalid(inode);
 315	}
 316}
 317
 318struct nfs4_label *nfs4_label_alloc(struct nfs_server *server, gfp_t flags)
 319{
 320	struct nfs4_label *label = NULL;
 321	int minor_version = server->nfs_client->cl_minorversion;
 322
 323	if (minor_version < 2)
 324		return label;
 325
 326	if (!(server->caps & NFS_CAP_SECURITY_LABEL))
 327		return label;
 328
 329	label = kzalloc(sizeof(struct nfs4_label), flags);
 330	if (label == NULL)
 331		return ERR_PTR(-ENOMEM);
 332
 333	label->label = kzalloc(NFS4_MAXLABELLEN, flags);
 334	if (label->label == NULL) {
 335		kfree(label);
 336		return ERR_PTR(-ENOMEM);
 337	}
 338	label->len = NFS4_MAXLABELLEN;
 339
 340	return label;
 341}
 342EXPORT_SYMBOL_GPL(nfs4_label_alloc);
 343#else
 344void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr,
 345					struct nfs4_label *label)
 346{
 347}
 348#endif
 349EXPORT_SYMBOL_GPL(nfs_setsecurity);
 350
 351/*
 352 * This is our front-end to iget that looks up inodes by file handle
 353 * instead of inode number.
 354 */
 355struct inode *
 356nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr, struct nfs4_label *label)
 357{
 358	struct nfs_find_desc desc = {
 359		.fh	= fh,
 360		.fattr	= fattr
 361	};
 362	struct inode *inode = ERR_PTR(-ENOENT);
 363	unsigned long hash;
 364
 365	nfs_attr_check_mountpoint(sb, fattr);
 366
 367	if (nfs_attr_use_mounted_on_fileid(fattr))
 368		fattr->fileid = fattr->mounted_on_fileid;
 369	else if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0)
 370		goto out_no_inode;
 371	if ((fattr->valid & NFS_ATTR_FATTR_TYPE) == 0)
 372		goto out_no_inode;
 373
 374	hash = nfs_fattr_to_ino_t(fattr);
 375
 376	inode = iget5_locked(sb, hash, nfs_find_actor, nfs_init_locked, &desc);
 377	if (inode == NULL) {
 378		inode = ERR_PTR(-ENOMEM);
 379		goto out_no_inode;
 380	}
 381
 382	if (inode->i_state & I_NEW) {
 383		struct nfs_inode *nfsi = NFS_I(inode);
 384		unsigned long now = jiffies;
 385
 386		/* We set i_ino for the few things that still rely on it,
 387		 * such as stat(2) */
 388		inode->i_ino = hash;
 389
 390		/* We can't support update_atime(), since the server will reset it */
 391		inode->i_flags |= S_NOATIME|S_NOCMTIME;
 392		inode->i_mode = fattr->mode;
 393		if ((fattr->valid & NFS_ATTR_FATTR_MODE) == 0
 394				&& nfs_server_capable(inode, NFS_CAP_MODE))
 395			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 396		/* Why so? Because we want revalidate for devices/FIFOs, and
 397		 * that's precisely what we have in nfs_file_inode_operations.
 398		 */
 399		inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->file_inode_ops;
 400		if (S_ISREG(inode->i_mode)) {
 401			inode->i_fop = NFS_SB(sb)->nfs_client->rpc_ops->file_ops;
 402			inode->i_data.a_ops = &nfs_file_aops;
 403		} else if (S_ISDIR(inode->i_mode)) {
 404			inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->dir_inode_ops;
 405			inode->i_fop = &nfs_dir_operations;
 406			inode->i_data.a_ops = &nfs_dir_aops;
 407			/* Deal with crossing mountpoints */
 408			if (fattr->valid & NFS_ATTR_FATTR_MOUNTPOINT ||
 409					fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) {
 410				if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)
 411					inode->i_op = &nfs_referral_inode_operations;
 412				else
 413					inode->i_op = &nfs_mountpoint_inode_operations;
 414				inode->i_fop = NULL;
 415				inode->i_flags |= S_AUTOMOUNT;
 416			}
 417		} else if (S_ISLNK(inode->i_mode)) {
 418			inode->i_op = &nfs_symlink_inode_operations;
 419			inode_nohighmem(inode);
 420		} else
 421			init_special_inode(inode, inode->i_mode, fattr->rdev);
 422
 423		memset(&inode->i_atime, 0, sizeof(inode->i_atime));
 424		memset(&inode->i_mtime, 0, sizeof(inode->i_mtime));
 425		memset(&inode->i_ctime, 0, sizeof(inode->i_ctime));
 426		inode->i_version = 0;
 427		inode->i_size = 0;
 428		clear_nlink(inode);
 429		inode->i_uid = make_kuid(&init_user_ns, -2);
 430		inode->i_gid = make_kgid(&init_user_ns, -2);
 431		inode->i_blocks = 0;
 432		memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf));
 433		nfsi->write_io = 0;
 434		nfsi->read_io = 0;
 435
 436		nfsi->read_cache_jiffies = fattr->time_start;
 437		nfsi->attr_gencount = fattr->gencount;
 438		if (fattr->valid & NFS_ATTR_FATTR_ATIME)
 439			inode->i_atime = fattr->atime;
 440		else if (nfs_server_capable(inode, NFS_CAP_ATIME))
 441			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 442		if (fattr->valid & NFS_ATTR_FATTR_MTIME)
 443			inode->i_mtime = fattr->mtime;
 444		else if (nfs_server_capable(inode, NFS_CAP_MTIME))
 445			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 446		if (fattr->valid & NFS_ATTR_FATTR_CTIME)
 447			inode->i_ctime = fattr->ctime;
 448		else if (nfs_server_capable(inode, NFS_CAP_CTIME))
 449			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 450		if (fattr->valid & NFS_ATTR_FATTR_CHANGE)
 451			inode->i_version = fattr->change_attr;
 452		else
 453			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR
 454				| NFS_INO_REVAL_PAGECACHE);
 455		if (fattr->valid & NFS_ATTR_FATTR_SIZE)
 456			inode->i_size = nfs_size_to_loff_t(fattr->size);
 457		else
 458			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR
 459				| NFS_INO_REVAL_PAGECACHE);
 460		if (fattr->valid & NFS_ATTR_FATTR_NLINK)
 461			set_nlink(inode, fattr->nlink);
 462		else if (nfs_server_capable(inode, NFS_CAP_NLINK))
 463			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 464		if (fattr->valid & NFS_ATTR_FATTR_OWNER)
 465			inode->i_uid = fattr->uid;
 466		else if (nfs_server_capable(inode, NFS_CAP_OWNER))
 467			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 468		if (fattr->valid & NFS_ATTR_FATTR_GROUP)
 469			inode->i_gid = fattr->gid;
 470		else if (nfs_server_capable(inode, NFS_CAP_OWNER_GROUP))
 471			nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR);
 472		if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
 473			inode->i_blocks = fattr->du.nfs2.blocks;
 474		if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
 475			/*
 476			 * report the blocks in 512byte units
 477			 */
 478			inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
 479		}
 480
 481		nfs_setsecurity(inode, fattr, label);
 482
 483		nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
 484		nfsi->attrtimeo_timestamp = now;
 485		nfsi->access_cache = RB_ROOT;
 486
 487		nfs_fscache_init_inode(inode);
 488
 489		unlock_new_inode(inode);
 490	} else
 491		nfs_refresh_inode(inode, fattr);
 492	dprintk("NFS: nfs_fhget(%s/%Lu fh_crc=0x%08x ct=%d)\n",
 493		inode->i_sb->s_id,
 494		(unsigned long long)NFS_FILEID(inode),
 495		nfs_display_fhandle_hash(fh),
 496		atomic_read(&inode->i_count));
 497
 498out:
 499	return inode;
 500
 501out_no_inode:
 502	dprintk("nfs_fhget: iget failed with error %ld\n", PTR_ERR(inode));
 503	goto out;
 504}
 505EXPORT_SYMBOL_GPL(nfs_fhget);
 506
 507#define NFS_VALID_ATTRS (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_SIZE|ATTR_ATIME|ATTR_ATIME_SET|ATTR_MTIME|ATTR_MTIME_SET|ATTR_FILE|ATTR_OPEN)
 508
 509int
 510nfs_setattr(struct dentry *dentry, struct iattr *attr)
 511{
 512	struct inode *inode = d_inode(dentry);
 513	struct nfs_fattr *fattr;
 514	int error = 0;
 515
 516	nfs_inc_stats(inode, NFSIOS_VFSSETATTR);
 517
 518	/* skip mode change if it's just for clearing setuid/setgid */
 519	if (attr->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID))
 520		attr->ia_valid &= ~ATTR_MODE;
 521
 522	if (attr->ia_valid & ATTR_SIZE) {
 523		BUG_ON(!S_ISREG(inode->i_mode));
 524
 525		error = inode_newsize_ok(inode, attr->ia_size);
 526		if (error)
 527			return error;
 528
 529		if (attr->ia_size == i_size_read(inode))
 530			attr->ia_valid &= ~ATTR_SIZE;
 531	}
 532
 533	/* Optimization: if the end result is no change, don't RPC */
 534	attr->ia_valid &= NFS_VALID_ATTRS;
 535	if ((attr->ia_valid & ~(ATTR_FILE|ATTR_OPEN)) == 0)
 536		return 0;
 537
 538	trace_nfs_setattr_enter(inode);
 539
 540	/* Write all dirty data */
 541	if (S_ISREG(inode->i_mode))
 542		nfs_sync_inode(inode);
 543
 544	fattr = nfs_alloc_fattr();
 545	if (fattr == NULL) {
 546		error = -ENOMEM;
 547		goto out;
 548	}
 549
 550	/*
 551	 * Return any delegations if we're going to change ACLs
 552	 */
 553	if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0)
 554		NFS_PROTO(inode)->return_delegation(inode);
 555	error = NFS_PROTO(inode)->setattr(dentry, fattr, attr);
 556	if (error == 0)
 557		error = nfs_refresh_inode(inode, fattr);
 558	nfs_free_fattr(fattr);
 559out:
 560	trace_nfs_setattr_exit(inode, error);
 561	return error;
 562}
 563EXPORT_SYMBOL_GPL(nfs_setattr);
 564
 565/**
 566 * nfs_vmtruncate - unmap mappings "freed" by truncate() syscall
 567 * @inode: inode of the file used
 568 * @offset: file offset to start truncating
 569 *
 570 * This is a copy of the common vmtruncate, but with the locking
 571 * corrected to take into account the fact that NFS requires
 572 * inode->i_size to be updated under the inode->i_lock.
 573 * Note: must be called with inode->i_lock held!
 574 */
 575static int nfs_vmtruncate(struct inode * inode, loff_t offset)
 576{
 577	int err;
 578
 579	err = inode_newsize_ok(inode, offset);
 580	if (err)
 581		goto out;
 582
 583	i_size_write(inode, offset);
 584	/* Optimisation */
 585	if (offset == 0)
 586		NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_DATA;
 587
 588	spin_unlock(&inode->i_lock);
 589	truncate_pagecache(inode, offset);
 590	spin_lock(&inode->i_lock);
 591out:
 592	return err;
 593}
 594
 595/**
 596 * nfs_setattr_update_inode - Update inode metadata after a setattr call.
 597 * @inode: pointer to struct inode
 598 * @attr: pointer to struct iattr
 599 *
 600 * Note: we do this in the *proc.c in order to ensure that
 601 *       it works for things like exclusive creates too.
 602 */
 603void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr,
 604		struct nfs_fattr *fattr)
 605{
 606	/* Barrier: bump the attribute generation count. */
 607	nfs_fattr_set_barrier(fattr);
 608
 609	spin_lock(&inode->i_lock);
 610	NFS_I(inode)->attr_gencount = fattr->gencount;
 611	if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) {
 612		if ((attr->ia_valid & ATTR_MODE) != 0) {
 613			int mode = attr->ia_mode & S_IALLUGO;
 614			mode |= inode->i_mode & ~S_IALLUGO;
 615			inode->i_mode = mode;
 616		}
 617		if ((attr->ia_valid & ATTR_UID) != 0)
 618			inode->i_uid = attr->ia_uid;
 619		if ((attr->ia_valid & ATTR_GID) != 0)
 620			inode->i_gid = attr->ia_gid;
 621		nfs_set_cache_invalid(inode, NFS_INO_INVALID_ACCESS
 622				| NFS_INO_INVALID_ACL);
 623	}
 624	if ((attr->ia_valid & ATTR_SIZE) != 0) {
 625		nfs_inc_stats(inode, NFSIOS_SETATTRTRUNC);
 626		nfs_vmtruncate(inode, attr->ia_size);
 627	}
 628	if (fattr->valid)
 629		nfs_update_inode(inode, fattr);
 630	else
 631		NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATTR;
 632	spin_unlock(&inode->i_lock);
 633}
 634EXPORT_SYMBOL_GPL(nfs_setattr_update_inode);
 635
 636static void nfs_request_parent_use_readdirplus(struct dentry *dentry)
 637{
 638	struct dentry *parent;
 639
 
 
 640	parent = dget_parent(dentry);
 641	nfs_force_use_readdirplus(d_inode(parent));
 642	dput(parent);
 643}
 644
 
 
 
 
 
 
 
 
 
 
 
 645static bool nfs_need_revalidate_inode(struct inode *inode)
 646{
 647	if (NFS_I(inode)->cache_validity &
 648			(NFS_INO_INVALID_ATTR|NFS_INO_INVALID_LABEL))
 649		return true;
 650	if (nfs_attribute_cache_expired(inode))
 651		return true;
 652	return false;
 653}
 654
 655int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
 656{
 657	struct inode *inode = d_inode(dentry);
 658	int need_atime = NFS_I(inode)->cache_validity & NFS_INO_INVALID_ATIME;
 659	int err = 0;
 660
 661	trace_nfs_getattr_enter(inode);
 662	/* Flush out writes to the server in order to update c/mtime.  */
 663	if (S_ISREG(inode->i_mode)) {
 664		inode_lock(inode);
 665		err = nfs_sync_inode(inode);
 666		inode_unlock(inode);
 667		if (err)
 668			goto out;
 669	}
 670
 671	/*
 672	 * We may force a getattr if the user cares about atime.
 673	 *
 674	 * Note that we only have to check the vfsmount flags here:
 675	 *  - NFS always sets S_NOATIME by so checking it would give a
 676	 *    bogus result
 677	 *  - NFS never sets MS_NOATIME or MS_NODIRATIME so there is
 678	 *    no point in checking those.
 679	 */
 680 	if ((mnt->mnt_flags & MNT_NOATIME) ||
 681 	    ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode)))
 682		need_atime = 0;
 683
 684	if (need_atime || nfs_need_revalidate_inode(inode)) {
 685		struct nfs_server *server = NFS_SERVER(inode);
 686
 687		if (server->caps & NFS_CAP_READDIRPLUS)
 688			nfs_request_parent_use_readdirplus(dentry);
 689		err = __nfs_revalidate_inode(server, inode);
 690	}
 
 691	if (!err) {
 692		generic_fillattr(inode, stat);
 693		stat->ino = nfs_compat_user_ino64(NFS_FILEID(inode));
 694		if (S_ISDIR(inode->i_mode))
 695			stat->blksize = NFS_SERVER(inode)->dtsize;
 696	}
 697out:
 698	trace_nfs_getattr_exit(inode, err);
 699	return err;
 700}
 701EXPORT_SYMBOL_GPL(nfs_getattr);
 702
 703static void nfs_init_lock_context(struct nfs_lock_context *l_ctx)
 704{
 705	atomic_set(&l_ctx->count, 1);
 706	l_ctx->lockowner.l_owner = current->files;
 707	l_ctx->lockowner.l_pid = current->tgid;
 708	INIT_LIST_HEAD(&l_ctx->list);
 709	atomic_set(&l_ctx->io_count, 0);
 710}
 711
 712static struct nfs_lock_context *__nfs_find_lock_context(struct nfs_open_context *ctx)
 713{
 714	struct nfs_lock_context *head = &ctx->lock_context;
 715	struct nfs_lock_context *pos = head;
 716
 717	do {
 718		if (pos->lockowner.l_owner != current->files)
 719			continue;
 720		if (pos->lockowner.l_pid != current->tgid)
 721			continue;
 722		atomic_inc(&pos->count);
 723		return pos;
 724	} while ((pos = list_entry(pos->list.next, typeof(*pos), list)) != head);
 725	return NULL;
 726}
 727
 728struct nfs_lock_context *nfs_get_lock_context(struct nfs_open_context *ctx)
 729{
 730	struct nfs_lock_context *res, *new = NULL;
 731	struct inode *inode = d_inode(ctx->dentry);
 732
 733	spin_lock(&inode->i_lock);
 734	res = __nfs_find_lock_context(ctx);
 735	if (res == NULL) {
 736		spin_unlock(&inode->i_lock);
 737		new = kmalloc(sizeof(*new), GFP_KERNEL);
 738		if (new == NULL)
 739			return ERR_PTR(-ENOMEM);
 740		nfs_init_lock_context(new);
 741		spin_lock(&inode->i_lock);
 742		res = __nfs_find_lock_context(ctx);
 743		if (res == NULL) {
 744			list_add_tail(&new->list, &ctx->lock_context.list);
 745			new->open_context = ctx;
 746			res = new;
 747			new = NULL;
 748		}
 749	}
 750	spin_unlock(&inode->i_lock);
 751	kfree(new);
 752	return res;
 753}
 754EXPORT_SYMBOL_GPL(nfs_get_lock_context);
 755
 756void nfs_put_lock_context(struct nfs_lock_context *l_ctx)
 757{
 758	struct nfs_open_context *ctx = l_ctx->open_context;
 759	struct inode *inode = d_inode(ctx->dentry);
 760
 761	if (!atomic_dec_and_lock(&l_ctx->count, &inode->i_lock))
 762		return;
 763	list_del(&l_ctx->list);
 764	spin_unlock(&inode->i_lock);
 765	kfree(l_ctx);
 766}
 767EXPORT_SYMBOL_GPL(nfs_put_lock_context);
 768
 769/**
 770 * nfs_close_context - Common close_context() routine NFSv2/v3
 771 * @ctx: pointer to context
 772 * @is_sync: is this a synchronous close
 773 *
 774 * Ensure that the attributes are up to date if we're mounted
 775 * with close-to-open semantics and we have cached data that will
 776 * need to be revalidated on open.
 777 */
 778void nfs_close_context(struct nfs_open_context *ctx, int is_sync)
 779{
 780	struct nfs_inode *nfsi;
 781	struct inode *inode;
 782	struct nfs_server *server;
 783
 784	if (!(ctx->mode & FMODE_WRITE))
 785		return;
 786	if (!is_sync)
 787		return;
 788	inode = d_inode(ctx->dentry);
 
 
 789	nfsi = NFS_I(inode);
 790	if (inode->i_mapping->nrpages == 0)
 791		return;
 792	if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
 793		return;
 794	if (!list_empty(&nfsi->open_files))
 795		return;
 796	server = NFS_SERVER(inode);
 797	if (server->flags & NFS_MOUNT_NOCTO)
 798		return;
 799	nfs_revalidate_inode(server, inode);
 800}
 801EXPORT_SYMBOL_GPL(nfs_close_context);
 802
 803struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, fmode_t f_mode)
 
 
 804{
 805	struct nfs_open_context *ctx;
 806	struct rpc_cred *cred = rpc_lookup_cred();
 807	if (IS_ERR(cred))
 808		return ERR_CAST(cred);
 809
 810	ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
 811	if (!ctx) {
 812		put_rpccred(cred);
 813		return ERR_PTR(-ENOMEM);
 814	}
 815	nfs_sb_active(dentry->d_sb);
 816	ctx->dentry = dget(dentry);
 817	ctx->cred = cred;
 818	ctx->state = NULL;
 819	ctx->mode = f_mode;
 820	ctx->flags = 0;
 821	ctx->error = 0;
 
 822	nfs_init_lock_context(&ctx->lock_context);
 823	ctx->lock_context.open_context = ctx;
 824	INIT_LIST_HEAD(&ctx->list);
 825	ctx->mdsthreshold = NULL;
 826	return ctx;
 827}
 828EXPORT_SYMBOL_GPL(alloc_nfs_open_context);
 829
 830struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx)
 831{
 832	if (ctx != NULL)
 833		atomic_inc(&ctx->lock_context.count);
 834	return ctx;
 835}
 836EXPORT_SYMBOL_GPL(get_nfs_open_context);
 837
 838static void __put_nfs_open_context(struct nfs_open_context *ctx, int is_sync)
 839{
 840	struct inode *inode = d_inode(ctx->dentry);
 841	struct super_block *sb = ctx->dentry->d_sb;
 842
 843	if (!list_empty(&ctx->list)) {
 844		if (!atomic_dec_and_lock(&ctx->lock_context.count, &inode->i_lock))
 845			return;
 846		list_del(&ctx->list);
 847		spin_unlock(&inode->i_lock);
 848	} else if (!atomic_dec_and_test(&ctx->lock_context.count))
 849		return;
 850	if (inode != NULL)
 851		NFS_PROTO(inode)->close_context(ctx, is_sync);
 852	if (ctx->cred != NULL)
 853		put_rpccred(ctx->cred);
 854	dput(ctx->dentry);
 855	nfs_sb_deactive(sb);
 856	kfree(ctx->mdsthreshold);
 857	kfree(ctx);
 858}
 859
 860void put_nfs_open_context(struct nfs_open_context *ctx)
 861{
 862	__put_nfs_open_context(ctx, 0);
 863}
 864EXPORT_SYMBOL_GPL(put_nfs_open_context);
 865
 866static void put_nfs_open_context_sync(struct nfs_open_context *ctx)
 867{
 868	__put_nfs_open_context(ctx, 1);
 869}
 870
 871/*
 872 * Ensure that mmap has a recent RPC credential for use when writing out
 873 * shared pages
 874 */
 875void nfs_inode_attach_open_context(struct nfs_open_context *ctx)
 876{
 877	struct inode *inode = d_inode(ctx->dentry);
 878	struct nfs_inode *nfsi = NFS_I(inode);
 879
 880	spin_lock(&inode->i_lock);
 881	list_add(&ctx->list, &nfsi->open_files);
 
 
 
 882	spin_unlock(&inode->i_lock);
 883}
 884EXPORT_SYMBOL_GPL(nfs_inode_attach_open_context);
 885
 886void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx)
 887{
 888	filp->private_data = get_nfs_open_context(ctx);
 889	if (list_empty(&ctx->list))
 890		nfs_inode_attach_open_context(ctx);
 891}
 892EXPORT_SYMBOL_GPL(nfs_file_set_open_context);
 893
 894/*
 895 * Given an inode, search for an open context with the desired characteristics
 896 */
 897struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, fmode_t mode)
 898{
 899	struct nfs_inode *nfsi = NFS_I(inode);
 900	struct nfs_open_context *pos, *ctx = NULL;
 901
 902	spin_lock(&inode->i_lock);
 903	list_for_each_entry(pos, &nfsi->open_files, list) {
 904		if (cred != NULL && pos->cred != cred)
 905			continue;
 906		if ((pos->mode & (FMODE_READ|FMODE_WRITE)) != mode)
 907			continue;
 908		ctx = get_nfs_open_context(pos);
 909		break;
 910	}
 911	spin_unlock(&inode->i_lock);
 912	return ctx;
 913}
 914
 915void nfs_file_clear_open_context(struct file *filp)
 916{
 917	struct nfs_open_context *ctx = nfs_file_open_context(filp);
 918
 919	if (ctx) {
 920		struct inode *inode = d_inode(ctx->dentry);
 921
 922		/*
 923		 * We fatal error on write before. Try to writeback
 924		 * every page again.
 925		 */
 926		if (ctx->error < 0)
 927			invalidate_inode_pages2(inode->i_mapping);
 928		filp->private_data = NULL;
 929		spin_lock(&inode->i_lock);
 930		list_move_tail(&ctx->list, &NFS_I(inode)->open_files);
 931		spin_unlock(&inode->i_lock);
 932		put_nfs_open_context_sync(ctx);
 933	}
 934}
 935
 936/*
 937 * These allocate and release file read/write context information.
 938 */
 939int nfs_open(struct inode *inode, struct file *filp)
 940{
 941	struct nfs_open_context *ctx;
 942
 943	ctx = alloc_nfs_open_context(file_dentry(filp), filp->f_mode);
 944	if (IS_ERR(ctx))
 945		return PTR_ERR(ctx);
 946	nfs_file_set_open_context(filp, ctx);
 947	put_nfs_open_context(ctx);
 948	nfs_fscache_open_file(inode, filp);
 949	return 0;
 950}
 951
 952/*
 953 * This function is called whenever some part of NFS notices that
 954 * the cached attributes have to be refreshed.
 955 */
 956int
 957__nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
 958{
 959	int		 status = -ESTALE;
 960	struct nfs4_label *label = NULL;
 961	struct nfs_fattr *fattr = NULL;
 962	struct nfs_inode *nfsi = NFS_I(inode);
 963
 964	dfprintk(PAGECACHE, "NFS: revalidating (%s/%Lu)\n",
 965		inode->i_sb->s_id, (unsigned long long)NFS_FILEID(inode));
 966
 967	trace_nfs_revalidate_inode_enter(inode);
 968
 969	if (is_bad_inode(inode))
 970		goto out;
 971	if (NFS_STALE(inode))
 972		goto out;
 973
 
 
 
 
 
 
 
 974	status = -ENOMEM;
 975	fattr = nfs_alloc_fattr();
 976	if (fattr == NULL)
 977		goto out;
 978
 979	nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE);
 980
 981	label = nfs4_label_alloc(NFS_SERVER(inode), GFP_KERNEL);
 982	if (IS_ERR(label)) {
 983		status = PTR_ERR(label);
 984		goto out;
 985	}
 986
 987	status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr, label);
 988	if (status != 0) {
 989		dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) getattr failed, error=%d\n",
 990			 inode->i_sb->s_id,
 991			 (unsigned long long)NFS_FILEID(inode), status);
 992		if (status == -ESTALE) {
 993			nfs_zap_caches(inode);
 994			if (!S_ISDIR(inode->i_mode))
 995				set_bit(NFS_INO_STALE, &NFS_I(inode)->flags);
 996		}
 997		goto err_out;
 998	}
 999
1000	status = nfs_refresh_inode(inode, fattr);
1001	if (status) {
1002		dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) refresh failed, error=%d\n",
1003			 inode->i_sb->s_id,
1004			 (unsigned long long)NFS_FILEID(inode), status);
1005		goto err_out;
1006	}
1007
1008	if (nfsi->cache_validity & NFS_INO_INVALID_ACL)
1009		nfs_zap_acl_cache(inode);
1010
1011	nfs_setsecurity(inode, fattr, label);
1012
1013	dfprintk(PAGECACHE, "NFS: (%s/%Lu) revalidation complete\n",
1014		inode->i_sb->s_id,
1015		(unsigned long long)NFS_FILEID(inode));
1016
1017err_out:
1018	nfs4_label_free(label);
1019out:
1020	nfs_free_fattr(fattr);
1021	trace_nfs_revalidate_inode_exit(inode, status);
1022	return status;
1023}
1024
1025int nfs_attribute_timeout(struct inode *inode)
1026{
1027	struct nfs_inode *nfsi = NFS_I(inode);
1028
1029	return !time_in_range_open(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo);
1030}
1031
1032int nfs_attribute_cache_expired(struct inode *inode)
1033{
1034	if (nfs_have_delegated_attributes(inode))
1035		return 0;
1036	return nfs_attribute_timeout(inode);
1037}
1038
1039/**
1040 * nfs_revalidate_inode - Revalidate the inode attributes
1041 * @server - pointer to nfs_server struct
1042 * @inode - pointer to inode struct
1043 *
1044 * Updates inode attribute information by retrieving the data from the server.
1045 */
1046int nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
1047{
1048	if (!nfs_need_revalidate_inode(inode))
1049		return NFS_STALE(inode) ? -ESTALE : 0;
1050	return __nfs_revalidate_inode(server, inode);
1051}
1052EXPORT_SYMBOL_GPL(nfs_revalidate_inode);
1053
1054int nfs_revalidate_inode_rcu(struct nfs_server *server, struct inode *inode)
1055{
1056	if (!(NFS_I(inode)->cache_validity &
1057			(NFS_INO_INVALID_ATTR|NFS_INO_INVALID_LABEL))
1058			&& !nfs_attribute_cache_expired(inode))
1059		return NFS_STALE(inode) ? -ESTALE : 0;
1060	return -ECHILD;
1061}
1062
1063static int nfs_invalidate_mapping(struct inode *inode, struct address_space *mapping)
1064{
1065	struct nfs_inode *nfsi = NFS_I(inode);
1066	int ret;
1067
1068	if (mapping->nrpages != 0) {
1069		if (S_ISREG(inode->i_mode)) {
1070			unmap_mapping_range(mapping, 0, 0, 0);
1071			ret = nfs_sync_mapping(mapping);
1072			if (ret < 0)
1073				return ret;
1074		}
1075		ret = invalidate_inode_pages2(mapping);
1076		if (ret < 0)
1077			return ret;
1078	}
1079	if (S_ISDIR(inode->i_mode)) {
1080		spin_lock(&inode->i_lock);
1081		memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf));
1082		spin_unlock(&inode->i_lock);
1083	}
1084	nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE);
1085	nfs_fscache_wait_on_invalidate(inode);
1086
1087	dfprintk(PAGECACHE, "NFS: (%s/%Lu) data cache invalidated\n",
1088			inode->i_sb->s_id,
1089			(unsigned long long)NFS_FILEID(inode));
1090	return 0;
1091}
1092
1093static bool nfs_mapping_need_revalidate_inode(struct inode *inode)
1094{
1095	if (nfs_have_delegated_attributes(inode))
1096		return false;
1097	return (NFS_I(inode)->cache_validity & NFS_INO_REVAL_PAGECACHE)
1098		|| nfs_attribute_timeout(inode)
1099		|| NFS_STALE(inode);
1100}
1101
1102int nfs_revalidate_mapping_rcu(struct inode *inode)
1103{
1104	struct nfs_inode *nfsi = NFS_I(inode);
1105	unsigned long *bitlock = &nfsi->flags;
1106	int ret = 0;
1107
1108	if (IS_SWAPFILE(inode))
1109		goto out;
1110	if (nfs_mapping_need_revalidate_inode(inode)) {
1111		ret = -ECHILD;
1112		goto out;
1113	}
1114	spin_lock(&inode->i_lock);
1115	if (test_bit(NFS_INO_INVALIDATING, bitlock) ||
1116	    (nfsi->cache_validity & NFS_INO_INVALID_DATA))
1117		ret = -ECHILD;
1118	spin_unlock(&inode->i_lock);
1119out:
1120	return ret;
1121}
1122
1123/**
1124 * __nfs_revalidate_mapping - Revalidate the pagecache
1125 * @inode - pointer to host inode
1126 * @mapping - pointer to mapping
1127 * @may_lock - take inode->i_mutex?
1128 */
1129static int __nfs_revalidate_mapping(struct inode *inode,
1130		struct address_space *mapping,
1131		bool may_lock)
1132{
1133	struct nfs_inode *nfsi = NFS_I(inode);
1134	unsigned long *bitlock = &nfsi->flags;
1135	int ret = 0;
1136
1137	/* swapfiles are not supposed to be shared. */
1138	if (IS_SWAPFILE(inode))
1139		goto out;
1140
1141	if (nfs_mapping_need_revalidate_inode(inode)) {
1142		ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
1143		if (ret < 0)
1144			goto out;
1145	}
1146
1147	/*
1148	 * We must clear NFS_INO_INVALID_DATA first to ensure that
1149	 * invalidations that come in while we're shooting down the mappings
1150	 * are respected. But, that leaves a race window where one revalidator
1151	 * can clear the flag, and then another checks it before the mapping
1152	 * gets invalidated. Fix that by serializing access to this part of
1153	 * the function.
1154	 *
1155	 * At the same time, we need to allow other tasks to see whether we
1156	 * might be in the middle of invalidating the pages, so we only set
1157	 * the bit lock here if it looks like we're going to be doing that.
1158	 */
1159	for (;;) {
1160		ret = wait_on_bit_action(bitlock, NFS_INO_INVALIDATING,
1161					 nfs_wait_bit_killable, TASK_KILLABLE);
1162		if (ret)
1163			goto out;
1164		spin_lock(&inode->i_lock);
1165		if (test_bit(NFS_INO_INVALIDATING, bitlock)) {
1166			spin_unlock(&inode->i_lock);
1167			continue;
1168		}
1169		if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
1170			break;
1171		spin_unlock(&inode->i_lock);
1172		goto out;
1173	}
1174
1175	set_bit(NFS_INO_INVALIDATING, bitlock);
1176	smp_wmb();
1177	nfsi->cache_validity &= ~NFS_INO_INVALID_DATA;
1178	spin_unlock(&inode->i_lock);
1179	trace_nfs_invalidate_mapping_enter(inode);
1180	if (may_lock) {
1181		inode_lock(inode);
1182		ret = nfs_invalidate_mapping(inode, mapping);
1183		inode_unlock(inode);
1184	} else
1185		ret = nfs_invalidate_mapping(inode, mapping);
1186	trace_nfs_invalidate_mapping_exit(inode, ret);
1187
1188	clear_bit_unlock(NFS_INO_INVALIDATING, bitlock);
1189	smp_mb__after_atomic();
1190	wake_up_bit(bitlock, NFS_INO_INVALIDATING);
1191out:
1192	return ret;
1193}
1194
1195/**
1196 * nfs_revalidate_mapping - Revalidate the pagecache
1197 * @inode - pointer to host inode
1198 * @mapping - pointer to mapping
1199 */
1200int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
1201{
1202	return __nfs_revalidate_mapping(inode, mapping, false);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1203}
1204
1205/**
1206 * nfs_revalidate_mapping_protected - Revalidate the pagecache
1207 * @inode - pointer to host inode
1208 * @mapping - pointer to mapping
1209 *
1210 * Differs from nfs_revalidate_mapping() in that it grabs the inode->i_mutex
1211 * while invalidating the mapping.
1212 */
1213int nfs_revalidate_mapping_protected(struct inode *inode, struct address_space *mapping)
1214{
1215	return __nfs_revalidate_mapping(inode, mapping, true);
1216}
1217
1218static unsigned long nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1219{
1220	struct nfs_inode *nfsi = NFS_I(inode);
1221	unsigned long ret = 0;
1222
1223	if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE)
1224			&& (fattr->valid & NFS_ATTR_FATTR_CHANGE)
1225			&& inode->i_version == fattr->pre_change_attr) {
1226		inode->i_version = fattr->change_attr;
1227		if (S_ISDIR(inode->i_mode))
1228			nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA);
1229		ret |= NFS_INO_INVALID_ATTR;
1230	}
1231	/* If we have atomic WCC data, we may update some attributes */
1232	if ((fattr->valid & NFS_ATTR_FATTR_PRECTIME)
1233			&& (fattr->valid & NFS_ATTR_FATTR_CTIME)
1234			&& timespec_equal(&inode->i_ctime, &fattr->pre_ctime)) {
1235		memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
1236		ret |= NFS_INO_INVALID_ATTR;
1237	}
1238
1239	if ((fattr->valid & NFS_ATTR_FATTR_PREMTIME)
1240			&& (fattr->valid & NFS_ATTR_FATTR_MTIME)
1241			&& timespec_equal(&inode->i_mtime, &fattr->pre_mtime)) {
1242		memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
1243		if (S_ISDIR(inode->i_mode))
1244			nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA);
1245		ret |= NFS_INO_INVALID_ATTR;
1246	}
1247	if ((fattr->valid & NFS_ATTR_FATTR_PRESIZE)
1248			&& (fattr->valid & NFS_ATTR_FATTR_SIZE)
1249			&& i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size)
1250			&& nfsi->nrequests == 0) {
1251		i_size_write(inode, nfs_size_to_loff_t(fattr->size));
1252		ret |= NFS_INO_INVALID_ATTR;
1253	}
1254
1255	return ret;
1256}
1257
1258/**
1259 * nfs_check_inode_attributes - verify consistency of the inode attribute cache
1260 * @inode - pointer to inode
1261 * @fattr - updated attributes
1262 *
1263 * Verifies the attribute cache. If we have just changed the attributes,
1264 * so that fattr carries weak cache consistency data, then it may
1265 * also update the ctime/mtime/change_attribute.
1266 */
1267static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr)
1268{
1269	struct nfs_inode *nfsi = NFS_I(inode);
1270	loff_t cur_size, new_isize;
1271	unsigned long invalid = 0;
1272
1273
1274	if (nfs_have_delegated_attributes(inode))
1275		return 0;
1276	/* Has the inode gone and changed behind our back? */
1277	if ((fattr->valid & NFS_ATTR_FATTR_FILEID) && nfsi->fileid != fattr->fileid)
1278		return -EIO;
1279	if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT))
1280		return -EIO;
1281
1282	if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
1283			inode->i_version != fattr->change_attr)
1284		invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
 
 
 
 
1285
1286	/* Verify a few of the more important attributes */
1287	if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec_equal(&inode->i_mtime, &fattr->mtime))
1288		invalid |= NFS_INO_INVALID_ATTR;
1289
1290	if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
1291		cur_size = i_size_read(inode);
1292		new_isize = nfs_size_to_loff_t(fattr->size);
1293		if (cur_size != new_isize)
1294			invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
 
1295	}
1296	if (nfsi->nrequests != 0)
1297		invalid &= ~NFS_INO_REVAL_PAGECACHE;
1298
1299	/* Have any file permissions changed? */
1300	if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO))
1301		invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
1302	if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && !uid_eq(inode->i_uid, fattr->uid))
1303		invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
1304	if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && !gid_eq(inode->i_gid, fattr->gid))
1305		invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
1306
1307	/* Has the link count changed? */
1308	if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink)
1309		invalid |= NFS_INO_INVALID_ATTR;
1310
1311	if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec_equal(&inode->i_atime, &fattr->atime))
1312		invalid |= NFS_INO_INVALID_ATIME;
1313
1314	if (invalid != 0)
1315		nfs_set_cache_invalid(inode, invalid);
1316
1317	nfsi->read_cache_jiffies = fattr->time_start;
1318	return 0;
1319}
1320
1321static atomic_long_t nfs_attr_generation_counter;
1322
1323static unsigned long nfs_read_attr_generation_counter(void)
1324{
1325	return atomic_long_read(&nfs_attr_generation_counter);
1326}
1327
1328unsigned long nfs_inc_attr_generation_counter(void)
1329{
1330	return atomic_long_inc_return(&nfs_attr_generation_counter);
1331}
1332EXPORT_SYMBOL_GPL(nfs_inc_attr_generation_counter);
1333
1334void nfs_fattr_init(struct nfs_fattr *fattr)
1335{
1336	fattr->valid = 0;
1337	fattr->time_start = jiffies;
1338	fattr->gencount = nfs_inc_attr_generation_counter();
1339	fattr->owner_name = NULL;
1340	fattr->group_name = NULL;
1341}
1342EXPORT_SYMBOL_GPL(nfs_fattr_init);
1343
1344/**
1345 * nfs_fattr_set_barrier
1346 * @fattr: attributes
1347 *
1348 * Used to set a barrier after an attribute was updated. This
1349 * barrier ensures that older attributes from RPC calls that may
1350 * have raced with our update cannot clobber these new values.
1351 * Note that you are still responsible for ensuring that other
1352 * operations which change the attribute on the server do not
1353 * collide.
1354 */
1355void nfs_fattr_set_barrier(struct nfs_fattr *fattr)
1356{
1357	fattr->gencount = nfs_inc_attr_generation_counter();
1358}
1359
1360struct nfs_fattr *nfs_alloc_fattr(void)
1361{
1362	struct nfs_fattr *fattr;
1363
1364	fattr = kmalloc(sizeof(*fattr), GFP_NOFS);
1365	if (fattr != NULL)
1366		nfs_fattr_init(fattr);
1367	return fattr;
1368}
1369EXPORT_SYMBOL_GPL(nfs_alloc_fattr);
1370
1371struct nfs_fh *nfs_alloc_fhandle(void)
1372{
1373	struct nfs_fh *fh;
1374
1375	fh = kmalloc(sizeof(struct nfs_fh), GFP_NOFS);
1376	if (fh != NULL)
1377		fh->size = 0;
1378	return fh;
1379}
1380EXPORT_SYMBOL_GPL(nfs_alloc_fhandle);
1381
1382#ifdef NFS_DEBUG
1383/*
1384 * _nfs_display_fhandle_hash - calculate the crc32 hash for the filehandle
1385 *                             in the same way that wireshark does
1386 *
1387 * @fh: file handle
1388 *
1389 * For debugging only.
1390 */
1391u32 _nfs_display_fhandle_hash(const struct nfs_fh *fh)
1392{
1393	/* wireshark uses 32-bit AUTODIN crc and does a bitwise
1394	 * not on the result */
1395	return nfs_fhandle_hash(fh);
1396}
1397EXPORT_SYMBOL_GPL(_nfs_display_fhandle_hash);
1398
1399/*
1400 * _nfs_display_fhandle - display an NFS file handle on the console
1401 *
1402 * @fh: file handle to display
1403 * @caption: display caption
1404 *
1405 * For debugging only.
1406 */
1407void _nfs_display_fhandle(const struct nfs_fh *fh, const char *caption)
1408{
1409	unsigned short i;
1410
1411	if (fh == NULL || fh->size == 0) {
1412		printk(KERN_DEFAULT "%s at %p is empty\n", caption, fh);
1413		return;
1414	}
1415
1416	printk(KERN_DEFAULT "%s at %p is %u bytes, crc: 0x%08x:\n",
1417	       caption, fh, fh->size, _nfs_display_fhandle_hash(fh));
1418	for (i = 0; i < fh->size; i += 16) {
1419		__be32 *pos = (__be32 *)&fh->data[i];
1420
1421		switch ((fh->size - i - 1) >> 2) {
1422		case 0:
1423			printk(KERN_DEFAULT " %08x\n",
1424				be32_to_cpup(pos));
1425			break;
1426		case 1:
1427			printk(KERN_DEFAULT " %08x %08x\n",
1428				be32_to_cpup(pos), be32_to_cpup(pos + 1));
1429			break;
1430		case 2:
1431			printk(KERN_DEFAULT " %08x %08x %08x\n",
1432				be32_to_cpup(pos), be32_to_cpup(pos + 1),
1433				be32_to_cpup(pos + 2));
1434			break;
1435		default:
1436			printk(KERN_DEFAULT " %08x %08x %08x %08x\n",
1437				be32_to_cpup(pos), be32_to_cpup(pos + 1),
1438				be32_to_cpup(pos + 2), be32_to_cpup(pos + 3));
1439		}
1440	}
1441}
1442EXPORT_SYMBOL_GPL(_nfs_display_fhandle);
1443#endif
1444
1445/**
1446 * nfs_inode_attrs_need_update - check if the inode attributes need updating
1447 * @inode - pointer to inode
1448 * @fattr - attributes
1449 *
1450 * Attempt to divine whether or not an RPC call reply carrying stale
1451 * attributes got scheduled after another call carrying updated ones.
1452 *
1453 * To do so, the function first assumes that a more recent ctime means
1454 * that the attributes in fattr are newer, however it also attempt to
1455 * catch the case where ctime either didn't change, or went backwards
1456 * (if someone reset the clock on the server) by looking at whether
1457 * or not this RPC call was started after the inode was last updated.
1458 * Note also the check for wraparound of 'attr_gencount'
1459 *
1460 * The function returns 'true' if it thinks the attributes in 'fattr' are
1461 * more recent than the ones cached in the inode.
1462 *
1463 */
1464static int nfs_inode_attrs_need_update(const struct inode *inode, const struct nfs_fattr *fattr)
1465{
1466	const struct nfs_inode *nfsi = NFS_I(inode);
1467
1468	return ((long)fattr->gencount - (long)nfsi->attr_gencount) > 0 ||
1469		((long)nfsi->attr_gencount - (long)nfs_read_attr_generation_counter() > 0);
1470}
1471
1472/*
1473 * Don't trust the change_attribute, mtime, ctime or size if
1474 * a pnfs LAYOUTCOMMIT is outstanding
1475 */
1476static void nfs_inode_attrs_handle_layoutcommit(struct inode *inode,
1477		struct nfs_fattr *fattr)
1478{
1479	if (pnfs_layoutcommit_outstanding(inode))
1480		fattr->valid &= ~(NFS_ATTR_FATTR_CHANGE |
1481				NFS_ATTR_FATTR_MTIME |
1482				NFS_ATTR_FATTR_CTIME |
1483				NFS_ATTR_FATTR_SIZE);
1484}
1485
1486static int nfs_refresh_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
1487{
1488	int ret;
1489
1490	trace_nfs_refresh_inode_enter(inode);
1491
1492	nfs_inode_attrs_handle_layoutcommit(inode, fattr);
1493
1494	if (nfs_inode_attrs_need_update(inode, fattr))
1495		ret = nfs_update_inode(inode, fattr);
1496	else
1497		ret = nfs_check_inode_attributes(inode, fattr);
1498
1499	trace_nfs_refresh_inode_exit(inode, ret);
1500	return ret;
1501}
1502
1503/**
1504 * nfs_refresh_inode - try to update the inode attribute cache
1505 * @inode - pointer to inode
1506 * @fattr - updated attributes
1507 *
1508 * Check that an RPC call that returned attributes has not overlapped with
1509 * other recent updates of the inode metadata, then decide whether it is
1510 * safe to do a full update of the inode attributes, or whether just to
1511 * call nfs_check_inode_attributes.
1512 */
1513int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
1514{
1515	int status;
1516
1517	if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1518		return 0;
1519	spin_lock(&inode->i_lock);
1520	status = nfs_refresh_inode_locked(inode, fattr);
1521	spin_unlock(&inode->i_lock);
1522
1523	return status;
1524}
1525EXPORT_SYMBOL_GPL(nfs_refresh_inode);
1526
1527static int nfs_post_op_update_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
1528{
1529	unsigned long invalid = NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
1530
1531	/*
1532	 * Don't revalidate the pagecache if we hold a delegation, but do
1533	 * force an attribute update
1534	 */
1535	if (NFS_PROTO(inode)->have_delegation(inode, FMODE_READ))
1536		invalid = NFS_INO_INVALID_ATTR|NFS_INO_REVAL_FORCED;
1537
1538	if (S_ISDIR(inode->i_mode))
1539		invalid |= NFS_INO_INVALID_DATA;
1540	nfs_set_cache_invalid(inode, invalid);
1541	if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1542		return 0;
1543	return nfs_refresh_inode_locked(inode, fattr);
1544}
1545
1546/**
1547 * nfs_post_op_update_inode - try to update the inode attribute cache
1548 * @inode - pointer to inode
1549 * @fattr - updated attributes
1550 *
1551 * After an operation that has changed the inode metadata, mark the
1552 * attribute cache as being invalid, then try to update it.
1553 *
1554 * NB: if the server didn't return any post op attributes, this
1555 * function will force the retrieval of attributes before the next
1556 * NFS request.  Thus it should be used only for operations that
1557 * are expected to change one or more attributes, to avoid
1558 * unnecessary NFS requests and trips through nfs_update_inode().
1559 */
1560int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1561{
1562	int status;
1563
1564	spin_lock(&inode->i_lock);
1565	nfs_fattr_set_barrier(fattr);
1566	status = nfs_post_op_update_inode_locked(inode, fattr);
1567	spin_unlock(&inode->i_lock);
1568
1569	return status;
1570}
1571EXPORT_SYMBOL_GPL(nfs_post_op_update_inode);
1572
1573/**
1574 * nfs_post_op_update_inode_force_wcc_locked - update the inode attribute cache
1575 * @inode - pointer to inode
1576 * @fattr - updated attributes
1577 *
1578 * After an operation that has changed the inode metadata, mark the
1579 * attribute cache as being invalid, then try to update it. Fake up
1580 * weak cache consistency data, if none exist.
1581 *
1582 * This function is mainly designed to be used by the ->write_done() functions.
1583 */
1584int nfs_post_op_update_inode_force_wcc_locked(struct inode *inode, struct nfs_fattr *fattr)
1585{
1586	int status;
1587
1588	/* Don't do a WCC update if these attributes are already stale */
1589	if ((fattr->valid & NFS_ATTR_FATTR) == 0 ||
1590			!nfs_inode_attrs_need_update(inode, fattr)) {
1591		fattr->valid &= ~(NFS_ATTR_FATTR_PRECHANGE
1592				| NFS_ATTR_FATTR_PRESIZE
1593				| NFS_ATTR_FATTR_PREMTIME
1594				| NFS_ATTR_FATTR_PRECTIME);
1595		goto out_noforce;
1596	}
1597	if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
1598			(fattr->valid & NFS_ATTR_FATTR_PRECHANGE) == 0) {
1599		fattr->pre_change_attr = inode->i_version;
1600		fattr->valid |= NFS_ATTR_FATTR_PRECHANGE;
1601	}
1602	if ((fattr->valid & NFS_ATTR_FATTR_CTIME) != 0 &&
1603			(fattr->valid & NFS_ATTR_FATTR_PRECTIME) == 0) {
1604		memcpy(&fattr->pre_ctime, &inode->i_ctime, sizeof(fattr->pre_ctime));
1605		fattr->valid |= NFS_ATTR_FATTR_PRECTIME;
1606	}
1607	if ((fattr->valid & NFS_ATTR_FATTR_MTIME) != 0 &&
1608			(fattr->valid & NFS_ATTR_FATTR_PREMTIME) == 0) {
1609		memcpy(&fattr->pre_mtime, &inode->i_mtime, sizeof(fattr->pre_mtime));
1610		fattr->valid |= NFS_ATTR_FATTR_PREMTIME;
1611	}
1612	if ((fattr->valid & NFS_ATTR_FATTR_SIZE) != 0 &&
1613			(fattr->valid & NFS_ATTR_FATTR_PRESIZE) == 0) {
1614		fattr->pre_size = i_size_read(inode);
1615		fattr->valid |= NFS_ATTR_FATTR_PRESIZE;
1616	}
1617out_noforce:
1618	status = nfs_post_op_update_inode_locked(inode, fattr);
1619	return status;
1620}
1621
1622/**
1623 * nfs_post_op_update_inode_force_wcc - try to update the inode attribute cache
1624 * @inode - pointer to inode
1625 * @fattr - updated attributes
1626 *
1627 * After an operation that has changed the inode metadata, mark the
1628 * attribute cache as being invalid, then try to update it. Fake up
1629 * weak cache consistency data, if none exist.
1630 *
1631 * This function is mainly designed to be used by the ->write_done() functions.
1632 */
1633int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr)
1634{
1635	int status;
1636
1637	spin_lock(&inode->i_lock);
1638	nfs_fattr_set_barrier(fattr);
1639	status = nfs_post_op_update_inode_force_wcc_locked(inode, fattr);
1640	spin_unlock(&inode->i_lock);
1641	return status;
1642}
1643EXPORT_SYMBOL_GPL(nfs_post_op_update_inode_force_wcc);
1644
1645
1646static inline bool nfs_fileid_valid(struct nfs_inode *nfsi,
1647				    struct nfs_fattr *fattr)
1648{
1649	bool ret1 = true, ret2 = true;
1650
1651	if (fattr->valid & NFS_ATTR_FATTR_FILEID)
1652		ret1 = (nfsi->fileid == fattr->fileid);
1653	if (fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID)
1654		ret2 = (nfsi->fileid == fattr->mounted_on_fileid);
1655	return ret1 || ret2;
1656}
1657
1658/*
1659 * Many nfs protocol calls return the new file attributes after
1660 * an operation.  Here we update the inode to reflect the state
1661 * of the server's inode.
1662 *
1663 * This is a bit tricky because we have to make sure all dirty pages
1664 * have been sent off to the server before calling invalidate_inode_pages.
1665 * To make sure no other process adds more write requests while we try
1666 * our best to flush them, we make them sleep during the attribute refresh.
1667 *
1668 * A very similar scenario holds for the dir cache.
1669 */
1670static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1671{
1672	struct nfs_server *server;
1673	struct nfs_inode *nfsi = NFS_I(inode);
1674	loff_t cur_isize, new_isize;
1675	unsigned long invalid = 0;
1676	unsigned long now = jiffies;
1677	unsigned long save_cache_validity;
 
1678	bool cache_revalidated = true;
1679
1680	dfprintk(VFS, "NFS: %s(%s/%lu fh_crc=0x%08x ct=%d info=0x%x)\n",
1681			__func__, inode->i_sb->s_id, inode->i_ino,
1682			nfs_display_fhandle_hash(NFS_FH(inode)),
1683			atomic_read(&inode->i_count), fattr->valid);
1684
1685	if (!nfs_fileid_valid(nfsi, fattr)) {
1686		printk(KERN_ERR "NFS: server %s error: fileid changed\n"
1687			"fsid %s: expected fileid 0x%Lx, got 0x%Lx\n",
1688			NFS_SERVER(inode)->nfs_client->cl_hostname,
1689			inode->i_sb->s_id, (long long)nfsi->fileid,
1690			(long long)fattr->fileid);
1691		goto out_err;
1692	}
1693
1694	/*
1695	 * Make sure the inode's type hasn't changed.
1696	 */
1697	if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && (inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) {
1698		/*
1699		* Big trouble! The inode has become a different object.
1700		*/
1701		printk(KERN_DEBUG "NFS: %s: inode %lu mode changed, %07o to %07o\n",
1702				__func__, inode->i_ino, inode->i_mode, fattr->mode);
1703		goto out_err;
1704	}
1705
1706	server = NFS_SERVER(inode);
1707	/* Update the fsid? */
1708	if (S_ISDIR(inode->i_mode) && (fattr->valid & NFS_ATTR_FATTR_FSID) &&
1709			!nfs_fsid_equal(&server->fsid, &fattr->fsid) &&
1710			!IS_AUTOMOUNT(inode))
1711		server->fsid = fattr->fsid;
1712
1713	/*
1714	 * Update the read time so we don't revalidate too often.
1715	 */
1716	nfsi->read_cache_jiffies = fattr->time_start;
1717
1718	save_cache_validity = nfsi->cache_validity;
1719	nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR
1720			| NFS_INO_INVALID_ATIME
1721			| NFS_INO_REVAL_FORCED
1722			| NFS_INO_REVAL_PAGECACHE);
1723
1724	/* Do atomic weak cache consistency updates */
1725	invalid |= nfs_wcc_update_inode(inode, fattr);
1726
 
 
 
 
 
1727	/* More cache consistency checks */
1728	if (fattr->valid & NFS_ATTR_FATTR_CHANGE) {
1729		if (inode->i_version != fattr->change_attr) {
1730			dprintk("NFS: change_attr change on server for file %s/%ld\n",
1731					inode->i_sb->s_id, inode->i_ino);
1732			invalid |= NFS_INO_INVALID_ATTR
1733				| NFS_INO_INVALID_DATA
1734				| NFS_INO_INVALID_ACCESS
1735				| NFS_INO_INVALID_ACL;
1736			if (S_ISDIR(inode->i_mode))
1737				nfs_force_lookup_revalidate(inode);
 
 
 
1738			inode->i_version = fattr->change_attr;
1739		}
1740	} else {
1741		nfsi->cache_validity |= save_cache_validity;
1742		cache_revalidated = false;
1743	}
1744
1745	if (fattr->valid & NFS_ATTR_FATTR_MTIME) {
1746		memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
1747	} else if (server->caps & NFS_CAP_MTIME) {
1748		nfsi->cache_validity |= save_cache_validity &
1749				(NFS_INO_INVALID_ATTR
1750				| NFS_INO_REVAL_FORCED);
1751		cache_revalidated = false;
1752	}
1753
1754	if (fattr->valid & NFS_ATTR_FATTR_CTIME) {
1755		memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
1756	} else if (server->caps & NFS_CAP_CTIME) {
1757		nfsi->cache_validity |= save_cache_validity &
1758				(NFS_INO_INVALID_ATTR
1759				| NFS_INO_REVAL_FORCED);
1760		cache_revalidated = false;
1761	}
1762
1763	/* Check if our cached file size is stale */
1764	if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
1765		new_isize = nfs_size_to_loff_t(fattr->size);
1766		cur_isize = i_size_read(inode);
1767		if (new_isize != cur_isize) {
1768			/* Do we perhaps have any outstanding writes, or has
1769			 * the file grown beyond our last write? */
1770			if ((nfsi->nrequests == 0) || new_isize > cur_isize) {
1771				i_size_write(inode, new_isize);
1772				invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
 
1773			}
1774			dprintk("NFS: isize change on server for file %s/%ld "
1775					"(%Ld to %Ld)\n",
1776					inode->i_sb->s_id,
1777					inode->i_ino,
1778					(long long)cur_isize,
1779					(long long)new_isize);
1780		}
1781	} else {
1782		nfsi->cache_validity |= save_cache_validity &
1783				(NFS_INO_INVALID_ATTR
1784				| NFS_INO_REVAL_PAGECACHE
1785				| NFS_INO_REVAL_FORCED);
1786		cache_revalidated = false;
1787	}
1788
1789
1790	if (fattr->valid & NFS_ATTR_FATTR_ATIME)
1791		memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime));
1792	else if (server->caps & NFS_CAP_ATIME) {
1793		nfsi->cache_validity |= save_cache_validity &
1794				(NFS_INO_INVALID_ATIME
1795				| NFS_INO_REVAL_FORCED);
1796		cache_revalidated = false;
1797	}
1798
1799	if (fattr->valid & NFS_ATTR_FATTR_MODE) {
1800		if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) {
1801			umode_t newmode = inode->i_mode & S_IFMT;
1802			newmode |= fattr->mode & S_IALLUGO;
1803			inode->i_mode = newmode;
1804			invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1805		}
1806	} else if (server->caps & NFS_CAP_MODE) {
1807		nfsi->cache_validity |= save_cache_validity &
1808				(NFS_INO_INVALID_ATTR
1809				| NFS_INO_INVALID_ACCESS
1810				| NFS_INO_INVALID_ACL
1811				| NFS_INO_REVAL_FORCED);
1812		cache_revalidated = false;
1813	}
1814
1815	if (fattr->valid & NFS_ATTR_FATTR_OWNER) {
1816		if (!uid_eq(inode->i_uid, fattr->uid)) {
1817			invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1818			inode->i_uid = fattr->uid;
1819		}
1820	} else if (server->caps & NFS_CAP_OWNER) {
1821		nfsi->cache_validity |= save_cache_validity &
1822				(NFS_INO_INVALID_ATTR
1823				| NFS_INO_INVALID_ACCESS
1824				| NFS_INO_INVALID_ACL
1825				| NFS_INO_REVAL_FORCED);
1826		cache_revalidated = false;
1827	}
1828
1829	if (fattr->valid & NFS_ATTR_FATTR_GROUP) {
1830		if (!gid_eq(inode->i_gid, fattr->gid)) {
1831			invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
1832			inode->i_gid = fattr->gid;
1833		}
1834	} else if (server->caps & NFS_CAP_OWNER_GROUP) {
1835		nfsi->cache_validity |= save_cache_validity &
1836				(NFS_INO_INVALID_ATTR
1837				| NFS_INO_INVALID_ACCESS
1838				| NFS_INO_INVALID_ACL
1839				| NFS_INO_REVAL_FORCED);
1840		cache_revalidated = false;
1841	}
1842
1843	if (fattr->valid & NFS_ATTR_FATTR_NLINK) {
1844		if (inode->i_nlink != fattr->nlink) {
1845			invalid |= NFS_INO_INVALID_ATTR;
1846			if (S_ISDIR(inode->i_mode))
1847				invalid |= NFS_INO_INVALID_DATA;
1848			set_nlink(inode, fattr->nlink);
1849		}
1850	} else if (server->caps & NFS_CAP_NLINK) {
1851		nfsi->cache_validity |= save_cache_validity &
1852				(NFS_INO_INVALID_ATTR
1853				| NFS_INO_REVAL_FORCED);
1854		cache_revalidated = false;
1855	}
1856
1857	if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
1858		/*
1859		 * report the blocks in 512byte units
1860		 */
1861		inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
1862	} else if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
1863		inode->i_blocks = fattr->du.nfs2.blocks;
1864	else
1865		cache_revalidated = false;
1866
1867	/* Update attrtimeo value if we're out of the unstable period */
1868	if (invalid & NFS_INO_INVALID_ATTR) {
1869		nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE);
1870		nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
1871		nfsi->attrtimeo_timestamp = now;
1872		/* Set barrier to be more recent than all outstanding updates */
1873		nfsi->attr_gencount = nfs_inc_attr_generation_counter();
1874	} else {
1875		if (cache_revalidated) {
1876			if (!time_in_range_open(now, nfsi->attrtimeo_timestamp,
1877				nfsi->attrtimeo_timestamp + nfsi->attrtimeo)) {
1878				nfsi->attrtimeo <<= 1;
1879				if (nfsi->attrtimeo > NFS_MAXATTRTIMEO(inode))
1880					nfsi->attrtimeo = NFS_MAXATTRTIMEO(inode);
1881			}
1882			nfsi->attrtimeo_timestamp = now;
1883		}
1884		/* Set the barrier to be more recent than this fattr */
1885		if ((long)fattr->gencount - (long)nfsi->attr_gencount > 0)
1886			nfsi->attr_gencount = fattr->gencount;
1887	}
1888
1889	/* Don't declare attrcache up to date if there were no attrs! */
1890	if (cache_revalidated)
1891		invalid &= ~NFS_INO_INVALID_ATTR;
1892
1893	/* Don't invalidate the data if we were to blame */
1894	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)
1895				|| S_ISLNK(inode->i_mode)))
1896		invalid &= ~NFS_INO_INVALID_DATA;
1897	if (!NFS_PROTO(inode)->have_delegation(inode, FMODE_READ) ||
1898			(save_cache_validity & NFS_INO_REVAL_FORCED))
1899		nfs_set_cache_invalid(inode, invalid);
1900
1901	return 0;
1902 out_err:
1903	/*
1904	 * No need to worry about unhashing the dentry, as the
1905	 * lookup validation will know that the inode is bad.
1906	 * (But we fall through to invalidate the caches.)
1907	 */
1908	nfs_invalidate_inode(inode);
1909	return -ESTALE;
1910}
1911
1912struct inode *nfs_alloc_inode(struct super_block *sb)
1913{
1914	struct nfs_inode *nfsi;
1915	nfsi = kmem_cache_alloc(nfs_inode_cachep, GFP_KERNEL);
1916	if (!nfsi)
1917		return NULL;
1918	nfsi->flags = 0UL;
1919	nfsi->cache_validity = 0UL;
1920#if IS_ENABLED(CONFIG_NFS_V4)
1921	nfsi->nfs4_acl = NULL;
1922#endif /* CONFIG_NFS_V4 */
1923	return &nfsi->vfs_inode;
1924}
1925EXPORT_SYMBOL_GPL(nfs_alloc_inode);
1926
1927static void nfs_i_callback(struct rcu_head *head)
1928{
1929	struct inode *inode = container_of(head, struct inode, i_rcu);
1930	kmem_cache_free(nfs_inode_cachep, NFS_I(inode));
1931}
1932
1933void nfs_destroy_inode(struct inode *inode)
1934{
1935	call_rcu(&inode->i_rcu, nfs_i_callback);
1936}
1937EXPORT_SYMBOL_GPL(nfs_destroy_inode);
1938
1939static inline void nfs4_init_once(struct nfs_inode *nfsi)
1940{
1941#if IS_ENABLED(CONFIG_NFS_V4)
1942	INIT_LIST_HEAD(&nfsi->open_states);
1943	nfsi->delegation = NULL;
1944	init_rwsem(&nfsi->rwsem);
1945	nfsi->layout = NULL;
1946#endif
1947}
1948
1949static void init_once(void *foo)
1950{
1951	struct nfs_inode *nfsi = (struct nfs_inode *) foo;
1952
1953	inode_init_once(&nfsi->vfs_inode);
1954	INIT_LIST_HEAD(&nfsi->open_files);
1955	INIT_LIST_HEAD(&nfsi->access_cache_entry_lru);
1956	INIT_LIST_HEAD(&nfsi->access_cache_inode_lru);
1957	INIT_LIST_HEAD(&nfsi->commit_info.list);
1958	nfsi->nrequests = 0;
1959	nfsi->commit_info.ncommit = 0;
1960	atomic_set(&nfsi->commit_info.rpcs_out, 0);
1961	atomic_set(&nfsi->silly_count, 1);
1962	INIT_HLIST_HEAD(&nfsi->silly_list);
1963	init_waitqueue_head(&nfsi->waitqueue);
1964	nfs4_init_once(nfsi);
1965}
1966
1967static int __init nfs_init_inodecache(void)
1968{
1969	nfs_inode_cachep = kmem_cache_create("nfs_inode_cache",
1970					     sizeof(struct nfs_inode),
1971					     0, (SLAB_RECLAIM_ACCOUNT|
1972						SLAB_MEM_SPREAD|SLAB_ACCOUNT),
1973					     init_once);
1974	if (nfs_inode_cachep == NULL)
1975		return -ENOMEM;
1976
1977	return 0;
1978}
1979
1980static void nfs_destroy_inodecache(void)
1981{
1982	/*
1983	 * Make sure all delayed rcu free inodes are flushed before we
1984	 * destroy cache.
1985	 */
1986	rcu_barrier();
1987	kmem_cache_destroy(nfs_inode_cachep);
1988}
1989
1990struct workqueue_struct *nfsiod_workqueue;
1991EXPORT_SYMBOL_GPL(nfsiod_workqueue);
1992
1993/*
1994 * start up the nfsiod workqueue
1995 */
1996static int nfsiod_start(void)
1997{
1998	struct workqueue_struct *wq;
1999	dprintk("RPC:       creating workqueue nfsiod\n");
2000	wq = alloc_workqueue("nfsiod", WQ_MEM_RECLAIM, 0);
2001	if (wq == NULL)
2002		return -ENOMEM;
2003	nfsiod_workqueue = wq;
2004	return 0;
2005}
2006
2007/*
2008 * Destroy the nfsiod workqueue
2009 */
2010static void nfsiod_stop(void)
2011{
2012	struct workqueue_struct *wq;
2013
2014	wq = nfsiod_workqueue;
2015	if (wq == NULL)
2016		return;
2017	nfsiod_workqueue = NULL;
2018	destroy_workqueue(wq);
2019}
2020
2021int nfs_net_id;
2022EXPORT_SYMBOL_GPL(nfs_net_id);
2023
2024static int nfs_net_init(struct net *net)
2025{
2026	nfs_clients_init(net);
2027	return nfs_fs_proc_net_init(net);
2028}
2029
2030static void nfs_net_exit(struct net *net)
2031{
2032	nfs_fs_proc_net_exit(net);
2033	nfs_cleanup_cb_ident_idr(net);
2034}
2035
2036static struct pernet_operations nfs_net_ops = {
2037	.init = nfs_net_init,
2038	.exit = nfs_net_exit,
2039	.id   = &nfs_net_id,
2040	.size = sizeof(struct nfs_net),
2041};
2042
2043/*
2044 * Initialize NFS
2045 */
2046static int __init init_nfs_fs(void)
2047{
2048	int err;
2049
2050	err = register_pernet_subsys(&nfs_net_ops);
2051	if (err < 0)
2052		goto out9;
2053
2054	err = nfs_fscache_register();
2055	if (err < 0)
2056		goto out8;
2057
2058	err = nfsiod_start();
2059	if (err)
2060		goto out7;
2061
2062	err = nfs_fs_proc_init();
2063	if (err)
2064		goto out6;
2065
2066	err = nfs_init_nfspagecache();
2067	if (err)
2068		goto out5;
2069
2070	err = nfs_init_inodecache();
2071	if (err)
2072		goto out4;
2073
2074	err = nfs_init_readpagecache();
2075	if (err)
2076		goto out3;
2077
2078	err = nfs_init_writepagecache();
2079	if (err)
2080		goto out2;
2081
2082	err = nfs_init_directcache();
2083	if (err)
2084		goto out1;
2085
2086	rpc_proc_register(&init_net, &nfs_rpcstat);
2087
2088	err = register_nfs_fs();
2089	if (err)
2090		goto out0;
2091
2092	return 0;
2093out0:
2094	rpc_proc_unregister(&init_net, "nfs");
2095	nfs_destroy_directcache();
2096out1:
2097	nfs_destroy_writepagecache();
2098out2:
2099	nfs_destroy_readpagecache();
2100out3:
2101	nfs_destroy_inodecache();
2102out4:
2103	nfs_destroy_nfspagecache();
2104out5:
2105	nfs_fs_proc_exit();
2106out6:
2107	nfsiod_stop();
2108out7:
2109	nfs_fscache_unregister();
2110out8:
2111	unregister_pernet_subsys(&nfs_net_ops);
2112out9:
2113	return err;
2114}
2115
2116static void __exit exit_nfs_fs(void)
2117{
2118	nfs_destroy_directcache();
2119	nfs_destroy_writepagecache();
2120	nfs_destroy_readpagecache();
2121	nfs_destroy_inodecache();
2122	nfs_destroy_nfspagecache();
2123	nfs_fscache_unregister();
2124	unregister_pernet_subsys(&nfs_net_ops);
2125	rpc_proc_unregister(&init_net, "nfs");
2126	unregister_nfs_fs();
2127	nfs_fs_proc_exit();
2128	nfsiod_stop();
2129}
2130
2131/* Not quite true; I just maintain it */
2132MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
2133MODULE_LICENSE("GPL");
2134module_param(enable_ino64, bool, 0644);
2135
2136module_init(init_nfs_fs)
2137module_exit(exit_nfs_fs)