Merge branch 'xfs-commit-cleanup' into for-next
Conflicts: fs/xfs/xfs_attr_inactive.c
This commit is contained in:
@@ -905,7 +905,6 @@ xfs_dir_ialloc(
|
||||
|
||||
{
|
||||
xfs_trans_t *tp;
|
||||
xfs_trans_t *ntp;
|
||||
xfs_inode_t *ip;
|
||||
xfs_buf_t *ialloc_context = NULL;
|
||||
int code;
|
||||
@@ -954,8 +953,6 @@ xfs_dir_ialloc(
|
||||
* to succeed the second time.
|
||||
*/
|
||||
if (ialloc_context) {
|
||||
struct xfs_trans_res tres;
|
||||
|
||||
/*
|
||||
* Normally, xfs_trans_commit releases all the locks.
|
||||
* We call bhold to hang on to the ialloc_context across
|
||||
@@ -964,12 +961,6 @@ xfs_dir_ialloc(
|
||||
* allocation group.
|
||||
*/
|
||||
xfs_trans_bhold(tp, ialloc_context);
|
||||
/*
|
||||
* Save the log reservation so we can use
|
||||
* them in the next transaction.
|
||||
*/
|
||||
tres.tr_logres = xfs_trans_get_log_res(tp);
|
||||
tres.tr_logcount = xfs_trans_get_log_count(tp);
|
||||
|
||||
/*
|
||||
* We want the quota changes to be associated with the next
|
||||
@@ -985,35 +976,9 @@ xfs_dir_ialloc(
|
||||
tp->t_flags &= ~(XFS_TRANS_DQ_DIRTY);
|
||||
}
|
||||
|
||||
ntp = xfs_trans_dup(tp);
|
||||
code = xfs_trans_commit(tp, 0);
|
||||
tp = ntp;
|
||||
if (committed != NULL) {
|
||||
code = xfs_trans_roll(&tp, 0);
|
||||
if (committed != NULL)
|
||||
*committed = 1;
|
||||
}
|
||||
/*
|
||||
* If we get an error during the commit processing,
|
||||
* release the buffer that is still held and return
|
||||
* to the caller.
|
||||
*/
|
||||
if (code) {
|
||||
xfs_buf_relse(ialloc_context);
|
||||
if (dqinfo) {
|
||||
tp->t_dqinfo = dqinfo;
|
||||
xfs_trans_free_dqinfo(tp);
|
||||
}
|
||||
*tpp = ntp;
|
||||
*ipp = NULL;
|
||||
return code;
|
||||
}
|
||||
|
||||
/*
|
||||
* transaction commit worked ok so we can drop the extra ticket
|
||||
* reference that we gained in xfs_trans_dup()
|
||||
*/
|
||||
xfs_log_ticket_put(tp->t_ticket);
|
||||
tres.tr_logflags = XFS_TRANS_PERM_LOG_RES;
|
||||
code = xfs_trans_reserve(tp, &tres, 0, 0);
|
||||
|
||||
/*
|
||||
* Re-attach the quota info that we detached from prev trx.
|
||||
@@ -1025,7 +990,7 @@ xfs_dir_ialloc(
|
||||
|
||||
if (code) {
|
||||
xfs_buf_relse(ialloc_context);
|
||||
*tpp = ntp;
|
||||
*tpp = tp;
|
||||
*ipp = NULL;
|
||||
return code;
|
||||
}
|
||||
@@ -1127,7 +1092,6 @@ xfs_create(
|
||||
xfs_bmap_free_t free_list;
|
||||
xfs_fsblock_t first_block;
|
||||
bool unlock_dp_on_error = false;
|
||||
uint cancel_flags;
|
||||
int committed;
|
||||
prid_t prid;
|
||||
struct xfs_dquot *udqp = NULL;
|
||||
@@ -1164,8 +1128,6 @@ xfs_create(
|
||||
tp = xfs_trans_alloc(mp, XFS_TRANS_CREATE);
|
||||
}
|
||||
|
||||
cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
|
||||
|
||||
/*
|
||||
* Initially assume that the file does not exist and
|
||||
* reserve the resources for that case. If that is not
|
||||
@@ -1183,10 +1145,9 @@ xfs_create(
|
||||
resblks = 0;
|
||||
error = xfs_trans_reserve(tp, tres, 0, 0);
|
||||
}
|
||||
if (error) {
|
||||
cancel_flags = 0;
|
||||
if (error)
|
||||
goto out_trans_cancel;
|
||||
}
|
||||
|
||||
|
||||
xfs_ilock(dp, XFS_ILOCK_EXCL | XFS_ILOCK_PARENT);
|
||||
unlock_dp_on_error = true;
|
||||
@@ -1217,7 +1178,7 @@ xfs_create(
|
||||
if (error) {
|
||||
if (error == -ENOSPC)
|
||||
goto out_trans_cancel;
|
||||
goto out_trans_abort;
|
||||
goto out_trans_cancel;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1235,7 +1196,7 @@ xfs_create(
|
||||
resblks - XFS_IALLOC_SPACE_RES(mp) : 0);
|
||||
if (error) {
|
||||
ASSERT(error != -ENOSPC);
|
||||
goto out_trans_abort;
|
||||
goto out_trans_cancel;
|
||||
}
|
||||
xfs_trans_ichgtime(tp, dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
||||
xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE);
|
||||
@@ -1269,7 +1230,7 @@ xfs_create(
|
||||
if (error)
|
||||
goto out_bmap_cancel;
|
||||
|
||||
error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
|
||||
error = xfs_trans_commit(tp);
|
||||
if (error)
|
||||
goto out_release_inode;
|
||||
|
||||
@@ -1282,10 +1243,8 @@ xfs_create(
|
||||
|
||||
out_bmap_cancel:
|
||||
xfs_bmap_cancel(&free_list);
|
||||
out_trans_abort:
|
||||
cancel_flags |= XFS_TRANS_ABORT;
|
||||
out_trans_cancel:
|
||||
xfs_trans_cancel(tp, cancel_flags);
|
||||
xfs_trans_cancel(tp);
|
||||
out_release_inode:
|
||||
/*
|
||||
* Wait until after the current transaction is aborted to finish the
|
||||
@@ -1317,7 +1276,6 @@ xfs_create_tmpfile(
|
||||
struct xfs_inode *ip = NULL;
|
||||
struct xfs_trans *tp = NULL;
|
||||
int error;
|
||||
uint cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
|
||||
prid_t prid;
|
||||
struct xfs_dquot *udqp = NULL;
|
||||
struct xfs_dquot *gdqp = NULL;
|
||||
@@ -1350,10 +1308,8 @@ xfs_create_tmpfile(
|
||||
resblks = 0;
|
||||
error = xfs_trans_reserve(tp, tres, 0, 0);
|
||||
}
|
||||
if (error) {
|
||||
cancel_flags = 0;
|
||||
if (error)
|
||||
goto out_trans_cancel;
|
||||
}
|
||||
|
||||
error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp,
|
||||
pdqp, resblks, 1, 0);
|
||||
@@ -1365,7 +1321,7 @@ xfs_create_tmpfile(
|
||||
if (error) {
|
||||
if (error == -ENOSPC)
|
||||
goto out_trans_cancel;
|
||||
goto out_trans_abort;
|
||||
goto out_trans_cancel;
|
||||
}
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
||||
@@ -1381,9 +1337,9 @@ xfs_create_tmpfile(
|
||||
ip->i_d.di_nlink--;
|
||||
error = xfs_iunlink(tp, ip);
|
||||
if (error)
|
||||
goto out_trans_abort;
|
||||
goto out_trans_cancel;
|
||||
|
||||
error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
|
||||
error = xfs_trans_commit(tp);
|
||||
if (error)
|
||||
goto out_release_inode;
|
||||
|
||||
@@ -1394,10 +1350,8 @@ xfs_create_tmpfile(
|
||||
*ipp = ip;
|
||||
return 0;
|
||||
|
||||
out_trans_abort:
|
||||
cancel_flags |= XFS_TRANS_ABORT;
|
||||
out_trans_cancel:
|
||||
xfs_trans_cancel(tp, cancel_flags);
|
||||
xfs_trans_cancel(tp);
|
||||
out_release_inode:
|
||||
/*
|
||||
* Wait until after the current transaction is aborted to finish the
|
||||
@@ -1427,7 +1381,6 @@ xfs_link(
|
||||
int error;
|
||||
xfs_bmap_free_t free_list;
|
||||
xfs_fsblock_t first_block;
|
||||
int cancel_flags;
|
||||
int committed;
|
||||
int resblks;
|
||||
|
||||
@@ -1447,17 +1400,14 @@ xfs_link(
|
||||
goto std_return;
|
||||
|
||||
tp = xfs_trans_alloc(mp, XFS_TRANS_LINK);
|
||||
cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
|
||||
resblks = XFS_LINK_SPACE_RES(mp, target_name->len);
|
||||
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_link, resblks, 0);
|
||||
if (error == -ENOSPC) {
|
||||
resblks = 0;
|
||||
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_link, 0, 0);
|
||||
}
|
||||
if (error) {
|
||||
cancel_flags = 0;
|
||||
if (error)
|
||||
goto error_return;
|
||||
}
|
||||
|
||||
xfs_lock_two_inodes(sip, tdp, XFS_ILOCK_EXCL);
|
||||
|
||||
@@ -1486,19 +1436,19 @@ xfs_link(
|
||||
if (sip->i_d.di_nlink == 0) {
|
||||
error = xfs_iunlink_remove(tp, sip);
|
||||
if (error)
|
||||
goto abort_return;
|
||||
goto error_return;
|
||||
}
|
||||
|
||||
error = xfs_dir_createname(tp, tdp, target_name, sip->i_ino,
|
||||
&first_block, &free_list, resblks);
|
||||
if (error)
|
||||
goto abort_return;
|
||||
goto error_return;
|
||||
xfs_trans_ichgtime(tp, tdp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
||||
xfs_trans_log_inode(tp, tdp, XFS_ILOG_CORE);
|
||||
|
||||
error = xfs_bumplink(tp, sip);
|
||||
if (error)
|
||||
goto abort_return;
|
||||
goto error_return;
|
||||
|
||||
/*
|
||||
* If this is a synchronous mount, make sure that the
|
||||
@@ -1512,15 +1462,13 @@ xfs_link(
|
||||
error = xfs_bmap_finish (&tp, &free_list, &committed);
|
||||
if (error) {
|
||||
xfs_bmap_cancel(&free_list);
|
||||
goto abort_return;
|
||||
goto error_return;
|
||||
}
|
||||
|
||||
return xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
|
||||
return xfs_trans_commit(tp);
|
||||
|
||||
abort_return:
|
||||
cancel_flags |= XFS_TRANS_ABORT;
|
||||
error_return:
|
||||
xfs_trans_cancel(tp, cancel_flags);
|
||||
xfs_trans_cancel(tp);
|
||||
std_return:
|
||||
return error;
|
||||
}
|
||||
@@ -1555,7 +1503,6 @@ xfs_itruncate_extents(
|
||||
{
|
||||
struct xfs_mount *mp = ip->i_mount;
|
||||
struct xfs_trans *tp = *tpp;
|
||||
struct xfs_trans *ntp;
|
||||
xfs_bmap_free_t free_list;
|
||||
xfs_fsblock_t first_block;
|
||||
xfs_fileoff_t first_unmap_block;
|
||||
@@ -1613,29 +1560,7 @@ xfs_itruncate_extents(
|
||||
if (error)
|
||||
goto out_bmap_cancel;
|
||||
|
||||
if (committed) {
|
||||
/*
|
||||
* Mark the inode dirty so it will be logged and
|
||||
* moved forward in the log as part of every commit.
|
||||
*/
|
||||
xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
|
||||
}
|
||||
|
||||
ntp = xfs_trans_dup(tp);
|
||||
error = xfs_trans_commit(tp, 0);
|
||||
tp = ntp;
|
||||
|
||||
xfs_trans_ijoin(tp, ip, 0);
|
||||
|
||||
if (error)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Transaction commit worked ok so we can drop the extra ticket
|
||||
* reference that we gained in xfs_trans_dup()
|
||||
*/
|
||||
xfs_log_ticket_put(tp->t_ticket);
|
||||
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_itruncate, 0, 0);
|
||||
error = xfs_trans_roll(&tp, ip);
|
||||
if (error)
|
||||
goto out;
|
||||
}
|
||||
@@ -1756,7 +1681,7 @@ xfs_inactive_truncate(
|
||||
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_itruncate, 0, 0);
|
||||
if (error) {
|
||||
ASSERT(XFS_FORCED_SHUTDOWN(mp));
|
||||
xfs_trans_cancel(tp, 0);
|
||||
xfs_trans_cancel(tp);
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -1777,7 +1702,7 @@ xfs_inactive_truncate(
|
||||
|
||||
ASSERT(ip->i_d.di_nextents == 0);
|
||||
|
||||
error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
|
||||
error = xfs_trans_commit(tp);
|
||||
if (error)
|
||||
goto error_unlock;
|
||||
|
||||
@@ -1785,7 +1710,7 @@ xfs_inactive_truncate(
|
||||
return 0;
|
||||
|
||||
error_trans_cancel:
|
||||
xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT);
|
||||
xfs_trans_cancel(tp);
|
||||
error_unlock:
|
||||
xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
||||
return error;
|
||||
@@ -1835,7 +1760,7 @@ xfs_inactive_ifree(
|
||||
} else {
|
||||
ASSERT(XFS_FORCED_SHUTDOWN(mp));
|
||||
}
|
||||
xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES);
|
||||
xfs_trans_cancel(tp);
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -1855,7 +1780,7 @@ xfs_inactive_ifree(
|
||||
__func__, error);
|
||||
xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR);
|
||||
}
|
||||
xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_ABORT);
|
||||
xfs_trans_cancel(tp);
|
||||
xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
||||
return error;
|
||||
}
|
||||
@@ -1874,7 +1799,7 @@ xfs_inactive_ifree(
|
||||
if (error)
|
||||
xfs_notice(mp, "%s: xfs_bmap_finish returned error %d",
|
||||
__func__, error);
|
||||
error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
|
||||
error = xfs_trans_commit(tp);
|
||||
if (error)
|
||||
xfs_notice(mp, "%s: xfs_trans_commit returned error %d",
|
||||
__func__, error);
|
||||
@@ -2549,7 +2474,6 @@ xfs_remove(
|
||||
int error = 0;
|
||||
xfs_bmap_free_t free_list;
|
||||
xfs_fsblock_t first_block;
|
||||
int cancel_flags;
|
||||
int committed;
|
||||
uint resblks;
|
||||
|
||||
@@ -2570,7 +2494,6 @@ xfs_remove(
|
||||
tp = xfs_trans_alloc(mp, XFS_TRANS_RMDIR);
|
||||
else
|
||||
tp = xfs_trans_alloc(mp, XFS_TRANS_REMOVE);
|
||||
cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
|
||||
|
||||
/*
|
||||
* We try to get the real space reservation first,
|
||||
@@ -2589,7 +2512,6 @@ xfs_remove(
|
||||
}
|
||||
if (error) {
|
||||
ASSERT(error != -ENOSPC);
|
||||
cancel_flags = 0;
|
||||
goto out_trans_cancel;
|
||||
}
|
||||
|
||||
@@ -2601,7 +2523,6 @@ xfs_remove(
|
||||
/*
|
||||
* If we're removing a directory perform some additional validation.
|
||||
*/
|
||||
cancel_flags |= XFS_TRANS_ABORT;
|
||||
if (is_dir) {
|
||||
ASSERT(ip->i_d.di_nlink >= 2);
|
||||
if (ip->i_d.di_nlink != 2) {
|
||||
@@ -2657,7 +2578,7 @@ xfs_remove(
|
||||
if (error)
|
||||
goto out_bmap_cancel;
|
||||
|
||||
error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
|
||||
error = xfs_trans_commit(tp);
|
||||
if (error)
|
||||
goto std_return;
|
||||
|
||||
@@ -2669,7 +2590,7 @@ xfs_remove(
|
||||
out_bmap_cancel:
|
||||
xfs_bmap_cancel(&free_list);
|
||||
out_trans_cancel:
|
||||
xfs_trans_cancel(tp, cancel_flags);
|
||||
xfs_trans_cancel(tp);
|
||||
std_return:
|
||||
return error;
|
||||
}
|
||||
@@ -2743,11 +2664,11 @@ xfs_finish_rename(
|
||||
error = xfs_bmap_finish(&tp, free_list, &committed);
|
||||
if (error) {
|
||||
xfs_bmap_cancel(free_list);
|
||||
xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_ABORT);
|
||||
xfs_trans_cancel(tp);
|
||||
return error;
|
||||
}
|
||||
|
||||
return xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES);
|
||||
return xfs_trans_commit(tp);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2868,7 +2789,7 @@ xfs_cross_rename(
|
||||
|
||||
out_trans_abort:
|
||||
xfs_bmap_cancel(free_list);
|
||||
xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_ABORT);
|
||||
xfs_trans_cancel(tp);
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -2928,7 +2849,6 @@ xfs_rename(
|
||||
int num_inodes = __XFS_SORT_INODES;
|
||||
bool new_parent = (src_dp != target_dp);
|
||||
bool src_is_directory = S_ISDIR(src_ip->i_d.di_mode);
|
||||
int cancel_flags = 0;
|
||||
int spaceres;
|
||||
int error;
|
||||
|
||||
@@ -2964,7 +2884,6 @@ xfs_rename(
|
||||
}
|
||||
if (error)
|
||||
goto out_trans_cancel;
|
||||
cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
|
||||
|
||||
/*
|
||||
* Attach the dquots to the inodes
|
||||
@@ -3035,10 +2954,8 @@ xfs_rename(
|
||||
error = xfs_dir_createname(tp, target_dp, target_name,
|
||||
src_ip->i_ino, &first_block,
|
||||
&free_list, spaceres);
|
||||
if (error == -ENOSPC)
|
||||
goto out_bmap_cancel;
|
||||
if (error)
|
||||
goto out_trans_abort;
|
||||
goto out_bmap_cancel;
|
||||
|
||||
xfs_trans_ichgtime(tp, target_dp,
|
||||
XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
||||
@@ -3046,7 +2963,7 @@ xfs_rename(
|
||||
if (new_parent && src_is_directory) {
|
||||
error = xfs_bumplink(tp, target_dp);
|
||||
if (error)
|
||||
goto out_trans_abort;
|
||||
goto out_bmap_cancel;
|
||||
}
|
||||
} else { /* target_ip != NULL */
|
||||
/*
|
||||
@@ -3078,7 +2995,7 @@ xfs_rename(
|
||||
src_ip->i_ino,
|
||||
&first_block, &free_list, spaceres);
|
||||
if (error)
|
||||
goto out_trans_abort;
|
||||
goto out_bmap_cancel;
|
||||
|
||||
xfs_trans_ichgtime(tp, target_dp,
|
||||
XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
||||
@@ -3089,7 +3006,7 @@ xfs_rename(
|
||||
*/
|
||||
error = xfs_droplink(tp, target_ip);
|
||||
if (error)
|
||||
goto out_trans_abort;
|
||||
goto out_bmap_cancel;
|
||||
|
||||
if (src_is_directory) {
|
||||
/*
|
||||
@@ -3097,7 +3014,7 @@ xfs_rename(
|
||||
*/
|
||||
error = xfs_droplink(tp, target_ip);
|
||||
if (error)
|
||||
goto out_trans_abort;
|
||||
goto out_bmap_cancel;
|
||||
}
|
||||
} /* target_ip != NULL */
|
||||
|
||||
@@ -3114,7 +3031,7 @@ xfs_rename(
|
||||
&first_block, &free_list, spaceres);
|
||||
ASSERT(error != -EEXIST);
|
||||
if (error)
|
||||
goto out_trans_abort;
|
||||
goto out_bmap_cancel;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3140,7 +3057,7 @@ xfs_rename(
|
||||
*/
|
||||
error = xfs_droplink(tp, src_dp);
|
||||
if (error)
|
||||
goto out_trans_abort;
|
||||
goto out_bmap_cancel;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3155,7 +3072,7 @@ xfs_rename(
|
||||
error = xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino,
|
||||
&first_block, &free_list, spaceres);
|
||||
if (error)
|
||||
goto out_trans_abort;
|
||||
goto out_bmap_cancel;
|
||||
|
||||
/*
|
||||
* For whiteouts, we need to bump the link count on the whiteout inode.
|
||||
@@ -3169,10 +3086,10 @@ xfs_rename(
|
||||
ASSERT(VFS_I(wip)->i_nlink == 0 && wip->i_d.di_nlink == 0);
|
||||
error = xfs_bumplink(tp, wip);
|
||||
if (error)
|
||||
goto out_trans_abort;
|
||||
goto out_bmap_cancel;
|
||||
error = xfs_iunlink_remove(tp, wip);
|
||||
if (error)
|
||||
goto out_trans_abort;
|
||||
goto out_bmap_cancel;
|
||||
xfs_trans_log_inode(tp, wip, XFS_ILOG_CORE);
|
||||
|
||||
/*
|
||||
@@ -3193,12 +3110,10 @@ xfs_rename(
|
||||
IRELE(wip);
|
||||
return error;
|
||||
|
||||
out_trans_abort:
|
||||
cancel_flags |= XFS_TRANS_ABORT;
|
||||
out_bmap_cancel:
|
||||
xfs_bmap_cancel(&free_list);
|
||||
out_trans_cancel:
|
||||
xfs_trans_cancel(tp, cancel_flags);
|
||||
xfs_trans_cancel(tp);
|
||||
if (wip)
|
||||
IRELE(wip);
|
||||
return error;
|
||||
|
Reference in New Issue
Block a user