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