Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  *  linux/fs/nfs/inode.c
0004  *
0005  *  Copyright (C) 1992  Rick Sladkey
0006  *
0007  *  nfs inode and superblock handling functions
0008  *
0009  *  Modularised by Alan Cox <alan@lxorguk.ukuu.org.uk>, while hacking some
0010  *  experimental NFS changes. Modularisation taken straight from SYS5 fs.
0011  *
0012  *  Change to nfs_read_super() to permit NFS mounts to multi-homed hosts.
0013  *  J.S.Peatfield@damtp.cam.ac.uk
0014  *
0015  */
0016 
0017 #include <linux/module.h>
0018 #include <linux/init.h>
0019 #include <linux/sched/signal.h>
0020 #include <linux/time.h>
0021 #include <linux/kernel.h>
0022 #include <linux/mm.h>
0023 #include <linux/string.h>
0024 #include <linux/stat.h>
0025 #include <linux/errno.h>
0026 #include <linux/unistd.h>
0027 #include <linux/sunrpc/clnt.h>
0028 #include <linux/sunrpc/stats.h>
0029 #include <linux/sunrpc/metrics.h>
0030 #include <linux/nfs_fs.h>
0031 #include <linux/nfs_mount.h>
0032 #include <linux/nfs4_mount.h>
0033 #include <linux/lockd/bind.h>
0034 #include <linux/seq_file.h>
0035 #include <linux/mount.h>
0036 #include <linux/vfs.h>
0037 #include <linux/inet.h>
0038 #include <linux/nfs_xdr.h>
0039 #include <linux/slab.h>
0040 #include <linux/compat.h>
0041 #include <linux/freezer.h>
0042 #include <linux/uaccess.h>
0043 #include <linux/iversion.h>
0044 
0045 #include "nfs4_fs.h"
0046 #include "callback.h"
0047 #include "delegation.h"
0048 #include "iostat.h"
0049 #include "internal.h"
0050 #include "fscache.h"
0051 #include "pnfs.h"
0052 #include "nfs.h"
0053 #include "netns.h"
0054 #include "sysfs.h"
0055 
0056 #include "nfstrace.h"
0057 
0058 #define NFSDBG_FACILITY     NFSDBG_VFS
0059 
0060 #define NFS_64_BIT_INODE_NUMBERS_ENABLED    1
0061 
0062 /* Default is to see 64-bit inode numbers */
0063 static bool enable_ino64 = NFS_64_BIT_INODE_NUMBERS_ENABLED;
0064 
0065 static int nfs_update_inode(struct inode *, struct nfs_fattr *);
0066 
0067 static struct kmem_cache * nfs_inode_cachep;
0068 
0069 static inline unsigned long
0070 nfs_fattr_to_ino_t(struct nfs_fattr *fattr)
0071 {
0072     return nfs_fileid_to_ino_t(fattr->fileid);
0073 }
0074 
0075 static int nfs_wait_killable(int mode)
0076 {
0077     freezable_schedule_unsafe();
0078     if (signal_pending_state(mode, current))
0079         return -ERESTARTSYS;
0080     return 0;
0081 }
0082 
0083 int nfs_wait_bit_killable(struct wait_bit_key *key, int mode)
0084 {
0085     return nfs_wait_killable(mode);
0086 }
0087 EXPORT_SYMBOL_GPL(nfs_wait_bit_killable);
0088 
0089 /**
0090  * nfs_compat_user_ino64 - returns the user-visible inode number
0091  * @fileid: 64-bit fileid
0092  *
0093  * This function returns a 32-bit inode number if the boot parameter
0094  * nfs.enable_ino64 is zero.
0095  */
0096 u64 nfs_compat_user_ino64(u64 fileid)
0097 {
0098 #ifdef CONFIG_COMPAT
0099     compat_ulong_t ino;
0100 #else   
0101     unsigned long ino;
0102 #endif
0103 
0104     if (enable_ino64)
0105         return fileid;
0106     ino = fileid;
0107     if (sizeof(ino) < sizeof(fileid))
0108         ino ^= fileid >> (sizeof(fileid)-sizeof(ino)) * 8;
0109     return ino;
0110 }
0111 
0112 int nfs_drop_inode(struct inode *inode)
0113 {
0114     return NFS_STALE(inode) || generic_drop_inode(inode);
0115 }
0116 EXPORT_SYMBOL_GPL(nfs_drop_inode);
0117 
0118 void nfs_clear_inode(struct inode *inode)
0119 {
0120     /*
0121      * The following should never happen...
0122      */
0123     WARN_ON_ONCE(nfs_have_writebacks(inode));
0124     WARN_ON_ONCE(!list_empty(&NFS_I(inode)->open_files));
0125     nfs_zap_acl_cache(inode);
0126     nfs_access_zap_cache(inode);
0127     nfs_fscache_clear_inode(inode);
0128 }
0129 EXPORT_SYMBOL_GPL(nfs_clear_inode);
0130 
0131 void nfs_evict_inode(struct inode *inode)
0132 {
0133     truncate_inode_pages_final(&inode->i_data);
0134     clear_inode(inode);
0135     nfs_clear_inode(inode);
0136 }
0137 
0138 int nfs_sync_inode(struct inode *inode)
0139 {
0140     inode_dio_wait(inode);
0141     return nfs_wb_all(inode);
0142 }
0143 EXPORT_SYMBOL_GPL(nfs_sync_inode);
0144 
0145 /**
0146  * nfs_sync_mapping - helper to flush all mmapped dirty data to disk
0147  * @mapping: pointer to struct address_space
0148  */
0149 int nfs_sync_mapping(struct address_space *mapping)
0150 {
0151     int ret = 0;
0152 
0153     if (mapping->nrpages != 0) {
0154         unmap_mapping_range(mapping, 0, 0, 0);
0155         ret = nfs_wb_all(mapping->host);
0156     }
0157     return ret;
0158 }
0159 
0160 static int nfs_attribute_timeout(struct inode *inode)
0161 {
0162     struct nfs_inode *nfsi = NFS_I(inode);
0163 
0164     return !time_in_range_open(jiffies, nfsi->read_cache_jiffies, nfsi->read_cache_jiffies + nfsi->attrtimeo);
0165 }
0166 
0167 static bool nfs_check_cache_flags_invalid(struct inode *inode,
0168                       unsigned long flags)
0169 {
0170     unsigned long cache_validity = READ_ONCE(NFS_I(inode)->cache_validity);
0171 
0172     return (cache_validity & flags) != 0;
0173 }
0174 
0175 bool nfs_check_cache_invalid(struct inode *inode, unsigned long flags)
0176 {
0177     if (nfs_check_cache_flags_invalid(inode, flags))
0178         return true;
0179     return nfs_attribute_cache_expired(inode);
0180 }
0181 EXPORT_SYMBOL_GPL(nfs_check_cache_invalid);
0182 
0183 #ifdef CONFIG_NFS_V4_2
0184 static bool nfs_has_xattr_cache(const struct nfs_inode *nfsi)
0185 {
0186     return nfsi->xattr_cache != NULL;
0187 }
0188 #else
0189 static bool nfs_has_xattr_cache(const struct nfs_inode *nfsi)
0190 {
0191     return false;
0192 }
0193 #endif
0194 
0195 void nfs_set_cache_invalid(struct inode *inode, unsigned long flags)
0196 {
0197     struct nfs_inode *nfsi = NFS_I(inode);
0198     bool have_delegation = NFS_PROTO(inode)->have_delegation(inode, FMODE_READ);
0199 
0200     if (have_delegation) {
0201         if (!(flags & NFS_INO_REVAL_FORCED))
0202             flags &= ~(NFS_INO_INVALID_MODE |
0203                    NFS_INO_INVALID_OTHER |
0204                    NFS_INO_INVALID_XATTR);
0205         flags &= ~(NFS_INO_INVALID_CHANGE | NFS_INO_INVALID_SIZE);
0206     }
0207 
0208     if (!nfs_has_xattr_cache(nfsi))
0209         flags &= ~NFS_INO_INVALID_XATTR;
0210     if (flags & NFS_INO_INVALID_DATA)
0211         nfs_fscache_invalidate(inode, 0);
0212     flags &= ~NFS_INO_REVAL_FORCED;
0213 
0214     nfsi->cache_validity |= flags;
0215 
0216     if (inode->i_mapping->nrpages == 0)
0217         nfsi->cache_validity &= ~(NFS_INO_INVALID_DATA |
0218                       NFS_INO_DATA_INVAL_DEFER);
0219     else if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
0220         nfsi->cache_validity &= ~NFS_INO_DATA_INVAL_DEFER;
0221     trace_nfs_set_cache_invalid(inode, 0);
0222 }
0223 EXPORT_SYMBOL_GPL(nfs_set_cache_invalid);
0224 
0225 /*
0226  * Invalidate the local caches
0227  */
0228 static void nfs_zap_caches_locked(struct inode *inode)
0229 {
0230     struct nfs_inode *nfsi = NFS_I(inode);
0231     int mode = inode->i_mode;
0232 
0233     nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE);
0234 
0235     nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
0236     nfsi->attrtimeo_timestamp = jiffies;
0237 
0238     if (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode))
0239         nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR |
0240                              NFS_INO_INVALID_DATA |
0241                              NFS_INO_INVALID_ACCESS |
0242                              NFS_INO_INVALID_ACL |
0243                              NFS_INO_INVALID_XATTR);
0244     else
0245         nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATTR |
0246                              NFS_INO_INVALID_ACCESS |
0247                              NFS_INO_INVALID_ACL |
0248                              NFS_INO_INVALID_XATTR);
0249     nfs_zap_label_cache_locked(nfsi);
0250 }
0251 
0252 void nfs_zap_caches(struct inode *inode)
0253 {
0254     spin_lock(&inode->i_lock);
0255     nfs_zap_caches_locked(inode);
0256     spin_unlock(&inode->i_lock);
0257 }
0258 
0259 void nfs_zap_mapping(struct inode *inode, struct address_space *mapping)
0260 {
0261     if (mapping->nrpages != 0) {
0262         spin_lock(&inode->i_lock);
0263         nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA);
0264         spin_unlock(&inode->i_lock);
0265     }
0266 }
0267 
0268 void nfs_zap_acl_cache(struct inode *inode)
0269 {
0270     void (*clear_acl_cache)(struct inode *);
0271 
0272     clear_acl_cache = NFS_PROTO(inode)->clear_acl_cache;
0273     if (clear_acl_cache != NULL)
0274         clear_acl_cache(inode);
0275     spin_lock(&inode->i_lock);
0276     NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_ACL;
0277     spin_unlock(&inode->i_lock);
0278 }
0279 EXPORT_SYMBOL_GPL(nfs_zap_acl_cache);
0280 
0281 void nfs_invalidate_atime(struct inode *inode)
0282 {
0283     spin_lock(&inode->i_lock);
0284     nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATIME);
0285     spin_unlock(&inode->i_lock);
0286 }
0287 EXPORT_SYMBOL_GPL(nfs_invalidate_atime);
0288 
0289 /*
0290  * Invalidate, but do not unhash, the inode.
0291  * NB: must be called with inode->i_lock held!
0292  */
0293 static void nfs_set_inode_stale_locked(struct inode *inode)
0294 {
0295     set_bit(NFS_INO_STALE, &NFS_I(inode)->flags);
0296     nfs_zap_caches_locked(inode);
0297     trace_nfs_set_inode_stale(inode);
0298 }
0299 
0300 void nfs_set_inode_stale(struct inode *inode)
0301 {
0302     spin_lock(&inode->i_lock);
0303     nfs_set_inode_stale_locked(inode);
0304     spin_unlock(&inode->i_lock);
0305 }
0306 
0307 struct nfs_find_desc {
0308     struct nfs_fh       *fh;
0309     struct nfs_fattr    *fattr;
0310 };
0311 
0312 /*
0313  * In NFSv3 we can have 64bit inode numbers. In order to support
0314  * this, and re-exported directories (also seen in NFSv2)
0315  * we are forced to allow 2 different inodes to have the same
0316  * i_ino.
0317  */
0318 static int
0319 nfs_find_actor(struct inode *inode, void *opaque)
0320 {
0321     struct nfs_find_desc    *desc = (struct nfs_find_desc *)opaque;
0322     struct nfs_fh       *fh = desc->fh;
0323     struct nfs_fattr    *fattr = desc->fattr;
0324 
0325     if (NFS_FILEID(inode) != fattr->fileid)
0326         return 0;
0327     if (inode_wrong_type(inode, fattr->mode))
0328         return 0;
0329     if (nfs_compare_fh(NFS_FH(inode), fh))
0330         return 0;
0331     if (is_bad_inode(inode) || NFS_STALE(inode))
0332         return 0;
0333     return 1;
0334 }
0335 
0336 static int
0337 nfs_init_locked(struct inode *inode, void *opaque)
0338 {
0339     struct nfs_find_desc    *desc = (struct nfs_find_desc *)opaque;
0340     struct nfs_fattr    *fattr = desc->fattr;
0341 
0342     set_nfs_fileid(inode, fattr->fileid);
0343     inode->i_mode = fattr->mode;
0344     nfs_copy_fh(NFS_FH(inode), desc->fh);
0345     return 0;
0346 }
0347 
0348 #ifdef CONFIG_NFS_V4_SECURITY_LABEL
0349 static void nfs_clear_label_invalid(struct inode *inode)
0350 {
0351     spin_lock(&inode->i_lock);
0352     NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_LABEL;
0353     spin_unlock(&inode->i_lock);
0354 }
0355 
0356 void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr)
0357 {
0358     int error;
0359 
0360     if (fattr->label == NULL)
0361         return;
0362 
0363     if ((fattr->valid & NFS_ATTR_FATTR_V4_SECURITY_LABEL) && inode->i_security) {
0364         error = security_inode_notifysecctx(inode, fattr->label->label,
0365                 fattr->label->len);
0366         if (error)
0367             printk(KERN_ERR "%s() %s %d "
0368                     "security_inode_notifysecctx() %d\n",
0369                     __func__,
0370                     (char *)fattr->label->label,
0371                     fattr->label->len, error);
0372         nfs_clear_label_invalid(inode);
0373     }
0374 }
0375 
0376 struct nfs4_label *nfs4_label_alloc(struct nfs_server *server, gfp_t flags)
0377 {
0378     struct nfs4_label *label;
0379 
0380     if (!(server->caps & NFS_CAP_SECURITY_LABEL))
0381         return NULL;
0382 
0383     label = kzalloc(sizeof(struct nfs4_label), flags);
0384     if (label == NULL)
0385         return ERR_PTR(-ENOMEM);
0386 
0387     label->label = kzalloc(NFS4_MAXLABELLEN, flags);
0388     if (label->label == NULL) {
0389         kfree(label);
0390         return ERR_PTR(-ENOMEM);
0391     }
0392     label->len = NFS4_MAXLABELLEN;
0393 
0394     return label;
0395 }
0396 EXPORT_SYMBOL_GPL(nfs4_label_alloc);
0397 #else
0398 void nfs_setsecurity(struct inode *inode, struct nfs_fattr *fattr)
0399 {
0400 }
0401 #endif
0402 EXPORT_SYMBOL_GPL(nfs_setsecurity);
0403 
0404 /* Search for inode identified by fh, fileid and i_mode in inode cache. */
0405 struct inode *
0406 nfs_ilookup(struct super_block *sb, struct nfs_fattr *fattr, struct nfs_fh *fh)
0407 {
0408     struct nfs_find_desc desc = {
0409         .fh = fh,
0410         .fattr  = fattr,
0411     };
0412     struct inode *inode;
0413     unsigned long hash;
0414 
0415     if (!(fattr->valid & NFS_ATTR_FATTR_FILEID) ||
0416         !(fattr->valid & NFS_ATTR_FATTR_TYPE))
0417         return NULL;
0418 
0419     hash = nfs_fattr_to_ino_t(fattr);
0420     inode = ilookup5(sb, hash, nfs_find_actor, &desc);
0421 
0422     dprintk("%s: returning %p\n", __func__, inode);
0423     return inode;
0424 }
0425 
0426 static void nfs_inode_init_regular(struct nfs_inode *nfsi)
0427 {
0428     atomic_long_set(&nfsi->nrequests, 0);
0429     atomic_long_set(&nfsi->redirtied_pages, 0);
0430     INIT_LIST_HEAD(&nfsi->commit_info.list);
0431     atomic_long_set(&nfsi->commit_info.ncommit, 0);
0432     atomic_set(&nfsi->commit_info.rpcs_out, 0);
0433     mutex_init(&nfsi->commit_mutex);
0434 }
0435 
0436 static void nfs_inode_init_dir(struct nfs_inode *nfsi)
0437 {
0438     nfsi->cache_change_attribute = 0;
0439     memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf));
0440     init_rwsem(&nfsi->rmdir_sem);
0441 }
0442 
0443 /*
0444  * This is our front-end to iget that looks up inodes by file handle
0445  * instead of inode number.
0446  */
0447 struct inode *
0448 nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)
0449 {
0450     struct nfs_find_desc desc = {
0451         .fh = fh,
0452         .fattr  = fattr
0453     };
0454     struct inode *inode = ERR_PTR(-ENOENT);
0455     u64 fattr_supported = NFS_SB(sb)->fattr_valid;
0456     unsigned long hash;
0457 
0458     nfs_attr_check_mountpoint(sb, fattr);
0459 
0460     if (nfs_attr_use_mounted_on_fileid(fattr))
0461         fattr->fileid = fattr->mounted_on_fileid;
0462     else if ((fattr->valid & NFS_ATTR_FATTR_FILEID) == 0)
0463         goto out_no_inode;
0464     if ((fattr->valid & NFS_ATTR_FATTR_TYPE) == 0)
0465         goto out_no_inode;
0466 
0467     hash = nfs_fattr_to_ino_t(fattr);
0468 
0469     inode = iget5_locked(sb, hash, nfs_find_actor, nfs_init_locked, &desc);
0470     if (inode == NULL) {
0471         inode = ERR_PTR(-ENOMEM);
0472         goto out_no_inode;
0473     }
0474 
0475     if (inode->i_state & I_NEW) {
0476         struct nfs_inode *nfsi = NFS_I(inode);
0477         unsigned long now = jiffies;
0478 
0479         /* We set i_ino for the few things that still rely on it,
0480          * such as stat(2) */
0481         inode->i_ino = hash;
0482 
0483         /* We can't support update_atime(), since the server will reset it */
0484         inode->i_flags |= S_NOATIME|S_NOCMTIME;
0485         inode->i_mode = fattr->mode;
0486         nfsi->cache_validity = 0;
0487         if ((fattr->valid & NFS_ATTR_FATTR_MODE) == 0
0488                 && (fattr_supported & NFS_ATTR_FATTR_MODE))
0489             nfs_set_cache_invalid(inode, NFS_INO_INVALID_MODE);
0490         /* Why so? Because we want revalidate for devices/FIFOs, and
0491          * that's precisely what we have in nfs_file_inode_operations.
0492          */
0493         inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->file_inode_ops;
0494         if (S_ISREG(inode->i_mode)) {
0495             inode->i_fop = NFS_SB(sb)->nfs_client->rpc_ops->file_ops;
0496             inode->i_data.a_ops = &nfs_file_aops;
0497             nfs_inode_init_regular(nfsi);
0498         } else if (S_ISDIR(inode->i_mode)) {
0499             inode->i_op = NFS_SB(sb)->nfs_client->rpc_ops->dir_inode_ops;
0500             inode->i_fop = &nfs_dir_operations;
0501             inode->i_data.a_ops = &nfs_dir_aops;
0502             nfs_inode_init_dir(nfsi);
0503             /* Deal with crossing mountpoints */
0504             if (fattr->valid & NFS_ATTR_FATTR_MOUNTPOINT ||
0505                     fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) {
0506                 if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)
0507                     inode->i_op = &nfs_referral_inode_operations;
0508                 else
0509                     inode->i_op = &nfs_mountpoint_inode_operations;
0510                 inode->i_fop = NULL;
0511                 inode->i_flags |= S_AUTOMOUNT;
0512             }
0513         } else if (S_ISLNK(inode->i_mode)) {
0514             inode->i_op = &nfs_symlink_inode_operations;
0515             inode_nohighmem(inode);
0516         } else
0517             init_special_inode(inode, inode->i_mode, fattr->rdev);
0518 
0519         memset(&inode->i_atime, 0, sizeof(inode->i_atime));
0520         memset(&inode->i_mtime, 0, sizeof(inode->i_mtime));
0521         memset(&inode->i_ctime, 0, sizeof(inode->i_ctime));
0522         inode_set_iversion_raw(inode, 0);
0523         inode->i_size = 0;
0524         clear_nlink(inode);
0525         inode->i_uid = make_kuid(&init_user_ns, -2);
0526         inode->i_gid = make_kgid(&init_user_ns, -2);
0527         inode->i_blocks = 0;
0528         nfsi->write_io = 0;
0529         nfsi->read_io = 0;
0530 
0531         nfsi->read_cache_jiffies = fattr->time_start;
0532         nfsi->attr_gencount = fattr->gencount;
0533         if (fattr->valid & NFS_ATTR_FATTR_ATIME)
0534             inode->i_atime = fattr->atime;
0535         else if (fattr_supported & NFS_ATTR_FATTR_ATIME)
0536             nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATIME);
0537         if (fattr->valid & NFS_ATTR_FATTR_MTIME)
0538             inode->i_mtime = fattr->mtime;
0539         else if (fattr_supported & NFS_ATTR_FATTR_MTIME)
0540             nfs_set_cache_invalid(inode, NFS_INO_INVALID_MTIME);
0541         if (fattr->valid & NFS_ATTR_FATTR_CTIME)
0542             inode->i_ctime = fattr->ctime;
0543         else if (fattr_supported & NFS_ATTR_FATTR_CTIME)
0544             nfs_set_cache_invalid(inode, NFS_INO_INVALID_CTIME);
0545         if (fattr->valid & NFS_ATTR_FATTR_CHANGE)
0546             inode_set_iversion_raw(inode, fattr->change_attr);
0547         else
0548             nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE);
0549         if (fattr->valid & NFS_ATTR_FATTR_SIZE)
0550             inode->i_size = nfs_size_to_loff_t(fattr->size);
0551         else
0552             nfs_set_cache_invalid(inode, NFS_INO_INVALID_SIZE);
0553         if (fattr->valid & NFS_ATTR_FATTR_NLINK)
0554             set_nlink(inode, fattr->nlink);
0555         else if (fattr_supported & NFS_ATTR_FATTR_NLINK)
0556             nfs_set_cache_invalid(inode, NFS_INO_INVALID_NLINK);
0557         if (fattr->valid & NFS_ATTR_FATTR_OWNER)
0558             inode->i_uid = fattr->uid;
0559         else if (fattr_supported & NFS_ATTR_FATTR_OWNER)
0560             nfs_set_cache_invalid(inode, NFS_INO_INVALID_OTHER);
0561         if (fattr->valid & NFS_ATTR_FATTR_GROUP)
0562             inode->i_gid = fattr->gid;
0563         else if (fattr_supported & NFS_ATTR_FATTR_GROUP)
0564             nfs_set_cache_invalid(inode, NFS_INO_INVALID_OTHER);
0565         if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
0566             inode->i_blocks = fattr->du.nfs2.blocks;
0567         else if (fattr_supported & NFS_ATTR_FATTR_BLOCKS_USED &&
0568              fattr->size != 0)
0569             nfs_set_cache_invalid(inode, NFS_INO_INVALID_BLOCKS);
0570         if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
0571             /*
0572              * report the blocks in 512byte units
0573              */
0574             inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
0575         } else if (fattr_supported & NFS_ATTR_FATTR_SPACE_USED &&
0576                fattr->size != 0)
0577             nfs_set_cache_invalid(inode, NFS_INO_INVALID_BLOCKS);
0578 
0579         nfs_setsecurity(inode, fattr);
0580 
0581         nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
0582         nfsi->attrtimeo_timestamp = now;
0583         nfsi->access_cache = RB_ROOT;
0584 
0585         nfs_fscache_init_inode(inode);
0586 
0587         unlock_new_inode(inode);
0588     } else {
0589         int err = nfs_refresh_inode(inode, fattr);
0590         if (err < 0) {
0591             iput(inode);
0592             inode = ERR_PTR(err);
0593             goto out_no_inode;
0594         }
0595     }
0596     dprintk("NFS: nfs_fhget(%s/%Lu fh_crc=0x%08x ct=%d)\n",
0597         inode->i_sb->s_id,
0598         (unsigned long long)NFS_FILEID(inode),
0599         nfs_display_fhandle_hash(fh),
0600         atomic_read(&inode->i_count));
0601 
0602 out:
0603     return inode;
0604 
0605 out_no_inode:
0606     dprintk("nfs_fhget: iget failed with error %ld\n", PTR_ERR(inode));
0607     goto out;
0608 }
0609 EXPORT_SYMBOL_GPL(nfs_fhget);
0610 
0611 #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)
0612 
0613 int
0614 nfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
0615         struct iattr *attr)
0616 {
0617     struct inode *inode = d_inode(dentry);
0618     struct nfs_fattr *fattr;
0619     int error = 0;
0620 
0621     nfs_inc_stats(inode, NFSIOS_VFSSETATTR);
0622 
0623     /* skip mode change if it's just for clearing setuid/setgid */
0624     if (attr->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID))
0625         attr->ia_valid &= ~ATTR_MODE;
0626 
0627     if (attr->ia_valid & ATTR_SIZE) {
0628         BUG_ON(!S_ISREG(inode->i_mode));
0629 
0630         error = inode_newsize_ok(inode, attr->ia_size);
0631         if (error)
0632             return error;
0633 
0634         if (attr->ia_size == i_size_read(inode))
0635             attr->ia_valid &= ~ATTR_SIZE;
0636     }
0637 
0638     /* Optimization: if the end result is no change, don't RPC */
0639     if (((attr->ia_valid & NFS_VALID_ATTRS) & ~(ATTR_FILE|ATTR_OPEN)) == 0)
0640         return 0;
0641 
0642     trace_nfs_setattr_enter(inode);
0643 
0644     /* Write all dirty data */
0645     if (S_ISREG(inode->i_mode))
0646         nfs_sync_inode(inode);
0647 
0648     fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode));
0649     if (fattr == NULL) {
0650         error = -ENOMEM;
0651         goto out;
0652     }
0653 
0654     error = NFS_PROTO(inode)->setattr(dentry, fattr, attr);
0655     if (error == 0)
0656         error = nfs_refresh_inode(inode, fattr);
0657     nfs_free_fattr(fattr);
0658 out:
0659     trace_nfs_setattr_exit(inode, error);
0660     return error;
0661 }
0662 EXPORT_SYMBOL_GPL(nfs_setattr);
0663 
0664 /**
0665  * nfs_vmtruncate - unmap mappings "freed" by truncate() syscall
0666  * @inode: inode of the file used
0667  * @offset: file offset to start truncating
0668  *
0669  * This is a copy of the common vmtruncate, but with the locking
0670  * corrected to take into account the fact that NFS requires
0671  * inode->i_size to be updated under the inode->i_lock.
0672  * Note: must be called with inode->i_lock held!
0673  */
0674 static int nfs_vmtruncate(struct inode * inode, loff_t offset)
0675 {
0676     int err;
0677 
0678     err = inode_newsize_ok(inode, offset);
0679     if (err)
0680         goto out;
0681 
0682     trace_nfs_size_truncate(inode, offset);
0683     i_size_write(inode, offset);
0684     /* Optimisation */
0685     if (offset == 0)
0686         NFS_I(inode)->cache_validity &= ~(NFS_INO_INVALID_DATA |
0687                 NFS_INO_DATA_INVAL_DEFER);
0688     NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_SIZE;
0689 
0690     spin_unlock(&inode->i_lock);
0691     truncate_pagecache(inode, offset);
0692     spin_lock(&inode->i_lock);
0693 out:
0694     return err;
0695 }
0696 
0697 /**
0698  * nfs_setattr_update_inode - Update inode metadata after a setattr call.
0699  * @inode: pointer to struct inode
0700  * @attr: pointer to struct iattr
0701  * @fattr: pointer to struct nfs_fattr
0702  *
0703  * Note: we do this in the *proc.c in order to ensure that
0704  *       it works for things like exclusive creates too.
0705  */
0706 void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr,
0707         struct nfs_fattr *fattr)
0708 {
0709     /* Barrier: bump the attribute generation count. */
0710     nfs_fattr_set_barrier(fattr);
0711 
0712     spin_lock(&inode->i_lock);
0713     NFS_I(inode)->attr_gencount = fattr->gencount;
0714     if ((attr->ia_valid & ATTR_SIZE) != 0) {
0715         nfs_set_cache_invalid(inode, NFS_INO_INVALID_MTIME |
0716                              NFS_INO_INVALID_BLOCKS);
0717         nfs_inc_stats(inode, NFSIOS_SETATTRTRUNC);
0718         nfs_vmtruncate(inode, attr->ia_size);
0719     }
0720     if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) {
0721         NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_CTIME;
0722         if ((attr->ia_valid & ATTR_KILL_SUID) != 0 &&
0723             inode->i_mode & S_ISUID)
0724             inode->i_mode &= ~S_ISUID;
0725         if ((attr->ia_valid & ATTR_KILL_SGID) != 0 &&
0726             (inode->i_mode & (S_ISGID | S_IXGRP)) ==
0727              (S_ISGID | S_IXGRP))
0728             inode->i_mode &= ~S_ISGID;
0729         if ((attr->ia_valid & ATTR_MODE) != 0) {
0730             int mode = attr->ia_mode & S_IALLUGO;
0731             mode |= inode->i_mode & ~S_IALLUGO;
0732             inode->i_mode = mode;
0733         }
0734         if ((attr->ia_valid & ATTR_UID) != 0)
0735             inode->i_uid = attr->ia_uid;
0736         if ((attr->ia_valid & ATTR_GID) != 0)
0737             inode->i_gid = attr->ia_gid;
0738         if (fattr->valid & NFS_ATTR_FATTR_CTIME)
0739             inode->i_ctime = fattr->ctime;
0740         else
0741             nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE
0742                     | NFS_INO_INVALID_CTIME);
0743         nfs_set_cache_invalid(inode, NFS_INO_INVALID_ACCESS
0744                 | NFS_INO_INVALID_ACL);
0745     }
0746     if (attr->ia_valid & (ATTR_ATIME_SET|ATTR_ATIME)) {
0747         NFS_I(inode)->cache_validity &= ~(NFS_INO_INVALID_ATIME
0748                 | NFS_INO_INVALID_CTIME);
0749         if (fattr->valid & NFS_ATTR_FATTR_ATIME)
0750             inode->i_atime = fattr->atime;
0751         else if (attr->ia_valid & ATTR_ATIME_SET)
0752             inode->i_atime = attr->ia_atime;
0753         else
0754             nfs_set_cache_invalid(inode, NFS_INO_INVALID_ATIME);
0755 
0756         if (fattr->valid & NFS_ATTR_FATTR_CTIME)
0757             inode->i_ctime = fattr->ctime;
0758         else
0759             nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE
0760                     | NFS_INO_INVALID_CTIME);
0761     }
0762     if (attr->ia_valid & (ATTR_MTIME_SET|ATTR_MTIME)) {
0763         NFS_I(inode)->cache_validity &= ~(NFS_INO_INVALID_MTIME
0764                 | NFS_INO_INVALID_CTIME);
0765         if (fattr->valid & NFS_ATTR_FATTR_MTIME)
0766             inode->i_mtime = fattr->mtime;
0767         else if (attr->ia_valid & ATTR_MTIME_SET)
0768             inode->i_mtime = attr->ia_mtime;
0769         else
0770             nfs_set_cache_invalid(inode, NFS_INO_INVALID_MTIME);
0771 
0772         if (fattr->valid & NFS_ATTR_FATTR_CTIME)
0773             inode->i_ctime = fattr->ctime;
0774         else
0775             nfs_set_cache_invalid(inode, NFS_INO_INVALID_CHANGE
0776                     | NFS_INO_INVALID_CTIME);
0777     }
0778     if (fattr->valid)
0779         nfs_update_inode(inode, fattr);
0780     spin_unlock(&inode->i_lock);
0781 }
0782 EXPORT_SYMBOL_GPL(nfs_setattr_update_inode);
0783 
0784 /*
0785  * Don't request help from readdirplus if the file is being written to,
0786  * or if attribute caching is turned off
0787  */
0788 static bool nfs_getattr_readdirplus_enable(const struct inode *inode)
0789 {
0790     return nfs_server_capable(inode, NFS_CAP_READDIRPLUS) &&
0791            !nfs_have_writebacks(inode) && NFS_MAXATTRTIMEO(inode) > 5 * HZ;
0792 }
0793 
0794 static void nfs_readdirplus_parent_cache_miss(struct dentry *dentry)
0795 {
0796     if (!IS_ROOT(dentry)) {
0797         struct dentry *parent = dget_parent(dentry);
0798         nfs_readdir_record_entry_cache_miss(d_inode(parent));
0799         dput(parent);
0800     }
0801 }
0802 
0803 static void nfs_readdirplus_parent_cache_hit(struct dentry *dentry)
0804 {
0805     if (!IS_ROOT(dentry)) {
0806         struct dentry *parent = dget_parent(dentry);
0807         nfs_readdir_record_entry_cache_hit(d_inode(parent));
0808         dput(parent);
0809     }
0810 }
0811 
0812 static u32 nfs_get_valid_attrmask(struct inode *inode)
0813 {
0814     unsigned long cache_validity = READ_ONCE(NFS_I(inode)->cache_validity);
0815     u32 reply_mask = STATX_INO | STATX_TYPE;
0816 
0817     if (!(cache_validity & NFS_INO_INVALID_ATIME))
0818         reply_mask |= STATX_ATIME;
0819     if (!(cache_validity & NFS_INO_INVALID_CTIME))
0820         reply_mask |= STATX_CTIME;
0821     if (!(cache_validity & NFS_INO_INVALID_MTIME))
0822         reply_mask |= STATX_MTIME;
0823     if (!(cache_validity & NFS_INO_INVALID_SIZE))
0824         reply_mask |= STATX_SIZE;
0825     if (!(cache_validity & NFS_INO_INVALID_NLINK))
0826         reply_mask |= STATX_NLINK;
0827     if (!(cache_validity & NFS_INO_INVALID_MODE))
0828         reply_mask |= STATX_MODE;
0829     if (!(cache_validity & NFS_INO_INVALID_OTHER))
0830         reply_mask |= STATX_UID | STATX_GID;
0831     if (!(cache_validity & NFS_INO_INVALID_BLOCKS))
0832         reply_mask |= STATX_BLOCKS;
0833     return reply_mask;
0834 }
0835 
0836 int nfs_getattr(struct user_namespace *mnt_userns, const struct path *path,
0837         struct kstat *stat, u32 request_mask, unsigned int query_flags)
0838 {
0839     struct inode *inode = d_inode(path->dentry);
0840     struct nfs_server *server = NFS_SERVER(inode);
0841     unsigned long cache_validity;
0842     int err = 0;
0843     bool force_sync = query_flags & AT_STATX_FORCE_SYNC;
0844     bool do_update = false;
0845     bool readdirplus_enabled = nfs_getattr_readdirplus_enable(inode);
0846 
0847     trace_nfs_getattr_enter(inode);
0848 
0849     request_mask &= STATX_TYPE | STATX_MODE | STATX_NLINK | STATX_UID |
0850             STATX_GID | STATX_ATIME | STATX_MTIME | STATX_CTIME |
0851             STATX_INO | STATX_SIZE | STATX_BLOCKS;
0852 
0853     if ((query_flags & AT_STATX_DONT_SYNC) && !force_sync) {
0854         if (readdirplus_enabled)
0855             nfs_readdirplus_parent_cache_hit(path->dentry);
0856         goto out_no_revalidate;
0857     }
0858 
0859     /* Flush out writes to the server in order to update c/mtime.  */
0860     if ((request_mask & (STATX_CTIME | STATX_MTIME)) &&
0861         S_ISREG(inode->i_mode))
0862         filemap_write_and_wait(inode->i_mapping);
0863 
0864     /*
0865      * We may force a getattr if the user cares about atime.
0866      *
0867      * Note that we only have to check the vfsmount flags here:
0868      *  - NFS always sets S_NOATIME by so checking it would give a
0869      *    bogus result
0870      *  - NFS never sets SB_NOATIME or SB_NODIRATIME so there is
0871      *    no point in checking those.
0872      */
0873     if ((path->mnt->mnt_flags & MNT_NOATIME) ||
0874         ((path->mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode)))
0875         request_mask &= ~STATX_ATIME;
0876 
0877     /* Is the user requesting attributes that might need revalidation? */
0878     if (!(request_mask & (STATX_MODE|STATX_NLINK|STATX_ATIME|STATX_CTIME|
0879                     STATX_MTIME|STATX_UID|STATX_GID|
0880                     STATX_SIZE|STATX_BLOCKS)))
0881         goto out_no_revalidate;
0882 
0883     /* Check whether the cached attributes are stale */
0884     do_update |= force_sync || nfs_attribute_cache_expired(inode);
0885     cache_validity = READ_ONCE(NFS_I(inode)->cache_validity);
0886     do_update |= cache_validity & NFS_INO_INVALID_CHANGE;
0887     if (request_mask & STATX_ATIME)
0888         do_update |= cache_validity & NFS_INO_INVALID_ATIME;
0889     if (request_mask & STATX_CTIME)
0890         do_update |= cache_validity & NFS_INO_INVALID_CTIME;
0891     if (request_mask & STATX_MTIME)
0892         do_update |= cache_validity & NFS_INO_INVALID_MTIME;
0893     if (request_mask & STATX_SIZE)
0894         do_update |= cache_validity & NFS_INO_INVALID_SIZE;
0895     if (request_mask & STATX_NLINK)
0896         do_update |= cache_validity & NFS_INO_INVALID_NLINK;
0897     if (request_mask & STATX_MODE)
0898         do_update |= cache_validity & NFS_INO_INVALID_MODE;
0899     if (request_mask & (STATX_UID | STATX_GID))
0900         do_update |= cache_validity & NFS_INO_INVALID_OTHER;
0901     if (request_mask & STATX_BLOCKS)
0902         do_update |= cache_validity & NFS_INO_INVALID_BLOCKS;
0903 
0904     if (do_update) {
0905         if (readdirplus_enabled)
0906             nfs_readdirplus_parent_cache_miss(path->dentry);
0907         err = __nfs_revalidate_inode(server, inode);
0908         if (err)
0909             goto out;
0910     } else if (readdirplus_enabled)
0911         nfs_readdirplus_parent_cache_hit(path->dentry);
0912 out_no_revalidate:
0913     /* Only return attributes that were revalidated. */
0914     stat->result_mask = nfs_get_valid_attrmask(inode) | request_mask;
0915 
0916     generic_fillattr(&init_user_ns, inode, stat);
0917     stat->ino = nfs_compat_user_ino64(NFS_FILEID(inode));
0918     if (S_ISDIR(inode->i_mode))
0919         stat->blksize = NFS_SERVER(inode)->dtsize;
0920 out:
0921     trace_nfs_getattr_exit(inode, err);
0922     return err;
0923 }
0924 EXPORT_SYMBOL_GPL(nfs_getattr);
0925 
0926 static void nfs_init_lock_context(struct nfs_lock_context *l_ctx)
0927 {
0928     refcount_set(&l_ctx->count, 1);
0929     l_ctx->lockowner = current->files;
0930     INIT_LIST_HEAD(&l_ctx->list);
0931     atomic_set(&l_ctx->io_count, 0);
0932 }
0933 
0934 static struct nfs_lock_context *__nfs_find_lock_context(struct nfs_open_context *ctx)
0935 {
0936     struct nfs_lock_context *pos;
0937 
0938     list_for_each_entry_rcu(pos, &ctx->lock_context.list, list) {
0939         if (pos->lockowner != current->files)
0940             continue;
0941         if (refcount_inc_not_zero(&pos->count))
0942             return pos;
0943     }
0944     return NULL;
0945 }
0946 
0947 struct nfs_lock_context *nfs_get_lock_context(struct nfs_open_context *ctx)
0948 {
0949     struct nfs_lock_context *res, *new = NULL;
0950     struct inode *inode = d_inode(ctx->dentry);
0951 
0952     rcu_read_lock();
0953     res = __nfs_find_lock_context(ctx);
0954     rcu_read_unlock();
0955     if (res == NULL) {
0956         new = kmalloc(sizeof(*new), GFP_KERNEL_ACCOUNT);
0957         if (new == NULL)
0958             return ERR_PTR(-ENOMEM);
0959         nfs_init_lock_context(new);
0960         spin_lock(&inode->i_lock);
0961         res = __nfs_find_lock_context(ctx);
0962         if (res == NULL) {
0963             new->open_context = get_nfs_open_context(ctx);
0964             if (new->open_context) {
0965                 list_add_tail_rcu(&new->list,
0966                         &ctx->lock_context.list);
0967                 res = new;
0968                 new = NULL;
0969             } else
0970                 res = ERR_PTR(-EBADF);
0971         }
0972         spin_unlock(&inode->i_lock);
0973         kfree(new);
0974     }
0975     return res;
0976 }
0977 EXPORT_SYMBOL_GPL(nfs_get_lock_context);
0978 
0979 void nfs_put_lock_context(struct nfs_lock_context *l_ctx)
0980 {
0981     struct nfs_open_context *ctx = l_ctx->open_context;
0982     struct inode *inode = d_inode(ctx->dentry);
0983 
0984     if (!refcount_dec_and_lock(&l_ctx->count, &inode->i_lock))
0985         return;
0986     list_del_rcu(&l_ctx->list);
0987     spin_unlock(&inode->i_lock);
0988     put_nfs_open_context(ctx);
0989     kfree_rcu(l_ctx, rcu_head);
0990 }
0991 EXPORT_SYMBOL_GPL(nfs_put_lock_context);
0992 
0993 /**
0994  * nfs_close_context - Common close_context() routine NFSv2/v3
0995  * @ctx: pointer to context
0996  * @is_sync: is this a synchronous close
0997  *
0998  * Ensure that the attributes are up to date if we're mounted
0999  * with close-to-open semantics and we have cached data that will
1000  * need to be revalidated on open.
1001  */
1002 void nfs_close_context(struct nfs_open_context *ctx, int is_sync)
1003 {
1004     struct nfs_inode *nfsi;
1005     struct inode *inode;
1006 
1007     if (!(ctx->mode & FMODE_WRITE))
1008         return;
1009     if (!is_sync)
1010         return;
1011     inode = d_inode(ctx->dentry);
1012     if (NFS_PROTO(inode)->have_delegation(inode, FMODE_READ))
1013         return;
1014     nfsi = NFS_I(inode);
1015     if (inode->i_mapping->nrpages == 0)
1016         return;
1017     if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
1018         return;
1019     if (!list_empty(&nfsi->open_files))
1020         return;
1021     if (NFS_SERVER(inode)->flags & NFS_MOUNT_NOCTO)
1022         return;
1023     nfs_revalidate_inode(inode,
1024                  NFS_INO_INVALID_CHANGE | NFS_INO_INVALID_SIZE);
1025 }
1026 EXPORT_SYMBOL_GPL(nfs_close_context);
1027 
1028 struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry,
1029                         fmode_t f_mode,
1030                         struct file *filp)
1031 {
1032     struct nfs_open_context *ctx;
1033 
1034     ctx = kmalloc(sizeof(*ctx), GFP_KERNEL_ACCOUNT);
1035     if (!ctx)
1036         return ERR_PTR(-ENOMEM);
1037     nfs_sb_active(dentry->d_sb);
1038     ctx->dentry = dget(dentry);
1039     if (filp)
1040         ctx->cred = get_cred(filp->f_cred);
1041     else
1042         ctx->cred = get_current_cred();
1043     rcu_assign_pointer(ctx->ll_cred, NULL);
1044     ctx->state = NULL;
1045     ctx->mode = f_mode;
1046     ctx->flags = 0;
1047     ctx->error = 0;
1048     ctx->flock_owner = (fl_owner_t)filp;
1049     nfs_init_lock_context(&ctx->lock_context);
1050     ctx->lock_context.open_context = ctx;
1051     INIT_LIST_HEAD(&ctx->list);
1052     ctx->mdsthreshold = NULL;
1053     return ctx;
1054 }
1055 EXPORT_SYMBOL_GPL(alloc_nfs_open_context);
1056 
1057 struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx)
1058 {
1059     if (ctx != NULL && refcount_inc_not_zero(&ctx->lock_context.count))
1060         return ctx;
1061     return NULL;
1062 }
1063 EXPORT_SYMBOL_GPL(get_nfs_open_context);
1064 
1065 static void __put_nfs_open_context(struct nfs_open_context *ctx, int is_sync)
1066 {
1067     struct inode *inode = d_inode(ctx->dentry);
1068     struct super_block *sb = ctx->dentry->d_sb;
1069 
1070     if (!refcount_dec_and_test(&ctx->lock_context.count))
1071         return;
1072     if (!list_empty(&ctx->list)) {
1073         spin_lock(&inode->i_lock);
1074         list_del_rcu(&ctx->list);
1075         spin_unlock(&inode->i_lock);
1076     }
1077     if (inode != NULL)
1078         NFS_PROTO(inode)->close_context(ctx, is_sync);
1079     put_cred(ctx->cred);
1080     dput(ctx->dentry);
1081     nfs_sb_deactive(sb);
1082     put_rpccred(rcu_dereference_protected(ctx->ll_cred, 1));
1083     kfree(ctx->mdsthreshold);
1084     kfree_rcu(ctx, rcu_head);
1085 }
1086 
1087 void put_nfs_open_context(struct nfs_open_context *ctx)
1088 {
1089     __put_nfs_open_context(ctx, 0);
1090 }
1091 EXPORT_SYMBOL_GPL(put_nfs_open_context);
1092 
1093 static void put_nfs_open_context_sync(struct nfs_open_context *ctx)
1094 {
1095     __put_nfs_open_context(ctx, 1);
1096 }
1097 
1098 /*
1099  * Ensure that mmap has a recent RPC credential for use when writing out
1100  * shared pages
1101  */
1102 void nfs_inode_attach_open_context(struct nfs_open_context *ctx)
1103 {
1104     struct inode *inode = d_inode(ctx->dentry);
1105     struct nfs_inode *nfsi = NFS_I(inode);
1106 
1107     spin_lock(&inode->i_lock);
1108     if (list_empty(&nfsi->open_files) &&
1109         (nfsi->cache_validity & NFS_INO_DATA_INVAL_DEFER))
1110         nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA |
1111                              NFS_INO_REVAL_FORCED);
1112     list_add_tail_rcu(&ctx->list, &nfsi->open_files);
1113     spin_unlock(&inode->i_lock);
1114 }
1115 EXPORT_SYMBOL_GPL(nfs_inode_attach_open_context);
1116 
1117 void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx)
1118 {
1119     filp->private_data = get_nfs_open_context(ctx);
1120     set_bit(NFS_CONTEXT_FILE_OPEN, &ctx->flags);
1121     if (list_empty(&ctx->list))
1122         nfs_inode_attach_open_context(ctx);
1123 }
1124 EXPORT_SYMBOL_GPL(nfs_file_set_open_context);
1125 
1126 /*
1127  * Given an inode, search for an open context with the desired characteristics
1128  */
1129 struct nfs_open_context *nfs_find_open_context(struct inode *inode, const struct cred *cred, fmode_t mode)
1130 {
1131     struct nfs_inode *nfsi = NFS_I(inode);
1132     struct nfs_open_context *pos, *ctx = NULL;
1133 
1134     rcu_read_lock();
1135     list_for_each_entry_rcu(pos, &nfsi->open_files, list) {
1136         if (cred != NULL && cred_fscmp(pos->cred, cred) != 0)
1137             continue;
1138         if ((pos->mode & (FMODE_READ|FMODE_WRITE)) != mode)
1139             continue;
1140         if (!test_bit(NFS_CONTEXT_FILE_OPEN, &pos->flags))
1141             continue;
1142         ctx = get_nfs_open_context(pos);
1143         if (ctx)
1144             break;
1145     }
1146     rcu_read_unlock();
1147     return ctx;
1148 }
1149 
1150 void nfs_file_clear_open_context(struct file *filp)
1151 {
1152     struct nfs_open_context *ctx = nfs_file_open_context(filp);
1153 
1154     if (ctx) {
1155         struct inode *inode = d_inode(ctx->dentry);
1156 
1157         clear_bit(NFS_CONTEXT_FILE_OPEN, &ctx->flags);
1158         /*
1159          * We fatal error on write before. Try to writeback
1160          * every page again.
1161          */
1162         if (ctx->error < 0)
1163             invalidate_inode_pages2(inode->i_mapping);
1164         filp->private_data = NULL;
1165         put_nfs_open_context_sync(ctx);
1166     }
1167 }
1168 
1169 /*
1170  * These allocate and release file read/write context information.
1171  */
1172 int nfs_open(struct inode *inode, struct file *filp)
1173 {
1174     struct nfs_open_context *ctx;
1175 
1176     ctx = alloc_nfs_open_context(file_dentry(filp), filp->f_mode, filp);
1177     if (IS_ERR(ctx))
1178         return PTR_ERR(ctx);
1179     nfs_file_set_open_context(filp, ctx);
1180     put_nfs_open_context(ctx);
1181     nfs_fscache_open_file(inode, filp);
1182     return 0;
1183 }
1184 
1185 /*
1186  * This function is called whenever some part of NFS notices that
1187  * the cached attributes have to be refreshed.
1188  */
1189 int
1190 __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
1191 {
1192     int      status = -ESTALE;
1193     struct nfs_fattr *fattr = NULL;
1194     struct nfs_inode *nfsi = NFS_I(inode);
1195 
1196     dfprintk(PAGECACHE, "NFS: revalidating (%s/%Lu)\n",
1197         inode->i_sb->s_id, (unsigned long long)NFS_FILEID(inode));
1198 
1199     trace_nfs_revalidate_inode_enter(inode);
1200 
1201     if (is_bad_inode(inode))
1202         goto out;
1203     if (NFS_STALE(inode))
1204         goto out;
1205 
1206     /* pNFS: Attributes aren't updated until we layoutcommit */
1207     if (S_ISREG(inode->i_mode)) {
1208         status = pnfs_sync_inode(inode, false);
1209         if (status)
1210             goto out;
1211     }
1212 
1213     status = -ENOMEM;
1214     fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode));
1215     if (fattr == NULL)
1216         goto out;
1217 
1218     nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE);
1219 
1220     status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr, inode);
1221     if (status != 0) {
1222         dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) getattr failed, error=%d\n",
1223              inode->i_sb->s_id,
1224              (unsigned long long)NFS_FILEID(inode), status);
1225         switch (status) {
1226         case -ETIMEDOUT:
1227             /* A soft timeout occurred. Use cached information? */
1228             if (server->flags & NFS_MOUNT_SOFTREVAL)
1229                 status = 0;
1230             break;
1231         case -ESTALE:
1232             if (!S_ISDIR(inode->i_mode))
1233                 nfs_set_inode_stale(inode);
1234             else
1235                 nfs_zap_caches(inode);
1236         }
1237         goto out;
1238     }
1239 
1240     status = nfs_refresh_inode(inode, fattr);
1241     if (status) {
1242         dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) refresh failed, error=%d\n",
1243              inode->i_sb->s_id,
1244              (unsigned long long)NFS_FILEID(inode), status);
1245         goto out;
1246     }
1247 
1248     if (nfsi->cache_validity & NFS_INO_INVALID_ACL)
1249         nfs_zap_acl_cache(inode);
1250 
1251     nfs_setsecurity(inode, fattr);
1252 
1253     dfprintk(PAGECACHE, "NFS: (%s/%Lu) revalidation complete\n",
1254         inode->i_sb->s_id,
1255         (unsigned long long)NFS_FILEID(inode));
1256 
1257 out:
1258     nfs_free_fattr(fattr);
1259     trace_nfs_revalidate_inode_exit(inode, status);
1260     return status;
1261 }
1262 
1263 int nfs_attribute_cache_expired(struct inode *inode)
1264 {
1265     if (nfs_have_delegated_attributes(inode))
1266         return 0;
1267     return nfs_attribute_timeout(inode);
1268 }
1269 
1270 /**
1271  * nfs_revalidate_inode - Revalidate the inode attributes
1272  * @inode: pointer to inode struct
1273  * @flags: cache flags to check
1274  *
1275  * Updates inode attribute information by retrieving the data from the server.
1276  */
1277 int nfs_revalidate_inode(struct inode *inode, unsigned long flags)
1278 {
1279     if (!nfs_check_cache_invalid(inode, flags))
1280         return NFS_STALE(inode) ? -ESTALE : 0;
1281     return __nfs_revalidate_inode(NFS_SERVER(inode), inode);
1282 }
1283 EXPORT_SYMBOL_GPL(nfs_revalidate_inode);
1284 
1285 static int nfs_invalidate_mapping(struct inode *inode, struct address_space *mapping)
1286 {
1287     int ret;
1288 
1289     nfs_fscache_invalidate(inode, 0);
1290     if (mapping->nrpages != 0) {
1291         if (S_ISREG(inode->i_mode)) {
1292             ret = nfs_sync_mapping(mapping);
1293             if (ret < 0)
1294                 return ret;
1295         }
1296         ret = invalidate_inode_pages2(mapping);
1297         if (ret < 0)
1298             return ret;
1299     }
1300     nfs_inc_stats(inode, NFSIOS_DATAINVALIDATE);
1301 
1302     dfprintk(PAGECACHE, "NFS: (%s/%Lu) data cache invalidated\n",
1303             inode->i_sb->s_id,
1304             (unsigned long long)NFS_FILEID(inode));
1305     return 0;
1306 }
1307 
1308 /**
1309  * nfs_clear_invalid_mapping - Conditionally clear a mapping
1310  * @mapping: pointer to mapping
1311  *
1312  * If the NFS_INO_INVALID_DATA inode flag is set, clear the mapping.
1313  */
1314 int nfs_clear_invalid_mapping(struct address_space *mapping)
1315 {
1316     struct inode *inode = mapping->host;
1317     struct nfs_inode *nfsi = NFS_I(inode);
1318     unsigned long *bitlock = &nfsi->flags;
1319     int ret = 0;
1320 
1321     /*
1322      * We must clear NFS_INO_INVALID_DATA first to ensure that
1323      * invalidations that come in while we're shooting down the mappings
1324      * are respected. But, that leaves a race window where one revalidator
1325      * can clear the flag, and then another checks it before the mapping
1326      * gets invalidated. Fix that by serializing access to this part of
1327      * the function.
1328      *
1329      * At the same time, we need to allow other tasks to see whether we
1330      * might be in the middle of invalidating the pages, so we only set
1331      * the bit lock here if it looks like we're going to be doing that.
1332      */
1333     for (;;) {
1334         ret = wait_on_bit_action(bitlock, NFS_INO_INVALIDATING,
1335                      nfs_wait_bit_killable, TASK_KILLABLE);
1336         if (ret)
1337             goto out;
1338         spin_lock(&inode->i_lock);
1339         if (test_bit(NFS_INO_INVALIDATING, bitlock)) {
1340             spin_unlock(&inode->i_lock);
1341             continue;
1342         }
1343         if (nfsi->cache_validity & NFS_INO_INVALID_DATA)
1344             break;
1345         spin_unlock(&inode->i_lock);
1346         goto out;
1347     }
1348 
1349     set_bit(NFS_INO_INVALIDATING, bitlock);
1350     smp_wmb();
1351     nfsi->cache_validity &=
1352         ~(NFS_INO_INVALID_DATA | NFS_INO_DATA_INVAL_DEFER);
1353     spin_unlock(&inode->i_lock);
1354     trace_nfs_invalidate_mapping_enter(inode);
1355     ret = nfs_invalidate_mapping(inode, mapping);
1356     trace_nfs_invalidate_mapping_exit(inode, ret);
1357 
1358     clear_bit_unlock(NFS_INO_INVALIDATING, bitlock);
1359     smp_mb__after_atomic();
1360     wake_up_bit(bitlock, NFS_INO_INVALIDATING);
1361 out:
1362     return ret;
1363 }
1364 
1365 bool nfs_mapping_need_revalidate_inode(struct inode *inode)
1366 {
1367     return nfs_check_cache_invalid(inode, NFS_INO_INVALID_CHANGE) ||
1368         NFS_STALE(inode);
1369 }
1370 
1371 int nfs_revalidate_mapping_rcu(struct inode *inode)
1372 {
1373     struct nfs_inode *nfsi = NFS_I(inode);
1374     unsigned long *bitlock = &nfsi->flags;
1375     int ret = 0;
1376 
1377     if (IS_SWAPFILE(inode))
1378         goto out;
1379     if (nfs_mapping_need_revalidate_inode(inode)) {
1380         ret = -ECHILD;
1381         goto out;
1382     }
1383     spin_lock(&inode->i_lock);
1384     if (test_bit(NFS_INO_INVALIDATING, bitlock) ||
1385         (nfsi->cache_validity & NFS_INO_INVALID_DATA))
1386         ret = -ECHILD;
1387     spin_unlock(&inode->i_lock);
1388 out:
1389     return ret;
1390 }
1391 
1392 /**
1393  * nfs_revalidate_mapping - Revalidate the pagecache
1394  * @inode: pointer to host inode
1395  * @mapping: pointer to mapping
1396  */
1397 int nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
1398 {
1399     /* swapfiles are not supposed to be shared. */
1400     if (IS_SWAPFILE(inode))
1401         return 0;
1402 
1403     if (nfs_mapping_need_revalidate_inode(inode)) {
1404         int ret = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
1405         if (ret < 0)
1406             return ret;
1407     }
1408 
1409     return nfs_clear_invalid_mapping(mapping);
1410 }
1411 
1412 static bool nfs_file_has_writers(struct nfs_inode *nfsi)
1413 {
1414     struct inode *inode = &nfsi->vfs_inode;
1415 
1416     if (!S_ISREG(inode->i_mode))
1417         return false;
1418     if (list_empty(&nfsi->open_files))
1419         return false;
1420     return inode_is_open_for_write(inode);
1421 }
1422 
1423 static bool nfs_file_has_buffered_writers(struct nfs_inode *nfsi)
1424 {
1425     return nfs_file_has_writers(nfsi) && nfs_file_io_is_buffered(nfsi);
1426 }
1427 
1428 static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1429 {
1430     struct timespec64 ts;
1431 
1432     if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE)
1433             && (fattr->valid & NFS_ATTR_FATTR_CHANGE)
1434             && inode_eq_iversion_raw(inode, fattr->pre_change_attr)) {
1435         inode_set_iversion_raw(inode, fattr->change_attr);
1436         if (S_ISDIR(inode->i_mode))
1437             nfs_set_cache_invalid(inode, NFS_INO_INVALID_DATA);
1438         else if (nfs_server_capable(inode, NFS_CAP_XATTR))
1439             nfs_set_cache_invalid(inode, NFS_INO_INVALID_XATTR);
1440     }
1441     /* If we have atomic WCC data, we may update some attributes */
1442     ts = inode->i_ctime;
1443     if ((fattr->valid & NFS_ATTR_FATTR_PRECTIME)
1444             && (fattr->valid & NFS_ATTR_FATTR_CTIME)
1445             && timespec64_equal(&ts, &fattr->pre_ctime)) {
1446         inode->i_ctime = fattr->ctime;
1447     }
1448 
1449     ts = inode->i_mtime;
1450     if ((fattr->valid & NFS_ATTR_FATTR_PREMTIME)
1451             && (fattr->valid & NFS_ATTR_FATTR_MTIME)
1452             && timespec64_equal(&ts, &fattr->pre_mtime)) {
1453         inode->i_mtime = fattr->mtime;
1454     }
1455     if ((fattr->valid & NFS_ATTR_FATTR_PRESIZE)
1456             && (fattr->valid & NFS_ATTR_FATTR_SIZE)
1457             && i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size)
1458             && !nfs_have_writebacks(inode)) {
1459         trace_nfs_size_wcc(inode, fattr->size);
1460         i_size_write(inode, nfs_size_to_loff_t(fattr->size));
1461     }
1462 }
1463 
1464 /**
1465  * nfs_check_inode_attributes - verify consistency of the inode attribute cache
1466  * @inode: pointer to inode
1467  * @fattr: updated attributes
1468  *
1469  * Verifies the attribute cache. If we have just changed the attributes,
1470  * so that fattr carries weak cache consistency data, then it may
1471  * also update the ctime/mtime/change_attribute.
1472  */
1473 static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr)
1474 {
1475     struct nfs_inode *nfsi = NFS_I(inode);
1476     loff_t cur_size, new_isize;
1477     unsigned long invalid = 0;
1478     struct timespec64 ts;
1479 
1480     if (NFS_PROTO(inode)->have_delegation(inode, FMODE_READ))
1481         return 0;
1482 
1483     if (!(fattr->valid & NFS_ATTR_FATTR_FILEID)) {
1484         /* Only a mounted-on-fileid? Just exit */
1485         if (fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID)
1486             return 0;
1487     /* Has the inode gone and changed behind our back? */
1488     } else if (nfsi->fileid != fattr->fileid) {
1489         /* Is this perhaps the mounted-on fileid? */
1490         if ((fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID) &&
1491             nfsi->fileid == fattr->mounted_on_fileid)
1492             return 0;
1493         return -ESTALE;
1494     }
1495     if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && inode_wrong_type(inode, fattr->mode))
1496         return -ESTALE;
1497 
1498 
1499     if (!nfs_file_has_buffered_writers(nfsi)) {
1500         /* Verify a few of the more important attributes */
1501         if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 && !inode_eq_iversion_raw(inode, fattr->change_attr))
1502             invalid |= NFS_INO_INVALID_CHANGE;
1503 
1504         ts = inode->i_mtime;
1505         if ((fattr->valid & NFS_ATTR_FATTR_MTIME) && !timespec64_equal(&ts, &fattr->mtime))
1506             invalid |= NFS_INO_INVALID_MTIME;
1507 
1508         ts = inode->i_ctime;
1509         if ((fattr->valid & NFS_ATTR_FATTR_CTIME) && !timespec64_equal(&ts, &fattr->ctime))
1510             invalid |= NFS_INO_INVALID_CTIME;
1511 
1512         if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
1513             cur_size = i_size_read(inode);
1514             new_isize = nfs_size_to_loff_t(fattr->size);
1515             if (cur_size != new_isize)
1516                 invalid |= NFS_INO_INVALID_SIZE;
1517         }
1518     }
1519 
1520     /* Have any file permissions changed? */
1521     if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO))
1522         invalid |= NFS_INO_INVALID_MODE;
1523     if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && !uid_eq(inode->i_uid, fattr->uid))
1524         invalid |= NFS_INO_INVALID_OTHER;
1525     if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && !gid_eq(inode->i_gid, fattr->gid))
1526         invalid |= NFS_INO_INVALID_OTHER;
1527 
1528     /* Has the link count changed? */
1529     if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink)
1530         invalid |= NFS_INO_INVALID_NLINK;
1531 
1532     ts = inode->i_atime;
1533     if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec64_equal(&ts, &fattr->atime))
1534         invalid |= NFS_INO_INVALID_ATIME;
1535 
1536     if (invalid != 0)
1537         nfs_set_cache_invalid(inode, invalid);
1538 
1539     nfsi->read_cache_jiffies = fattr->time_start;
1540     return 0;
1541 }
1542 
1543 static atomic_long_t nfs_attr_generation_counter;
1544 
1545 static unsigned long nfs_read_attr_generation_counter(void)
1546 {
1547     return atomic_long_read(&nfs_attr_generation_counter);
1548 }
1549 
1550 unsigned long nfs_inc_attr_generation_counter(void)
1551 {
1552     return atomic_long_inc_return(&nfs_attr_generation_counter);
1553 }
1554 EXPORT_SYMBOL_GPL(nfs_inc_attr_generation_counter);
1555 
1556 void nfs_fattr_init(struct nfs_fattr *fattr)
1557 {
1558     fattr->valid = 0;
1559     fattr->time_start = jiffies;
1560     fattr->gencount = nfs_inc_attr_generation_counter();
1561     fattr->owner_name = NULL;
1562     fattr->group_name = NULL;
1563 }
1564 EXPORT_SYMBOL_GPL(nfs_fattr_init);
1565 
1566 /**
1567  * nfs_fattr_set_barrier
1568  * @fattr: attributes
1569  *
1570  * Used to set a barrier after an attribute was updated. This
1571  * barrier ensures that older attributes from RPC calls that may
1572  * have raced with our update cannot clobber these new values.
1573  * Note that you are still responsible for ensuring that other
1574  * operations which change the attribute on the server do not
1575  * collide.
1576  */
1577 void nfs_fattr_set_barrier(struct nfs_fattr *fattr)
1578 {
1579     fattr->gencount = nfs_inc_attr_generation_counter();
1580 }
1581 
1582 struct nfs_fattr *nfs_alloc_fattr(void)
1583 {
1584     struct nfs_fattr *fattr;
1585 
1586     fattr = kmalloc(sizeof(*fattr), GFP_KERNEL);
1587     if (fattr != NULL) {
1588         nfs_fattr_init(fattr);
1589         fattr->label = NULL;
1590     }
1591     return fattr;
1592 }
1593 EXPORT_SYMBOL_GPL(nfs_alloc_fattr);
1594 
1595 struct nfs_fattr *nfs_alloc_fattr_with_label(struct nfs_server *server)
1596 {
1597     struct nfs_fattr *fattr = nfs_alloc_fattr();
1598 
1599     if (!fattr)
1600         return NULL;
1601 
1602     fattr->label = nfs4_label_alloc(server, GFP_KERNEL);
1603     if (IS_ERR(fattr->label)) {
1604         kfree(fattr);
1605         return NULL;
1606     }
1607 
1608     return fattr;
1609 }
1610 EXPORT_SYMBOL_GPL(nfs_alloc_fattr_with_label);
1611 
1612 struct nfs_fh *nfs_alloc_fhandle(void)
1613 {
1614     struct nfs_fh *fh;
1615 
1616     fh = kmalloc(sizeof(struct nfs_fh), GFP_KERNEL);
1617     if (fh != NULL)
1618         fh->size = 0;
1619     return fh;
1620 }
1621 EXPORT_SYMBOL_GPL(nfs_alloc_fhandle);
1622 
1623 #ifdef NFS_DEBUG
1624 /*
1625  * _nfs_display_fhandle_hash - calculate the crc32 hash for the filehandle
1626  *                             in the same way that wireshark does
1627  *
1628  * @fh: file handle
1629  *
1630  * For debugging only.
1631  */
1632 u32 _nfs_display_fhandle_hash(const struct nfs_fh *fh)
1633 {
1634     /* wireshark uses 32-bit AUTODIN crc and does a bitwise
1635      * not on the result */
1636     return nfs_fhandle_hash(fh);
1637 }
1638 EXPORT_SYMBOL_GPL(_nfs_display_fhandle_hash);
1639 
1640 /*
1641  * _nfs_display_fhandle - display an NFS file handle on the console
1642  *
1643  * @fh: file handle to display
1644  * @caption: display caption
1645  *
1646  * For debugging only.
1647  */
1648 void _nfs_display_fhandle(const struct nfs_fh *fh, const char *caption)
1649 {
1650     unsigned short i;
1651 
1652     if (fh == NULL || fh->size == 0) {
1653         printk(KERN_DEFAULT "%s at %p is empty\n", caption, fh);
1654         return;
1655     }
1656 
1657     printk(KERN_DEFAULT "%s at %p is %u bytes, crc: 0x%08x:\n",
1658            caption, fh, fh->size, _nfs_display_fhandle_hash(fh));
1659     for (i = 0; i < fh->size; i += 16) {
1660         __be32 *pos = (__be32 *)&fh->data[i];
1661 
1662         switch ((fh->size - i - 1) >> 2) {
1663         case 0:
1664             printk(KERN_DEFAULT " %08x\n",
1665                 be32_to_cpup(pos));
1666             break;
1667         case 1:
1668             printk(KERN_DEFAULT " %08x %08x\n",
1669                 be32_to_cpup(pos), be32_to_cpup(pos + 1));
1670             break;
1671         case 2:
1672             printk(KERN_DEFAULT " %08x %08x %08x\n",
1673                 be32_to_cpup(pos), be32_to_cpup(pos + 1),
1674                 be32_to_cpup(pos + 2));
1675             break;
1676         default:
1677             printk(KERN_DEFAULT " %08x %08x %08x %08x\n",
1678                 be32_to_cpup(pos), be32_to_cpup(pos + 1),
1679                 be32_to_cpup(pos + 2), be32_to_cpup(pos + 3));
1680         }
1681     }
1682 }
1683 EXPORT_SYMBOL_GPL(_nfs_display_fhandle);
1684 #endif
1685 
1686 /**
1687  * nfs_inode_attrs_cmp_generic - compare attributes
1688  * @fattr: attributes
1689  * @inode: pointer to inode
1690  *
1691  * Attempt to divine whether or not an RPC call reply carrying stale
1692  * attributes got scheduled after another call carrying updated ones.
1693  * Note also the check for wraparound of 'attr_gencount'
1694  *
1695  * The function returns '1' if it thinks the attributes in @fattr are
1696  * more recent than the ones cached in @inode. Otherwise it returns
1697  * the value '0'.
1698  */
1699 static int nfs_inode_attrs_cmp_generic(const struct nfs_fattr *fattr,
1700                        const struct inode *inode)
1701 {
1702     unsigned long attr_gencount = NFS_I(inode)->attr_gencount;
1703 
1704     return (long)(fattr->gencount - attr_gencount) > 0 ||
1705            (long)(attr_gencount - nfs_read_attr_generation_counter()) > 0;
1706 }
1707 
1708 /**
1709  * nfs_inode_attrs_cmp_monotonic - compare attributes
1710  * @fattr: attributes
1711  * @inode: pointer to inode
1712  *
1713  * Attempt to divine whether or not an RPC call reply carrying stale
1714  * attributes got scheduled after another call carrying updated ones.
1715  *
1716  * We assume that the server observes monotonic semantics for
1717  * the change attribute, so a larger value means that the attributes in
1718  * @fattr are more recent, in which case the function returns the
1719  * value '1'.
1720  * A return value of '0' indicates no measurable change
1721  * A return value of '-1' means that the attributes in @inode are
1722  * more recent.
1723  */
1724 static int nfs_inode_attrs_cmp_monotonic(const struct nfs_fattr *fattr,
1725                      const struct inode *inode)
1726 {
1727     s64 diff = fattr->change_attr - inode_peek_iversion_raw(inode);
1728     if (diff > 0)
1729         return 1;
1730     return diff == 0 ? 0 : -1;
1731 }
1732 
1733 /**
1734  * nfs_inode_attrs_cmp_strict_monotonic - compare attributes
1735  * @fattr: attributes
1736  * @inode: pointer to inode
1737  *
1738  * Attempt to divine whether or not an RPC call reply carrying stale
1739  * attributes got scheduled after another call carrying updated ones.
1740  *
1741  * We assume that the server observes strictly monotonic semantics for
1742  * the change attribute, so a larger value means that the attributes in
1743  * @fattr are more recent, in which case the function returns the
1744  * value '1'.
1745  * A return value of '-1' means that the attributes in @inode are
1746  * more recent or unchanged.
1747  */
1748 static int nfs_inode_attrs_cmp_strict_monotonic(const struct nfs_fattr *fattr,
1749                         const struct inode *inode)
1750 {
1751     return  nfs_inode_attrs_cmp_monotonic(fattr, inode) > 0 ? 1 : -1;
1752 }
1753 
1754 /**
1755  * nfs_inode_attrs_cmp - compare attributes
1756  * @fattr: attributes
1757  * @inode: pointer to inode
1758  *
1759  * This function returns '1' if it thinks the attributes in @fattr are
1760  * more recent than the ones cached in @inode. It returns '-1' if
1761  * the attributes in @inode are more recent than the ones in @fattr,
1762  * and it returns 0 if not sure.
1763  */
1764 static int nfs_inode_attrs_cmp(const struct nfs_fattr *fattr,
1765                    const struct inode *inode)
1766 {
1767     if (nfs_inode_attrs_cmp_generic(fattr, inode) > 0)
1768         return 1;
1769     switch (NFS_SERVER(inode)->change_attr_type) {
1770     case NFS4_CHANGE_TYPE_IS_UNDEFINED:
1771         break;
1772     case NFS4_CHANGE_TYPE_IS_TIME_METADATA:
1773         if (!(fattr->valid & NFS_ATTR_FATTR_CHANGE))
1774             break;
1775         return nfs_inode_attrs_cmp_monotonic(fattr, inode);
1776     default:
1777         if (!(fattr->valid & NFS_ATTR_FATTR_CHANGE))
1778             break;
1779         return nfs_inode_attrs_cmp_strict_monotonic(fattr, inode);
1780     }
1781     return 0;
1782 }
1783 
1784 /**
1785  * nfs_inode_finish_partial_attr_update - complete a previous inode update
1786  * @fattr: attributes
1787  * @inode: pointer to inode
1788  *
1789  * Returns '1' if the last attribute update left the inode cached
1790  * attributes in a partially unrevalidated state, and @fattr
1791  * matches the change attribute of that partial update.
1792  * Otherwise returns '0'.
1793  */
1794 static int nfs_inode_finish_partial_attr_update(const struct nfs_fattr *fattr,
1795                         const struct inode *inode)
1796 {
1797     const unsigned long check_valid =
1798         NFS_INO_INVALID_ATIME | NFS_INO_INVALID_CTIME |
1799         NFS_INO_INVALID_MTIME | NFS_INO_INVALID_SIZE |
1800         NFS_INO_INVALID_BLOCKS | NFS_INO_INVALID_OTHER |
1801         NFS_INO_INVALID_NLINK;
1802     unsigned long cache_validity = NFS_I(inode)->cache_validity;
1803     enum nfs4_change_attr_type ctype = NFS_SERVER(inode)->change_attr_type;
1804 
1805     if (ctype != NFS4_CHANGE_TYPE_IS_UNDEFINED &&
1806         !(cache_validity & NFS_INO_INVALID_CHANGE) &&
1807         (cache_validity & check_valid) != 0 &&
1808         (fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
1809         nfs_inode_attrs_cmp_monotonic(fattr, inode) == 0)
1810         return 1;
1811     return 0;
1812 }
1813 
1814 static int nfs_refresh_inode_locked(struct inode *inode,
1815                     struct nfs_fattr *fattr)
1816 {
1817     int attr_cmp = nfs_inode_attrs_cmp(fattr, inode);
1818     int ret = 0;
1819 
1820     trace_nfs_refresh_inode_enter(inode);
1821 
1822     if (attr_cmp > 0 || nfs_inode_finish_partial_attr_update(fattr, inode))
1823         ret = nfs_update_inode(inode, fattr);
1824     else if (attr_cmp == 0)
1825         ret = nfs_check_inode_attributes(inode, fattr);
1826 
1827     trace_nfs_refresh_inode_exit(inode, ret);
1828     return ret;
1829 }
1830 
1831 /**
1832  * nfs_refresh_inode - try to update the inode attribute cache
1833  * @inode: pointer to inode
1834  * @fattr: updated attributes
1835  *
1836  * Check that an RPC call that returned attributes has not overlapped with
1837  * other recent updates of the inode metadata, then decide whether it is
1838  * safe to do a full update of the inode attributes, or whether just to
1839  * call nfs_check_inode_attributes.
1840  */
1841 int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
1842 {
1843     int status;
1844 
1845     if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1846         return 0;
1847     spin_lock(&inode->i_lock);
1848     status = nfs_refresh_inode_locked(inode, fattr);
1849     spin_unlock(&inode->i_lock);
1850 
1851     return status;
1852 }
1853 EXPORT_SYMBOL_GPL(nfs_refresh_inode);
1854 
1855 static int nfs_post_op_update_inode_locked(struct inode *inode,
1856         struct nfs_fattr *fattr, unsigned int invalid)
1857 {
1858     if (S_ISDIR(inode->i_mode))
1859         invalid |= NFS_INO_INVALID_DATA;
1860     nfs_set_cache_invalid(inode, invalid);
1861     if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1862         return 0;
1863     return nfs_refresh_inode_locked(inode, fattr);
1864 }
1865 
1866 /**
1867  * nfs_post_op_update_inode - try to update the inode attribute cache
1868  * @inode: pointer to inode
1869  * @fattr: updated attributes
1870  *
1871  * After an operation that has changed the inode metadata, mark the
1872  * attribute cache as being invalid, then try to update it.
1873  *
1874  * NB: if the server didn't return any post op attributes, this
1875  * function will force the retrieval of attributes before the next
1876  * NFS request.  Thus it should be used only for operations that
1877  * are expected to change one or more attributes, to avoid
1878  * unnecessary NFS requests and trips through nfs_update_inode().
1879  */
1880 int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1881 {
1882     int status;
1883 
1884     spin_lock(&inode->i_lock);
1885     nfs_fattr_set_barrier(fattr);
1886     status = nfs_post_op_update_inode_locked(inode, fattr,
1887             NFS_INO_INVALID_CHANGE
1888             | NFS_INO_INVALID_CTIME
1889             | NFS_INO_REVAL_FORCED);
1890     spin_unlock(&inode->i_lock);
1891 
1892     return status;
1893 }
1894 EXPORT_SYMBOL_GPL(nfs_post_op_update_inode);
1895 
1896 /**
1897  * nfs_post_op_update_inode_force_wcc_locked - update the inode attribute cache
1898  * @inode: pointer to inode
1899  * @fattr: updated attributes
1900  *
1901  * After an operation that has changed the inode metadata, mark the
1902  * attribute cache as being invalid, then try to update it. Fake up
1903  * weak cache consistency data, if none exist.
1904  *
1905  * This function is mainly designed to be used by the ->write_done() functions.
1906  */
1907 int nfs_post_op_update_inode_force_wcc_locked(struct inode *inode, struct nfs_fattr *fattr)
1908 {
1909     int attr_cmp = nfs_inode_attrs_cmp(fattr, inode);
1910     int status;
1911 
1912     /* Don't do a WCC update if these attributes are already stale */
1913     if (attr_cmp < 0)
1914         return 0;
1915     if ((fattr->valid & NFS_ATTR_FATTR) == 0 || !attr_cmp) {
1916         fattr->valid &= ~(NFS_ATTR_FATTR_PRECHANGE
1917                 | NFS_ATTR_FATTR_PRESIZE
1918                 | NFS_ATTR_FATTR_PREMTIME
1919                 | NFS_ATTR_FATTR_PRECTIME);
1920         goto out_noforce;
1921     }
1922     if ((fattr->valid & NFS_ATTR_FATTR_CHANGE) != 0 &&
1923             (fattr->valid & NFS_ATTR_FATTR_PRECHANGE) == 0) {
1924         fattr->pre_change_attr = inode_peek_iversion_raw(inode);
1925         fattr->valid |= NFS_ATTR_FATTR_PRECHANGE;
1926     }
1927     if ((fattr->valid & NFS_ATTR_FATTR_CTIME) != 0 &&
1928             (fattr->valid & NFS_ATTR_FATTR_PRECTIME) == 0) {
1929         fattr->pre_ctime = inode->i_ctime;
1930         fattr->valid |= NFS_ATTR_FATTR_PRECTIME;
1931     }
1932     if ((fattr->valid & NFS_ATTR_FATTR_MTIME) != 0 &&
1933             (fattr->valid & NFS_ATTR_FATTR_PREMTIME) == 0) {
1934         fattr->pre_mtime = inode->i_mtime;
1935         fattr->valid |= NFS_ATTR_FATTR_PREMTIME;
1936     }
1937     if ((fattr->valid & NFS_ATTR_FATTR_SIZE) != 0 &&
1938             (fattr->valid & NFS_ATTR_FATTR_PRESIZE) == 0) {
1939         fattr->pre_size = i_size_read(inode);
1940         fattr->valid |= NFS_ATTR_FATTR_PRESIZE;
1941     }
1942 out_noforce:
1943     status = nfs_post_op_update_inode_locked(inode, fattr,
1944             NFS_INO_INVALID_CHANGE
1945             | NFS_INO_INVALID_CTIME
1946             | NFS_INO_INVALID_MTIME
1947             | NFS_INO_INVALID_BLOCKS);
1948     return status;
1949 }
1950 
1951 /**
1952  * nfs_post_op_update_inode_force_wcc - try to update the inode attribute cache
1953  * @inode: pointer to inode
1954  * @fattr: updated attributes
1955  *
1956  * After an operation that has changed the inode metadata, mark the
1957  * attribute cache as being invalid, then try to update it. Fake up
1958  * weak cache consistency data, if none exist.
1959  *
1960  * This function is mainly designed to be used by the ->write_done() functions.
1961  */
1962 int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fattr)
1963 {
1964     int status;
1965 
1966     spin_lock(&inode->i_lock);
1967     nfs_fattr_set_barrier(fattr);
1968     status = nfs_post_op_update_inode_force_wcc_locked(inode, fattr);
1969     spin_unlock(&inode->i_lock);
1970     return status;
1971 }
1972 EXPORT_SYMBOL_GPL(nfs_post_op_update_inode_force_wcc);
1973 
1974 
1975 /*
1976  * Many nfs protocol calls return the new file attributes after
1977  * an operation.  Here we update the inode to reflect the state
1978  * of the server's inode.
1979  *
1980  * This is a bit tricky because we have to make sure all dirty pages
1981  * have been sent off to the server before calling invalidate_inode_pages.
1982  * To make sure no other process adds more write requests while we try
1983  * our best to flush them, we make them sleep during the attribute refresh.
1984  *
1985  * A very similar scenario holds for the dir cache.
1986  */
1987 static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1988 {
1989     struct nfs_server *server = NFS_SERVER(inode);
1990     struct nfs_inode *nfsi = NFS_I(inode);
1991     loff_t cur_isize, new_isize;
1992     u64 fattr_supported = server->fattr_valid;
1993     unsigned long invalid = 0;
1994     unsigned long now = jiffies;
1995     unsigned long save_cache_validity;
1996     bool have_writers = nfs_file_has_buffered_writers(nfsi);
1997     bool cache_revalidated = true;
1998     bool attr_changed = false;
1999     bool have_delegation;
2000 
2001     dfprintk(VFS, "NFS: %s(%s/%lu fh_crc=0x%08x ct=%d info=0x%x)\n",
2002             __func__, inode->i_sb->s_id, inode->i_ino,
2003             nfs_display_fhandle_hash(NFS_FH(inode)),
2004             atomic_read(&inode->i_count), fattr->valid);
2005 
2006     if (!(fattr->valid & NFS_ATTR_FATTR_FILEID)) {
2007         /* Only a mounted-on-fileid? Just exit */
2008         if (fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID)
2009             return 0;
2010     /* Has the inode gone and changed behind our back? */
2011     } else if (nfsi->fileid != fattr->fileid) {
2012         /* Is this perhaps the mounted-on fileid? */
2013         if ((fattr->valid & NFS_ATTR_FATTR_MOUNTED_ON_FILEID) &&
2014             nfsi->fileid == fattr->mounted_on_fileid)
2015             return 0;
2016         printk(KERN_ERR "NFS: server %s error: fileid changed\n"
2017             "fsid %s: expected fileid 0x%Lx, got 0x%Lx\n",
2018             NFS_SERVER(inode)->nfs_client->cl_hostname,
2019             inode->i_sb->s_id, (long long)nfsi->fileid,
2020             (long long)fattr->fileid);
2021         goto out_err;
2022     }
2023 
2024     /*
2025      * Make sure the inode's type hasn't changed.
2026      */
2027     if ((fattr->valid & NFS_ATTR_FATTR_TYPE) && inode_wrong_type(inode, fattr->mode)) {
2028         /*
2029         * Big trouble! The inode has become a different object.
2030         */
2031         printk(KERN_DEBUG "NFS: %s: inode %lu mode changed, %07o to %07o\n",
2032                 __func__, inode->i_ino, inode->i_mode, fattr->mode);
2033         goto out_err;
2034     }
2035 
2036     /* Update the fsid? */
2037     if (S_ISDIR(inode->i_mode) && (fattr->valid & NFS_ATTR_FATTR_FSID) &&
2038             !nfs_fsid_equal(&server->fsid, &fattr->fsid) &&
2039             !IS_AUTOMOUNT(inode))
2040         server->fsid = fattr->fsid;
2041 
2042     /* Save the delegation state before clearing cache_validity */
2043     have_delegation = nfs_have_delegated_attributes(inode);
2044 
2045     /*
2046      * Update the read time so we don't revalidate too often.
2047      */
2048     nfsi->read_cache_jiffies = fattr->time_start;
2049 
2050     save_cache_validity = nfsi->cache_validity;
2051     nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR
2052             | NFS_INO_INVALID_ATIME
2053             | NFS_INO_REVAL_FORCED
2054             | NFS_INO_INVALID_BLOCKS);
2055 
2056     /* Do atomic weak cache consistency updates */
2057     nfs_wcc_update_inode(inode, fattr);
2058 
2059     if (pnfs_layoutcommit_outstanding(inode)) {
2060         nfsi->cache_validity |=
2061             save_cache_validity &
2062             (NFS_INO_INVALID_CHANGE | NFS_INO_INVALID_CTIME |
2063              NFS_INO_INVALID_MTIME | NFS_INO_INVALID_SIZE |
2064              NFS_INO_INVALID_BLOCKS);
2065         cache_revalidated = false;
2066     }
2067 
2068     /* More cache consistency checks */
2069     if (fattr->valid & NFS_ATTR_FATTR_CHANGE) {
2070         if (!inode_eq_iversion_raw(inode, fattr->change_attr)) {
2071             /* Could it be a race with writeback? */
2072             if (!(have_writers || have_delegation)) {
2073                 invalid |= NFS_INO_INVALID_DATA
2074                     | NFS_INO_INVALID_ACCESS
2075                     | NFS_INO_INVALID_ACL
2076                     | NFS_INO_INVALID_XATTR;
2077                 /* Force revalidate of all attributes */
2078                 save_cache_validity |= NFS_INO_INVALID_CTIME
2079                     | NFS_INO_INVALID_MTIME
2080                     | NFS_INO_INVALID_SIZE
2081                     | NFS_INO_INVALID_BLOCKS
2082                     | NFS_INO_INVALID_NLINK
2083                     | NFS_INO_INVALID_MODE
2084                     | NFS_INO_INVALID_OTHER;
2085                 if (S_ISDIR(inode->i_mode))
2086                     nfs_force_lookup_revalidate(inode);
2087                 attr_changed = true;
2088                 dprintk("NFS: change_attr change on server for file %s/%ld\n",
2089                         inode->i_sb->s_id,
2090                         inode->i_ino);
2091             } else if (!have_delegation)
2092                 nfsi->cache_validity |= NFS_INO_DATA_INVAL_DEFER;
2093             inode_set_iversion_raw(inode, fattr->change_attr);
2094         }
2095     } else {
2096         nfsi->cache_validity |=
2097             save_cache_validity & NFS_INO_INVALID_CHANGE;
2098         if (!have_delegation ||
2099             (nfsi->cache_validity & NFS_INO_INVALID_CHANGE) != 0)
2100             cache_revalidated = false;
2101     }
2102 
2103     if (fattr->valid & NFS_ATTR_FATTR_MTIME)
2104         inode->i_mtime = fattr->mtime;
2105     else if (fattr_supported & NFS_ATTR_FATTR_MTIME)
2106         nfsi->cache_validity |=
2107             save_cache_validity & NFS_INO_INVALID_MTIME;
2108 
2109     if (fattr->valid & NFS_ATTR_FATTR_CTIME)
2110         inode->i_ctime = fattr->ctime;
2111     else if (fattr_supported & NFS_ATTR_FATTR_CTIME)
2112         nfsi->cache_validity |=
2113             save_cache_validity & NFS_INO_INVALID_CTIME;
2114 
2115     /* Check if our cached file size is stale */
2116     if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
2117         new_isize = nfs_size_to_loff_t(fattr->size);
2118         cur_isize = i_size_read(inode);
2119         if (new_isize != cur_isize && !have_delegation) {
2120             /* Do we perhaps have any outstanding writes, or has
2121              * the file grown beyond our last write? */
2122             if (!nfs_have_writebacks(inode) || new_isize > cur_isize) {
2123                 trace_nfs_size_update(inode, new_isize);
2124                 i_size_write(inode, new_isize);
2125                 if (!have_writers)
2126                     invalid |= NFS_INO_INVALID_DATA;
2127             }
2128         }
2129         if (new_isize == 0 &&
2130             !(fattr->valid & (NFS_ATTR_FATTR_SPACE_USED |
2131                       NFS_ATTR_FATTR_BLOCKS_USED))) {
2132             fattr->du.nfs3.used = 0;
2133             fattr->valid |= NFS_ATTR_FATTR_SPACE_USED;
2134         }
2135     } else
2136         nfsi->cache_validity |=
2137             save_cache_validity & NFS_INO_INVALID_SIZE;
2138 
2139     if (fattr->valid & NFS_ATTR_FATTR_ATIME)
2140         inode->i_atime = fattr->atime;
2141     else if (fattr_supported & NFS_ATTR_FATTR_ATIME)
2142         nfsi->cache_validity |=
2143             save_cache_validity & NFS_INO_INVALID_ATIME;
2144 
2145     if (fattr->valid & NFS_ATTR_FATTR_MODE) {
2146         if ((inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO)) {
2147             umode_t newmode = inode->i_mode & S_IFMT;
2148             newmode |= fattr->mode & S_IALLUGO;
2149             inode->i_mode = newmode;
2150             invalid |= NFS_INO_INVALID_ACCESS
2151                 | NFS_INO_INVALID_ACL;
2152         }
2153     } else if (fattr_supported & NFS_ATTR_FATTR_MODE)
2154         nfsi->cache_validity |=
2155             save_cache_validity & NFS_INO_INVALID_MODE;
2156 
2157     if (fattr->valid & NFS_ATTR_FATTR_OWNER) {
2158         if (!uid_eq(inode->i_uid, fattr->uid)) {
2159             invalid |= NFS_INO_INVALID_ACCESS
2160                 | NFS_INO_INVALID_ACL;
2161             inode->i_uid = fattr->uid;
2162         }
2163     } else if (fattr_supported & NFS_ATTR_FATTR_OWNER)
2164         nfsi->cache_validity |=
2165             save_cache_validity & NFS_INO_INVALID_OTHER;
2166 
2167     if (fattr->valid & NFS_ATTR_FATTR_GROUP) {
2168         if (!gid_eq(inode->i_gid, fattr->gid)) {
2169             invalid |= NFS_INO_INVALID_ACCESS
2170                 | NFS_INO_INVALID_ACL;
2171             inode->i_gid = fattr->gid;
2172         }
2173     } else if (fattr_supported & NFS_ATTR_FATTR_GROUP)
2174         nfsi->cache_validity |=
2175             save_cache_validity & NFS_INO_INVALID_OTHER;
2176 
2177     if (fattr->valid & NFS_ATTR_FATTR_NLINK) {
2178         if (inode->i_nlink != fattr->nlink)
2179             set_nlink(inode, fattr->nlink);
2180     } else if (fattr_supported & NFS_ATTR_FATTR_NLINK)
2181         nfsi->cache_validity |=
2182             save_cache_validity & NFS_INO_INVALID_NLINK;
2183 
2184     if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
2185         /*
2186          * report the blocks in 512byte units
2187          */
2188         inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
2189     } else if (fattr_supported & NFS_ATTR_FATTR_SPACE_USED)
2190         nfsi->cache_validity |=
2191             save_cache_validity & NFS_INO_INVALID_BLOCKS;
2192 
2193     if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
2194         inode->i_blocks = fattr->du.nfs2.blocks;
2195     else if (fattr_supported & NFS_ATTR_FATTR_BLOCKS_USED)
2196         nfsi->cache_validity |=
2197             save_cache_validity & NFS_INO_INVALID_BLOCKS;
2198 
2199     /* Update attrtimeo value if we're out of the unstable period */
2200     if (attr_changed) {
2201         nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE);
2202         nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
2203         nfsi->attrtimeo_timestamp = now;
2204         /* Set barrier to be more recent than all outstanding updates */
2205         nfsi->attr_gencount = nfs_inc_attr_generation_counter();
2206     } else {
2207         if (cache_revalidated) {
2208             if (!time_in_range_open(now, nfsi->attrtimeo_timestamp,
2209                 nfsi->attrtimeo_timestamp + nfsi->attrtimeo)) {
2210                 nfsi->attrtimeo <<= 1;
2211                 if (nfsi->attrtimeo > NFS_MAXATTRTIMEO(inode))
2212                     nfsi->attrtimeo = NFS_MAXATTRTIMEO(inode);
2213             }
2214             nfsi->attrtimeo_timestamp = now;
2215         }
2216         /* Set the barrier to be more recent than this fattr */
2217         if ((long)(fattr->gencount - nfsi->attr_gencount) > 0)
2218             nfsi->attr_gencount = fattr->gencount;
2219     }
2220 
2221     /* Don't invalidate the data if we were to blame */
2222     if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)
2223                 || S_ISLNK(inode->i_mode)))
2224         invalid &= ~NFS_INO_INVALID_DATA;
2225     nfs_set_cache_invalid(inode, invalid);
2226 
2227     return 0;
2228  out_err:
2229     /*
2230      * No need to worry about unhashing the dentry, as the
2231      * lookup validation will know that the inode is bad.
2232      * (But we fall through to invalidate the caches.)
2233      */
2234     nfs_set_inode_stale_locked(inode);
2235     return -ESTALE;
2236 }
2237 
2238 struct inode *nfs_alloc_inode(struct super_block *sb)
2239 {
2240     struct nfs_inode *nfsi;
2241     nfsi = alloc_inode_sb(sb, nfs_inode_cachep, GFP_KERNEL);
2242     if (!nfsi)
2243         return NULL;
2244     nfsi->flags = 0UL;
2245     nfsi->cache_validity = 0UL;
2246 #if IS_ENABLED(CONFIG_NFS_V4)
2247     nfsi->nfs4_acl = NULL;
2248 #endif /* CONFIG_NFS_V4 */
2249 #ifdef CONFIG_NFS_V4_2
2250     nfsi->xattr_cache = NULL;
2251 #endif
2252     return &nfsi->vfs_inode;
2253 }
2254 EXPORT_SYMBOL_GPL(nfs_alloc_inode);
2255 
2256 void nfs_free_inode(struct inode *inode)
2257 {
2258     kmem_cache_free(nfs_inode_cachep, NFS_I(inode));
2259 }
2260 EXPORT_SYMBOL_GPL(nfs_free_inode);
2261 
2262 static inline void nfs4_init_once(struct nfs_inode *nfsi)
2263 {
2264 #if IS_ENABLED(CONFIG_NFS_V4)
2265     INIT_LIST_HEAD(&nfsi->open_states);
2266     nfsi->delegation = NULL;
2267     init_rwsem(&nfsi->rwsem);
2268     nfsi->layout = NULL;
2269 #endif
2270 }
2271 
2272 static void init_once(void *foo)
2273 {
2274     struct nfs_inode *nfsi = (struct nfs_inode *) foo;
2275 
2276     inode_init_once(&nfsi->vfs_inode);
2277     INIT_LIST_HEAD(&nfsi->open_files);
2278     INIT_LIST_HEAD(&nfsi->access_cache_entry_lru);
2279     INIT_LIST_HEAD(&nfsi->access_cache_inode_lru);
2280     nfs4_init_once(nfsi);
2281 }
2282 
2283 static int __init nfs_init_inodecache(void)
2284 {
2285     nfs_inode_cachep = kmem_cache_create("nfs_inode_cache",
2286                          sizeof(struct nfs_inode),
2287                          0, (SLAB_RECLAIM_ACCOUNT|
2288                         SLAB_MEM_SPREAD|SLAB_ACCOUNT),
2289                          init_once);
2290     if (nfs_inode_cachep == NULL)
2291         return -ENOMEM;
2292 
2293     return 0;
2294 }
2295 
2296 static void nfs_destroy_inodecache(void)
2297 {
2298     /*
2299      * Make sure all delayed rcu free inodes are flushed before we
2300      * destroy cache.
2301      */
2302     rcu_barrier();
2303     kmem_cache_destroy(nfs_inode_cachep);
2304 }
2305 
2306 struct workqueue_struct *nfsiod_workqueue;
2307 EXPORT_SYMBOL_GPL(nfsiod_workqueue);
2308 
2309 /*
2310  * start up the nfsiod workqueue
2311  */
2312 static int nfsiod_start(void)
2313 {
2314     struct workqueue_struct *wq;
2315     dprintk("RPC:       creating workqueue nfsiod\n");
2316     wq = alloc_workqueue("nfsiod", WQ_MEM_RECLAIM | WQ_UNBOUND, 0);
2317     if (wq == NULL)
2318         return -ENOMEM;
2319     nfsiod_workqueue = wq;
2320     return 0;
2321 }
2322 
2323 /*
2324  * Destroy the nfsiod workqueue
2325  */
2326 static void nfsiod_stop(void)
2327 {
2328     struct workqueue_struct *wq;
2329 
2330     wq = nfsiod_workqueue;
2331     if (wq == NULL)
2332         return;
2333     nfsiod_workqueue = NULL;
2334     destroy_workqueue(wq);
2335 }
2336 
2337 unsigned int nfs_net_id;
2338 EXPORT_SYMBOL_GPL(nfs_net_id);
2339 
2340 static int nfs_net_init(struct net *net)
2341 {
2342     nfs_clients_init(net);
2343     return nfs_fs_proc_net_init(net);
2344 }
2345 
2346 static void nfs_net_exit(struct net *net)
2347 {
2348     nfs_fs_proc_net_exit(net);
2349     nfs_clients_exit(net);
2350 }
2351 
2352 static struct pernet_operations nfs_net_ops = {
2353     .init = nfs_net_init,
2354     .exit = nfs_net_exit,
2355     .id   = &nfs_net_id,
2356     .size = sizeof(struct nfs_net),
2357 };
2358 
2359 /*
2360  * Initialize NFS
2361  */
2362 static int __init init_nfs_fs(void)
2363 {
2364     int err;
2365 
2366     err = nfs_sysfs_init();
2367     if (err < 0)
2368         goto out10;
2369 
2370     err = register_pernet_subsys(&nfs_net_ops);
2371     if (err < 0)
2372         goto out9;
2373 
2374     err = nfsiod_start();
2375     if (err)
2376         goto out7;
2377 
2378     err = nfs_fs_proc_init();
2379     if (err)
2380         goto out6;
2381 
2382     err = nfs_init_nfspagecache();
2383     if (err)
2384         goto out5;
2385 
2386     err = nfs_init_inodecache();
2387     if (err)
2388         goto out4;
2389 
2390     err = nfs_init_readpagecache();
2391     if (err)
2392         goto out3;
2393 
2394     err = nfs_init_writepagecache();
2395     if (err)
2396         goto out2;
2397 
2398     err = nfs_init_directcache();
2399     if (err)
2400         goto out1;
2401 
2402     rpc_proc_register(&init_net, &nfs_rpcstat);
2403 
2404     err = register_nfs_fs();
2405     if (err)
2406         goto out0;
2407 
2408     return 0;
2409 out0:
2410     rpc_proc_unregister(&init_net, "nfs");
2411     nfs_destroy_directcache();
2412 out1:
2413     nfs_destroy_writepagecache();
2414 out2:
2415     nfs_destroy_readpagecache();
2416 out3:
2417     nfs_destroy_inodecache();
2418 out4:
2419     nfs_destroy_nfspagecache();
2420 out5:
2421     nfs_fs_proc_exit();
2422 out6:
2423     nfsiod_stop();
2424 out7:
2425     unregister_pernet_subsys(&nfs_net_ops);
2426 out9:
2427     nfs_sysfs_exit();
2428 out10:
2429     return err;
2430 }
2431 
2432 static void __exit exit_nfs_fs(void)
2433 {
2434     nfs_destroy_directcache();
2435     nfs_destroy_writepagecache();
2436     nfs_destroy_readpagecache();
2437     nfs_destroy_inodecache();
2438     nfs_destroy_nfspagecache();
2439     unregister_pernet_subsys(&nfs_net_ops);
2440     rpc_proc_unregister(&init_net, "nfs");
2441     unregister_nfs_fs();
2442     nfs_fs_proc_exit();
2443     nfsiod_stop();
2444     nfs_sysfs_exit();
2445 }
2446 
2447 /* Not quite true; I just maintain it */
2448 MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
2449 MODULE_LICENSE("GPL");
2450 module_param(enable_ino64, bool, 0644);
2451 
2452 module_init(init_nfs_fs)
2453 module_exit(exit_nfs_fs)