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