stop using igrab in xfs_vn_link
PATCH 1/1 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 Christoph Hellwig <[email protected]>
fs/xfs/linux-2.6/xfs_iops.c +3 -6
@@ -359,20 +359,17 @@ 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; - } +atomic_inc (&inode->i_count);d_instantiate (dentry, inode);return 0 ; }