mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
[XFS] cleanup vnode use in xfs_link
SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30547a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
This commit is contained in:
parent
979ebab116
commit
a3da789640
3 changed files with 17 additions and 20 deletions
|
@ -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(
|
||||||
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(
|
||||||
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(
|
||||||
* 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,
|
||||||
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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue