NFS_I(inode)->attr_gencount = nfs_inc_attr_generation_counter();
        nfs_set_cache_invalid(
                inode, NFS_INO_INVALID_CHANGE | NFS_INO_INVALID_CTIME |
-                              NFS_INO_INVALID_OTHER | NFS_INO_REVAL_FORCED);
+                              NFS_INO_INVALID_NLINK | NFS_INO_REVAL_FORCED);
        spin_unlock(&inode->i_lock);
 }
 
 
                if (fattr->valid & NFS_ATTR_FATTR_NLINK)
                        set_nlink(inode, fattr->nlink);
                else if (nfs_server_capable(inode, NFS_CAP_NLINK))
-                       nfs_set_cache_invalid(inode, NFS_INO_INVALID_OTHER);
+                       nfs_set_cache_invalid(inode, NFS_INO_INVALID_NLINK);
                if (fattr->valid & NFS_ATTR_FATTR_OWNER)
                        inode->i_uid = fattr->uid;
                else if (nfs_server_capable(inode, NFS_CAP_OWNER))
                reply_mask |= STATX_MTIME;
        if (!(cache_validity & NFS_INO_INVALID_SIZE))
                reply_mask |= STATX_SIZE;
+       if (!(cache_validity & NFS_INO_INVALID_NLINK))
+               reply_mask |= STATX_NLINK;
        if (!(cache_validity & NFS_INO_INVALID_OTHER))
-               reply_mask |= STATX_UID | STATX_GID | STATX_MODE | STATX_NLINK;
+               reply_mask |= STATX_UID | STATX_GID | STATX_MODE;
        if (!(cache_validity & NFS_INO_INVALID_BLOCKS))
                reply_mask |= STATX_BLOCKS;
        return reply_mask;
                do_update |= cache_validity & NFS_INO_INVALID_MTIME;
        if (request_mask & STATX_SIZE)
                do_update |= cache_validity & NFS_INO_INVALID_SIZE;
-       if (request_mask & (STATX_UID | STATX_GID | STATX_MODE | STATX_NLINK))
+       if (request_mask & STATX_NLINK)
+               do_update |= cache_validity & NFS_INO_INVALID_NLINK;
+       if (request_mask & (STATX_UID | STATX_GID | STATX_MODE))
                do_update |= cache_validity & NFS_INO_INVALID_OTHER;
        if (request_mask & STATX_BLOCKS)
                do_update |= cache_validity & NFS_INO_INVALID_BLOCKS;
 
        /* Has the link count changed? */
        if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink)
-               invalid |= NFS_INO_INVALID_OTHER;
+               invalid |= NFS_INO_INVALID_NLINK;
 
        ts = inode->i_atime;
        if ((fattr->valid & NFS_ATTR_FATTR_ATIME) && !timespec64_equal(&ts, &fattr->atime))
                                        | NFS_INO_INVALID_MTIME
                                        | NFS_INO_INVALID_SIZE
                                        | NFS_INO_INVALID_BLOCKS
+                                       | NFS_INO_INVALID_NLINK
                                        | NFS_INO_INVALID_OTHER;
                                if (S_ISDIR(inode->i_mode))
                                        nfs_force_lookup_revalidate(inode);
                }
        } else if (server->caps & NFS_CAP_NLINK) {
                nfsi->cache_validity |= save_cache_validity &
-                               (NFS_INO_INVALID_OTHER
+                               (NFS_INO_INVALID_NLINK
                                | NFS_INO_REVAL_FORCED);
                cache_revalidated = false;
        }
 
 static void
 nfs4_inc_nlink_locked(struct inode *inode)
 {
-       nfs_set_cache_invalid(inode, NFS_INO_INVALID_OTHER);
+       nfs_set_cache_invalid(inode, NFS_INO_INVALID_NLINK);
        inc_nlink(inode);
 }
 
 static void
 nfs4_dec_nlink_locked(struct inode *inode)
 {
-       nfs_set_cache_invalid(inode, NFS_INO_INVALID_OTHER);
+       nfs_set_cache_invalid(inode, NFS_INO_INVALID_NLINK);
        drop_nlink(inode);
 }
 
                        /* Note: If we moved a directory, nlink will change */
                        nfs4_update_changeattr(old_dir, &res->old_cinfo,
                                        res->old_fattr->time_start,
-                                       NFS_INO_INVALID_OTHER |
+                                       NFS_INO_INVALID_NLINK |
                                            NFS_INO_INVALID_DATA);
                        nfs4_update_changeattr(new_dir, &res->new_cinfo,
                                        res->new_fattr->time_start,
-                                       NFS_INO_INVALID_OTHER |
+                                       NFS_INO_INVALID_NLINK |
                                            NFS_INO_INVALID_DATA);
                } else
                        nfs4_update_changeattr(old_dir, &res->old_cinfo,
                bitmask[1] |= FATTR4_WORD1_TIME_ACCESS;
        if (cache_validity & NFS_INO_INVALID_OTHER)
                bitmask[1] |= FATTR4_WORD1_MODE | FATTR4_WORD1_OWNER |
-                               FATTR4_WORD1_OWNER_GROUP |
-                               FATTR4_WORD1_NUMLINKS;
+                               FATTR4_WORD1_OWNER_GROUP;
+       if (cache_validity & NFS_INO_INVALID_NLINK)
+               bitmask[1] |= FATTR4_WORD1_NUMLINKS;
        if (label && label->len && cache_validity & NFS_INO_INVALID_LABEL)
                bitmask[2] |= FATTR4_WORD2_SECURITY_LABEL;
        if (cache_validity & NFS_INO_INVALID_CTIME)
 
 TRACE_DEFINE_ENUM(NFS_INO_DATA_INVAL_DEFER);
 TRACE_DEFINE_ENUM(NFS_INO_INVALID_BLOCKS);
 TRACE_DEFINE_ENUM(NFS_INO_INVALID_XATTR);
+TRACE_DEFINE_ENUM(NFS_INO_INVALID_NLINK);
 
 #define nfs_show_cache_validity(v) \
        __print_flags(v, "|", \
                        { NFS_INO_INVALID_OTHER, "INVALID_OTHER" }, \
                        { NFS_INO_DATA_INVAL_DEFER, "DATA_INVAL_DEFER" }, \
                        { NFS_INO_INVALID_BLOCKS, "INVALID_BLOCKS" }, \
-                       { NFS_INO_INVALID_XATTR, "INVALID_XATTR" })
+                       { NFS_INO_INVALID_XATTR, "INVALID_XATTR" }, \
+                       { NFS_INO_INVALID_NLINK, "INVALID_NLINK" })
 
 TRACE_DEFINE_ENUM(NFS_INO_ADVISE_RDPLUS);
 TRACE_DEFINE_ENUM(NFS_INO_STALE);
 
                                BIT(13)         /* Deferred cache invalidation */
 #define NFS_INO_INVALID_BLOCKS BIT(14)         /* cached blocks are invalid */
 #define NFS_INO_INVALID_XATTR  BIT(15)         /* xattrs are invalid */
+#define NFS_INO_INVALID_NLINK  BIT(16)         /* cached nlinks is invalid */
 
 #define NFS_INO_INVALID_ATTR   (NFS_INO_INVALID_CHANGE \
                | NFS_INO_INVALID_CTIME \
                | NFS_INO_INVALID_MTIME \
                | NFS_INO_INVALID_SIZE \
+               | NFS_INO_INVALID_NLINK \
                | NFS_INO_INVALID_OTHER)        /* inode metadata is invalid */
 
 /*