Commit a3da7896 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Lachlan McIlroy

[XFS] cleanup vnode use in xfs_link

SGI-PV: 976035
SGI-Modid: xfs-linux-melb:xfs-kern:30547a
Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
Signed-off-by: default avatarLachlan McIlroy <lachlan@sgi.com>
parent 979ebab1
...@@ -395,23 +395,22 @@ xfs_vn_link( ...@@ -395,23 +395,22 @@ xfs_vn_link(
struct inode *dir, struct inode *dir,
struct dentry *dentry) struct dentry *dentry)
{ {
struct inode *ip; /* inode of guy being linked to */ struct inode *inode; /* inode of guy being linked to */
bhv_vnode_t *vp; /* vp of name being linked */
int error; int error;
ip = old_dentry->d_inode; /* inode being linked to */ inode = old_dentry->d_inode;
vp = vn_from_inode(ip);
VN_HOLD(vp); igrab(inode);
error = xfs_link(XFS_I(dir), vp, dentry); error = xfs_link(XFS_I(dir), XFS_I(inode), dentry);
if (unlikely(error)) { if (unlikely(error)) {
VN_RELE(vp); iput(inode);
} else { return -error;
xfs_iflags_set(XFS_I(dir), XFS_IMODIFIED);
xfs_validate_fields(ip);
d_instantiate(dentry, ip);
} }
return -error;
xfs_iflags_set(XFS_I(dir), XFS_IMODIFIED);
xfs_validate_fields(inode);
d_instantiate(dentry, inode);
return 0;
} }
STATIC int STATIC int
......
...@@ -2471,12 +2471,10 @@ xfs_remove( ...@@ -2471,12 +2471,10 @@ xfs_remove(
int int
xfs_link( xfs_link(
xfs_inode_t *tdp, xfs_inode_t *tdp,
bhv_vnode_t *src_vp, xfs_inode_t *sip,
bhv_vname_t *dentry) bhv_vname_t *dentry)
{ {
bhv_vnode_t *target_dir_vp = XFS_ITOV(tdp);
xfs_mount_t *mp = tdp->i_mount; xfs_mount_t *mp = tdp->i_mount;
xfs_inode_t *sip = xfs_vtoi(src_vp);
xfs_trans_t *tp; xfs_trans_t *tp;
xfs_inode_t *ips[2]; xfs_inode_t *ips[2];
int error; int error;
...@@ -2489,10 +2487,10 @@ xfs_link( ...@@ -2489,10 +2487,10 @@ xfs_link(
int target_namelen; int target_namelen;
xfs_itrace_entry(tdp); xfs_itrace_entry(tdp);
xfs_itrace_entry(xfs_vtoi(src_vp)); xfs_itrace_entry(sip);
target_namelen = VNAMELEN(dentry); target_namelen = VNAMELEN(dentry);
ASSERT(!VN_ISDIR(src_vp)); ASSERT(!S_ISDIR(sip->i_d.di_mode));
if (XFS_FORCED_SHUTDOWN(mp)) if (XFS_FORCED_SHUTDOWN(mp))
return XFS_ERROR(EIO); return XFS_ERROR(EIO);
...@@ -2544,8 +2542,8 @@ xfs_link( ...@@ -2544,8 +2542,8 @@ xfs_link(
* xfs_trans_cancel will both unlock the inodes and * xfs_trans_cancel will both unlock the inodes and
* decrement the associated ref counts. * decrement the associated ref counts.
*/ */
VN_HOLD(src_vp); IHOLD(sip);
VN_HOLD(target_dir_vp); IHOLD(tdp);
xfs_trans_ijoin(tp, sip, XFS_ILOCK_EXCL); xfs_trans_ijoin(tp, sip, XFS_ILOCK_EXCL);
xfs_trans_ijoin(tp, tdp, XFS_ILOCK_EXCL); xfs_trans_ijoin(tp, tdp, XFS_ILOCK_EXCL);
......
...@@ -28,7 +28,7 @@ int xfs_lookup(struct xfs_inode *dp, bhv_vname_t *dentry, ...@@ -28,7 +28,7 @@ int xfs_lookup(struct xfs_inode *dp, bhv_vname_t *dentry,
int xfs_create(struct xfs_inode *dp, bhv_vname_t *dentry, mode_t mode, int xfs_create(struct xfs_inode *dp, bhv_vname_t *dentry, mode_t mode,
xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp);
int xfs_remove(struct xfs_inode *dp, bhv_vname_t *dentry); int xfs_remove(struct xfs_inode *dp, bhv_vname_t *dentry);
int xfs_link(struct xfs_inode *tdp, bhv_vnode_t *src_vp, int xfs_link(struct xfs_inode *tdp, struct xfs_inode *sip,
bhv_vname_t *dentry); bhv_vname_t *dentry);
int xfs_mkdir(struct xfs_inode *dp, bhv_vname_t *dentry, int xfs_mkdir(struct xfs_inode *dp, bhv_vname_t *dentry,
mode_t mode, struct xfs_inode **ipp, struct cred *credp); mode_t mode, struct xfs_inode **ipp, struct cred *credp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment