Commit d9424b3c authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Niv Sardi
Browse files

stop using igrab in xfs_vn_link



->link is guranteed to get an already reference inode passed so we
can do a simple increment of i_count instead of using igrab and thus
avoid banging on the global inode_lock.  This is what most filesystems
already do.

Also move the increment after the call to xfs_link to simplify error
handling.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDave Chinner <david@fromorbit.com>
Signed-off-by: default avatarNiv Sardi <xaiki@sgi.com>
parent 5d765b97
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -367,21 +367,18 @@ xfs_vn_link(
	struct inode	*dir,
	struct dentry	*dentry)
{
	struct inode	*inode;	/* inode of guy being linked to */
	struct inode	*inode = old_dentry->d_inode;
	struct xfs_name	name;
	int		error;

	inode = old_dentry->d_inode;
	xfs_dentry_to_name(&name, dentry);

	igrab(inode);
	error = xfs_link(XFS_I(dir), XFS_I(inode), &name);
	if (unlikely(error)) {
		iput(inode);
	if (unlikely(error))
		return -error;
	}

	xfs_iflags_set(XFS_I(dir), XFS_IMODIFIED);
	atomic_inc(&inode->i_count);
	d_instantiate(dentry, inode);
	return 0;
}