Commit 1301e421 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFSv4: link must update the inode nlink.

parent 82eae5a4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
}

+9 −0
Original line number Diff line number Diff line
@@ -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);