NFSv4: link must update the inode nlink.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
Trond Myklebust 2021-04-01 14:57:56 -04:00
parent 82eae5a432
commit 1301e421b7
2 changed files with 10 additions and 1 deletions

View File

@ -1711,7 +1711,7 @@ static void nfs_drop_nlink(struct inode *inode)
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_NLINK | NFS_INO_REVAL_FORCED);
NFS_INO_INVALID_NLINK);
spin_unlock(&inode->i_lock);
}

View File

@ -1175,6 +1175,14 @@ nfs4_inc_nlink_locked(struct inode *inode)
inc_nlink(inode);
}
static void
nfs4_inc_nlink(struct inode *inode)
{
spin_lock(&inode->i_lock);
nfs4_inc_nlink_locked(inode);
spin_unlock(&inode->i_lock);
}
static void
nfs4_dec_nlink_locked(struct inode *inode)
{
@ -4791,6 +4799,7 @@ static int _nfs4_proc_link(struct inode *inode, struct inode *dir, const struct
if (!status) {
nfs4_update_changeattr(dir, &res.cinfo, res.fattr->time_start,
NFS_INO_INVALID_DATA);
nfs4_inc_nlink(inode);
status = nfs_post_op_update_inode(inode, res.fattr);
if (!status)
nfs_setsecurity(inode, res.fattr, res.label);