On Fri, 2025-05-02 at 23:15 +0800, Han Young wrote: > fattr4_numlinks is a recommended attribute, so the client should > emulate > it even if the server doesn't support it. In decode_attr_nlink > function > in nfs4xdr.c, nlink is initialized to 1. However, this default value > isn't set to the inode due to the check in nfs_fhget. > > So if the server doesn't support numlinks, inode's nlink will be > zero, > the mount will fail with error "Stale file handle". Change the check > in > nfs_fhget so that the nlink value is always set. > > Signed-off-by: Han Young <hanyang.tony@xxxxxxxxxxxxx> > --- > fs/nfs/inode.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c > index 119e447758b9..c19f135b5041 100644 > --- a/fs/nfs/inode.c > +++ b/fs/nfs/inode.c > @@ -553,10 +553,11 @@ nfs_fhget(struct super_block *sb, struct nfs_fh > *fh, struct nfs_fattr *fattr) > inode->i_size = nfs_size_to_loff_t(fattr- > >size); > else > nfs_set_cache_invalid(inode, > NFS_INO_INVALID_SIZE); > - if (fattr->valid & NFS_ATTR_FATTR_NLINK) > - set_nlink(inode, fattr->nlink); > - else if (fattr_supported & NFS_ATTR_FATTR_NLINK) > + if (!(fattr->valid & NFS_ATTR_FATTR_NLINK) && > + fattr_supported & NFS_ATTR_FATTR_NLINK) > nfs_set_cache_invalid(inode, > NFS_INO_INVALID_NLINK); > + else > + set_nlink(inode, fattr->nlink); No. You can't use the value of fattr->nlink when that value is undefined. > if (fattr->valid & NFS_ATTR_FATTR_OWNER) > inode->i_uid = fattr->uid; > else if (fattr_supported & NFS_ATTR_FATTR_OWNER) -- Trond Myklebust Linux NFS client maintainer, Hammerspace trond.myklebust@xxxxxxxxxxxxxxx