Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 95002
b: refs/heads/master
c: 5df78e7
h: refs/heads/master
v: v3
  • Loading branch information
Christoph Hellwig authored and Lachlan McIlroy committed Apr 29, 2008
1 parent 8edc5af commit 35cae81
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 60 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 82dab941a192d081dd0b7cde3ed32603372d5acc
refs/heads/master: 5df78e73d328e870a1cd8a9e0f39bf094e42ce9d
63 changes: 4 additions & 59 deletions trunk/fs/xfs/xfs_vnodeops.c
Original file line number Diff line number Diff line change
Expand Up @@ -2162,20 +2162,6 @@ xfs_remove(
return error;
}

/*
* We need to get a reference to ip before we get our log
* reservation. The reason for this is that we cannot call
* xfs_iget for an inode for which we do not have a reference
* once we've acquired a log reservation. This is because the
* inode we are trying to get might be in xfs_inactive going
* for a log reservation. Since we'll have to wait for the
* inactive code to complete before returning from xfs_iget,
* we need to make sure that we don't have log space reserved
* when we call xfs_iget. Instead we get an unlocked reference
* to the inode before getting our log reservation.
*/
IHOLD(ip);

xfs_itrace_entry(ip);
xfs_itrace_ref(ip);

Expand All @@ -2184,7 +2170,6 @@ xfs_remove(
error = XFS_QM_DQATTACH(mp, ip, 0);
if (error) {
REMOVE_DEBUG_TRACE(__LINE__);
IRELE(ip);
goto std_return;
}

Expand All @@ -2211,22 +2196,21 @@ xfs_remove(
ASSERT(error != ENOSPC);
REMOVE_DEBUG_TRACE(__LINE__);
xfs_trans_cancel(tp, 0);
IRELE(ip);
return error;
}

error = xfs_lock_dir_and_entry(dp, ip);
if (error) {
REMOVE_DEBUG_TRACE(__LINE__);
xfs_trans_cancel(tp, cancel_flags);
IRELE(ip);
goto std_return;
}

/*
* At this point, we've gotten both the directory and the entry
* inodes locked.
*/
IHOLD(ip);
xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);

IHOLD(dp);
Expand Down Expand Up @@ -2259,12 +2243,6 @@ xfs_remove(
*/
link_zero = (ip)->i_d.di_nlink==0;

/*
* Take an extra ref on the inode so that it doesn't
* go to xfs_inactive() from within the commit.
*/
IHOLD(ip);

/*
* If this is a synchronous mount, make sure that the
* remove transaction goes to disk before returning to
Expand All @@ -2281,10 +2259,8 @@ xfs_remove(
}

error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
if (error) {
IRELE(ip);
if (error)
goto std_return;
}

/*
* If we are using filestreams, kill the stream association.
Expand All @@ -2296,7 +2272,6 @@ xfs_remove(
xfs_filestream_deassociate(ip);

xfs_itrace_exit(ip);
IRELE(ip);

/* Fall through to std_return with error = 0 */
std_return:
Expand Down Expand Up @@ -2325,8 +2300,6 @@ xfs_remove(
cancel_flags |= XFS_TRANS_ABORT;
xfs_trans_cancel(tp, cancel_flags);

IRELE(ip);

goto std_return;
}

Expand Down Expand Up @@ -2698,7 +2671,6 @@ xfs_rmdir(
struct xfs_name *name,
xfs_inode_t *cdp)
{
bhv_vnode_t *dir_vp = XFS_ITOV(dp);
xfs_mount_t *mp = dp->i_mount;
xfs_trans_t *tp;
int error;
Expand All @@ -2723,28 +2695,13 @@ xfs_rmdir(
return XFS_ERROR(error);
}

/*
* We need to get a reference to cdp before we get our log
* reservation. The reason for this is that we cannot call
* xfs_iget for an inode for which we do not have a reference
* once we've acquired a log reservation. This is because the
* inode we are trying to get might be in xfs_inactive going
* for a log reservation. Since we'll have to wait for the
* inactive code to complete before returning from xfs_iget,
* we need to make sure that we don't have log space reserved
* when we call xfs_iget. Instead we get an unlocked reference
* to the inode before getting our log reservation.
*/
IHOLD(cdp);

/*
* Get the dquots for the inodes.
*/
error = XFS_QM_DQATTACH(mp, dp, 0);
if (!error)
error = XFS_QM_DQATTACH(mp, cdp, 0);
if (error) {
IRELE(cdp);
REMOVE_DEBUG_TRACE(__LINE__);
goto std_return;
}
Expand All @@ -2771,7 +2728,6 @@ xfs_rmdir(
if (error) {
ASSERT(error != ENOSPC);
cancel_flags = 0;
IRELE(cdp);
goto error_return;
}
XFS_BMAP_INIT(&free_list, &first_block);
Expand All @@ -2785,14 +2741,13 @@ xfs_rmdir(
error = xfs_lock_dir_and_entry(dp, cdp);
if (error) {
xfs_trans_cancel(tp, cancel_flags);
IRELE(cdp);
goto std_return;
}

IHOLD(dp);
xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL);
VN_HOLD(dir_vp);

xfs_itrace_ref(cdp);
IHOLD(cdp);
xfs_trans_ijoin(tp, cdp, XFS_ILOCK_EXCL);

ASSERT(cdp->i_d.di_nlink >= 2);
Expand Down Expand Up @@ -2845,12 +2800,6 @@ xfs_rmdir(
/* Determine these before committing transaction */
last_cdp_link = (cdp)->i_d.di_nlink==0;

/*
* Take an extra ref on the child vnode so that it
* does not go to xfs_inactive() from within the commit.
*/
IHOLD(cdp);

/*
* If this is a synchronous mount, make sure that the
* rmdir transaction goes to disk before returning to
Expand All @@ -2865,19 +2814,15 @@ xfs_rmdir(
xfs_bmap_cancel(&free_list);
xfs_trans_cancel(tp, (XFS_TRANS_RELEASE_LOG_RES |
XFS_TRANS_ABORT));
IRELE(cdp);
goto std_return;
}

error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
if (error) {
IRELE(cdp);
goto std_return;
}


IRELE(cdp);

/* Fall through to std_return with error = 0 or the errno
* from xfs_trans_commit. */
std_return:
Expand Down

0 comments on commit 35cae81

Please sign in to comment.