|
@@ -1092,7 +1092,6 @@ xfs_create(
|
|
xfs_bmap_free_t free_list;
|
|
xfs_bmap_free_t free_list;
|
|
xfs_fsblock_t first_block;
|
|
xfs_fsblock_t first_block;
|
|
bool unlock_dp_on_error = false;
|
|
bool unlock_dp_on_error = false;
|
|
- uint cancel_flags;
|
|
|
|
int committed;
|
|
int committed;
|
|
prid_t prid;
|
|
prid_t prid;
|
|
struct xfs_dquot *udqp = NULL;
|
|
struct xfs_dquot *udqp = NULL;
|
|
@@ -1129,8 +1128,6 @@ xfs_create(
|
|
tp = xfs_trans_alloc(mp, XFS_TRANS_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
|
|
* Initially assume that the file does not exist and
|
|
* reserve the resources for that case. If that is not
|
|
* reserve the resources for that case. If that is not
|
|
@@ -1148,10 +1145,9 @@ xfs_create(
|
|
resblks = 0;
|
|
resblks = 0;
|
|
error = xfs_trans_reserve(tp, tres, 0, 0);
|
|
error = xfs_trans_reserve(tp, tres, 0, 0);
|
|
}
|
|
}
|
|
- if (error) {
|
|
|
|
- cancel_flags = 0;
|
|
|
|
|
|
+ if (error)
|
|
goto out_trans_cancel;
|
|
goto out_trans_cancel;
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
|
|
xfs_ilock(dp, XFS_ILOCK_EXCL | XFS_ILOCK_PARENT);
|
|
xfs_ilock(dp, XFS_ILOCK_EXCL | XFS_ILOCK_PARENT);
|
|
unlock_dp_on_error = true;
|
|
unlock_dp_on_error = true;
|
|
@@ -1182,7 +1178,7 @@ xfs_create(
|
|
if (error) {
|
|
if (error) {
|
|
if (error == -ENOSPC)
|
|
if (error == -ENOSPC)
|
|
goto out_trans_cancel;
|
|
goto out_trans_cancel;
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_trans_cancel;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -1200,7 +1196,7 @@ xfs_create(
|
|
resblks - XFS_IALLOC_SPACE_RES(mp) : 0);
|
|
resblks - XFS_IALLOC_SPACE_RES(mp) : 0);
|
|
if (error) {
|
|
if (error) {
|
|
ASSERT(error != -ENOSPC);
|
|
ASSERT(error != -ENOSPC);
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_trans_cancel;
|
|
}
|
|
}
|
|
xfs_trans_ichgtime(tp, dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
|
xfs_trans_ichgtime(tp, dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
|
xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE);
|
|
xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE);
|
|
@@ -1247,10 +1243,8 @@ xfs_create(
|
|
|
|
|
|
out_bmap_cancel:
|
|
out_bmap_cancel:
|
|
xfs_bmap_cancel(&free_list);
|
|
xfs_bmap_cancel(&free_list);
|
|
- out_trans_abort:
|
|
|
|
- cancel_flags |= XFS_TRANS_ABORT;
|
|
|
|
out_trans_cancel:
|
|
out_trans_cancel:
|
|
- xfs_trans_cancel(tp, cancel_flags);
|
|
|
|
|
|
+ xfs_trans_cancel(tp);
|
|
out_release_inode:
|
|
out_release_inode:
|
|
/*
|
|
/*
|
|
* Wait until after the current transaction is aborted to finish the
|
|
* Wait until after the current transaction is aborted to finish the
|
|
@@ -1282,7 +1276,6 @@ xfs_create_tmpfile(
|
|
struct xfs_inode *ip = NULL;
|
|
struct xfs_inode *ip = NULL;
|
|
struct xfs_trans *tp = NULL;
|
|
struct xfs_trans *tp = NULL;
|
|
int error;
|
|
int error;
|
|
- uint cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
|
|
|
|
prid_t prid;
|
|
prid_t prid;
|
|
struct xfs_dquot *udqp = NULL;
|
|
struct xfs_dquot *udqp = NULL;
|
|
struct xfs_dquot *gdqp = NULL;
|
|
struct xfs_dquot *gdqp = NULL;
|
|
@@ -1315,10 +1308,8 @@ xfs_create_tmpfile(
|
|
resblks = 0;
|
|
resblks = 0;
|
|
error = xfs_trans_reserve(tp, tres, 0, 0);
|
|
error = xfs_trans_reserve(tp, tres, 0, 0);
|
|
}
|
|
}
|
|
- if (error) {
|
|
|
|
- cancel_flags = 0;
|
|
|
|
|
|
+ if (error)
|
|
goto out_trans_cancel;
|
|
goto out_trans_cancel;
|
|
- }
|
|
|
|
|
|
|
|
error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp,
|
|
error = xfs_trans_reserve_quota(tp, mp, udqp, gdqp,
|
|
pdqp, resblks, 1, 0);
|
|
pdqp, resblks, 1, 0);
|
|
@@ -1330,7 +1321,7 @@ xfs_create_tmpfile(
|
|
if (error) {
|
|
if (error) {
|
|
if (error == -ENOSPC)
|
|
if (error == -ENOSPC)
|
|
goto out_trans_cancel;
|
|
goto out_trans_cancel;
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_trans_cancel;
|
|
}
|
|
}
|
|
|
|
|
|
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
|
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
|
@@ -1346,7 +1337,7 @@ xfs_create_tmpfile(
|
|
ip->i_d.di_nlink--;
|
|
ip->i_d.di_nlink--;
|
|
error = xfs_iunlink(tp, ip);
|
|
error = xfs_iunlink(tp, ip);
|
|
if (error)
|
|
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, XFS_TRANS_RELEASE_LOG_RES);
|
|
if (error)
|
|
if (error)
|
|
@@ -1359,10 +1350,8 @@ xfs_create_tmpfile(
|
|
*ipp = ip;
|
|
*ipp = ip;
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- out_trans_abort:
|
|
|
|
- cancel_flags |= XFS_TRANS_ABORT;
|
|
|
|
out_trans_cancel:
|
|
out_trans_cancel:
|
|
- xfs_trans_cancel(tp, cancel_flags);
|
|
|
|
|
|
+ xfs_trans_cancel(tp);
|
|
out_release_inode:
|
|
out_release_inode:
|
|
/*
|
|
/*
|
|
* Wait until after the current transaction is aborted to finish the
|
|
* Wait until after the current transaction is aborted to finish the
|
|
@@ -1392,7 +1381,6 @@ xfs_link(
|
|
int error;
|
|
int error;
|
|
xfs_bmap_free_t free_list;
|
|
xfs_bmap_free_t free_list;
|
|
xfs_fsblock_t first_block;
|
|
xfs_fsblock_t first_block;
|
|
- int cancel_flags;
|
|
|
|
int committed;
|
|
int committed;
|
|
int resblks;
|
|
int resblks;
|
|
|
|
|
|
@@ -1412,17 +1400,14 @@ xfs_link(
|
|
goto std_return;
|
|
goto std_return;
|
|
|
|
|
|
tp = xfs_trans_alloc(mp, XFS_TRANS_LINK);
|
|
tp = xfs_trans_alloc(mp, XFS_TRANS_LINK);
|
|
- cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
|
|
|
|
resblks = XFS_LINK_SPACE_RES(mp, target_name->len);
|
|
resblks = XFS_LINK_SPACE_RES(mp, target_name->len);
|
|
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_link, resblks, 0);
|
|
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_link, resblks, 0);
|
|
if (error == -ENOSPC) {
|
|
if (error == -ENOSPC) {
|
|
resblks = 0;
|
|
resblks = 0;
|
|
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_link, 0, 0);
|
|
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_link, 0, 0);
|
|
}
|
|
}
|
|
- if (error) {
|
|
|
|
- cancel_flags = 0;
|
|
|
|
|
|
+ if (error)
|
|
goto error_return;
|
|
goto error_return;
|
|
- }
|
|
|
|
|
|
|
|
xfs_lock_two_inodes(sip, tdp, XFS_ILOCK_EXCL);
|
|
xfs_lock_two_inodes(sip, tdp, XFS_ILOCK_EXCL);
|
|
|
|
|
|
@@ -1451,19 +1436,19 @@ xfs_link(
|
|
if (sip->i_d.di_nlink == 0) {
|
|
if (sip->i_d.di_nlink == 0) {
|
|
error = xfs_iunlink_remove(tp, sip);
|
|
error = xfs_iunlink_remove(tp, sip);
|
|
if (error)
|
|
if (error)
|
|
- goto abort_return;
|
|
|
|
|
|
+ goto error_return;
|
|
}
|
|
}
|
|
|
|
|
|
error = xfs_dir_createname(tp, tdp, target_name, sip->i_ino,
|
|
error = xfs_dir_createname(tp, tdp, target_name, sip->i_ino,
|
|
&first_block, &free_list, resblks);
|
|
&first_block, &free_list, resblks);
|
|
if (error)
|
|
if (error)
|
|
- goto abort_return;
|
|
|
|
|
|
+ goto error_return;
|
|
xfs_trans_ichgtime(tp, tdp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
|
xfs_trans_ichgtime(tp, tdp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
|
xfs_trans_log_inode(tp, tdp, XFS_ILOG_CORE);
|
|
xfs_trans_log_inode(tp, tdp, XFS_ILOG_CORE);
|
|
|
|
|
|
error = xfs_bumplink(tp, sip);
|
|
error = xfs_bumplink(tp, sip);
|
|
if (error)
|
|
if (error)
|
|
- goto abort_return;
|
|
|
|
|
|
+ goto error_return;
|
|
|
|
|
|
/*
|
|
/*
|
|
* If this is a synchronous mount, make sure that the
|
|
* If this is a synchronous mount, make sure that the
|
|
@@ -1477,15 +1462,13 @@ xfs_link(
|
|
error = xfs_bmap_finish (&tp, &free_list, &committed);
|
|
error = xfs_bmap_finish (&tp, &free_list, &committed);
|
|
if (error) {
|
|
if (error) {
|
|
xfs_bmap_cancel(&free_list);
|
|
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, XFS_TRANS_RELEASE_LOG_RES);
|
|
|
|
|
|
- abort_return:
|
|
|
|
- cancel_flags |= XFS_TRANS_ABORT;
|
|
|
|
error_return:
|
|
error_return:
|
|
- xfs_trans_cancel(tp, cancel_flags);
|
|
|
|
|
|
+ xfs_trans_cancel(tp);
|
|
std_return:
|
|
std_return:
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
@@ -1698,7 +1681,7 @@ xfs_inactive_truncate(
|
|
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_itruncate, 0, 0);
|
|
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_itruncate, 0, 0);
|
|
if (error) {
|
|
if (error) {
|
|
ASSERT(XFS_FORCED_SHUTDOWN(mp));
|
|
ASSERT(XFS_FORCED_SHUTDOWN(mp));
|
|
- xfs_trans_cancel(tp, 0);
|
|
|
|
|
|
+ xfs_trans_cancel(tp);
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1727,7 +1710,7 @@ xfs_inactive_truncate(
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
error_trans_cancel:
|
|
error_trans_cancel:
|
|
- xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT);
|
|
|
|
|
|
+ xfs_trans_cancel(tp);
|
|
error_unlock:
|
|
error_unlock:
|
|
xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
|
xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
|
return error;
|
|
return error;
|
|
@@ -1777,7 +1760,7 @@ xfs_inactive_ifree(
|
|
} else {
|
|
} else {
|
|
ASSERT(XFS_FORCED_SHUTDOWN(mp));
|
|
ASSERT(XFS_FORCED_SHUTDOWN(mp));
|
|
}
|
|
}
|
|
- xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES);
|
|
|
|
|
|
+ xfs_trans_cancel(tp);
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1797,7 +1780,7 @@ xfs_inactive_ifree(
|
|
__func__, error);
|
|
__func__, error);
|
|
xfs_force_shutdown(mp, SHUTDOWN_META_IO_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);
|
|
xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
@@ -2482,7 +2465,6 @@ xfs_remove(
|
|
int error = 0;
|
|
int error = 0;
|
|
xfs_bmap_free_t free_list;
|
|
xfs_bmap_free_t free_list;
|
|
xfs_fsblock_t first_block;
|
|
xfs_fsblock_t first_block;
|
|
- int cancel_flags;
|
|
|
|
int committed;
|
|
int committed;
|
|
uint resblks;
|
|
uint resblks;
|
|
|
|
|
|
@@ -2503,7 +2485,6 @@ xfs_remove(
|
|
tp = xfs_trans_alloc(mp, XFS_TRANS_RMDIR);
|
|
tp = xfs_trans_alloc(mp, XFS_TRANS_RMDIR);
|
|
else
|
|
else
|
|
tp = xfs_trans_alloc(mp, XFS_TRANS_REMOVE);
|
|
tp = xfs_trans_alloc(mp, XFS_TRANS_REMOVE);
|
|
- cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
* We try to get the real space reservation first,
|
|
* We try to get the real space reservation first,
|
|
@@ -2522,7 +2503,6 @@ xfs_remove(
|
|
}
|
|
}
|
|
if (error) {
|
|
if (error) {
|
|
ASSERT(error != -ENOSPC);
|
|
ASSERT(error != -ENOSPC);
|
|
- cancel_flags = 0;
|
|
|
|
goto out_trans_cancel;
|
|
goto out_trans_cancel;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2534,7 +2514,6 @@ xfs_remove(
|
|
/*
|
|
/*
|
|
* If we're removing a directory perform some additional validation.
|
|
* If we're removing a directory perform some additional validation.
|
|
*/
|
|
*/
|
|
- cancel_flags |= XFS_TRANS_ABORT;
|
|
|
|
if (is_dir) {
|
|
if (is_dir) {
|
|
ASSERT(ip->i_d.di_nlink >= 2);
|
|
ASSERT(ip->i_d.di_nlink >= 2);
|
|
if (ip->i_d.di_nlink != 2) {
|
|
if (ip->i_d.di_nlink != 2) {
|
|
@@ -2602,7 +2581,7 @@ xfs_remove(
|
|
out_bmap_cancel:
|
|
out_bmap_cancel:
|
|
xfs_bmap_cancel(&free_list);
|
|
xfs_bmap_cancel(&free_list);
|
|
out_trans_cancel:
|
|
out_trans_cancel:
|
|
- xfs_trans_cancel(tp, cancel_flags);
|
|
|
|
|
|
+ xfs_trans_cancel(tp);
|
|
std_return:
|
|
std_return:
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
@@ -2676,7 +2655,7 @@ xfs_finish_rename(
|
|
error = xfs_bmap_finish(&tp, free_list, &committed);
|
|
error = xfs_bmap_finish(&tp, free_list, &committed);
|
|
if (error) {
|
|
if (error) {
|
|
xfs_bmap_cancel(free_list);
|
|
xfs_bmap_cancel(free_list);
|
|
- xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_ABORT);
|
|
|
|
|
|
+ xfs_trans_cancel(tp);
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2801,7 +2780,7 @@ xfs_cross_rename(
|
|
|
|
|
|
out_trans_abort:
|
|
out_trans_abort:
|
|
xfs_bmap_cancel(free_list);
|
|
xfs_bmap_cancel(free_list);
|
|
- xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES|XFS_TRANS_ABORT);
|
|
|
|
|
|
+ xfs_trans_cancel(tp);
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2855,7 +2834,6 @@ xfs_rename(
|
|
int num_inodes = __XFS_SORT_INODES;
|
|
int num_inodes = __XFS_SORT_INODES;
|
|
bool new_parent = (src_dp != target_dp);
|
|
bool new_parent = (src_dp != target_dp);
|
|
bool src_is_directory = S_ISDIR(src_ip->i_d.di_mode);
|
|
bool src_is_directory = S_ISDIR(src_ip->i_d.di_mode);
|
|
- int cancel_flags = 0;
|
|
|
|
int spaceres;
|
|
int spaceres;
|
|
int error;
|
|
int error;
|
|
|
|
|
|
@@ -2891,7 +2869,6 @@ xfs_rename(
|
|
}
|
|
}
|
|
if (error)
|
|
if (error)
|
|
goto out_trans_cancel;
|
|
goto out_trans_cancel;
|
|
- cancel_flags = XFS_TRANS_RELEASE_LOG_RES;
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
* Attach the dquots to the inodes
|
|
* Attach the dquots to the inodes
|
|
@@ -2962,10 +2939,8 @@ xfs_rename(
|
|
error = xfs_dir_createname(tp, target_dp, target_name,
|
|
error = xfs_dir_createname(tp, target_dp, target_name,
|
|
src_ip->i_ino, &first_block,
|
|
src_ip->i_ino, &first_block,
|
|
&free_list, spaceres);
|
|
&free_list, spaceres);
|
|
- if (error == -ENOSPC)
|
|
|
|
- goto out_bmap_cancel;
|
|
|
|
if (error)
|
|
if (error)
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_bmap_cancel;
|
|
|
|
|
|
xfs_trans_ichgtime(tp, target_dp,
|
|
xfs_trans_ichgtime(tp, target_dp,
|
|
XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
|
XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
|
@@ -2973,7 +2948,7 @@ xfs_rename(
|
|
if (new_parent && src_is_directory) {
|
|
if (new_parent && src_is_directory) {
|
|
error = xfs_bumplink(tp, target_dp);
|
|
error = xfs_bumplink(tp, target_dp);
|
|
if (error)
|
|
if (error)
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_bmap_cancel;
|
|
}
|
|
}
|
|
} else { /* target_ip != NULL */
|
|
} else { /* target_ip != NULL */
|
|
/*
|
|
/*
|
|
@@ -3005,7 +2980,7 @@ xfs_rename(
|
|
src_ip->i_ino,
|
|
src_ip->i_ino,
|
|
&first_block, &free_list, spaceres);
|
|
&first_block, &free_list, spaceres);
|
|
if (error)
|
|
if (error)
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_bmap_cancel;
|
|
|
|
|
|
xfs_trans_ichgtime(tp, target_dp,
|
|
xfs_trans_ichgtime(tp, target_dp,
|
|
XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
|
XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
|
|
@@ -3016,7 +2991,7 @@ xfs_rename(
|
|
*/
|
|
*/
|
|
error = xfs_droplink(tp, target_ip);
|
|
error = xfs_droplink(tp, target_ip);
|
|
if (error)
|
|
if (error)
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_bmap_cancel;
|
|
|
|
|
|
if (src_is_directory) {
|
|
if (src_is_directory) {
|
|
/*
|
|
/*
|
|
@@ -3024,7 +2999,7 @@ xfs_rename(
|
|
*/
|
|
*/
|
|
error = xfs_droplink(tp, target_ip);
|
|
error = xfs_droplink(tp, target_ip);
|
|
if (error)
|
|
if (error)
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_bmap_cancel;
|
|
}
|
|
}
|
|
} /* target_ip != NULL */
|
|
} /* target_ip != NULL */
|
|
|
|
|
|
@@ -3041,7 +3016,7 @@ xfs_rename(
|
|
&first_block, &free_list, spaceres);
|
|
&first_block, &free_list, spaceres);
|
|
ASSERT(error != -EEXIST);
|
|
ASSERT(error != -EEXIST);
|
|
if (error)
|
|
if (error)
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_bmap_cancel;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -3067,7 +3042,7 @@ xfs_rename(
|
|
*/
|
|
*/
|
|
error = xfs_droplink(tp, src_dp);
|
|
error = xfs_droplink(tp, src_dp);
|
|
if (error)
|
|
if (error)
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_bmap_cancel;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -3082,7 +3057,7 @@ xfs_rename(
|
|
error = xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino,
|
|
error = xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino,
|
|
&first_block, &free_list, spaceres);
|
|
&first_block, &free_list, spaceres);
|
|
if (error)
|
|
if (error)
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_bmap_cancel;
|
|
|
|
|
|
/*
|
|
/*
|
|
* For whiteouts, we need to bump the link count on the whiteout inode.
|
|
* For whiteouts, we need to bump the link count on the whiteout inode.
|
|
@@ -3096,10 +3071,10 @@ xfs_rename(
|
|
ASSERT(wip->i_d.di_nlink == 0);
|
|
ASSERT(wip->i_d.di_nlink == 0);
|
|
error = xfs_bumplink(tp, wip);
|
|
error = xfs_bumplink(tp, wip);
|
|
if (error)
|
|
if (error)
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_bmap_cancel;
|
|
error = xfs_iunlink_remove(tp, wip);
|
|
error = xfs_iunlink_remove(tp, wip);
|
|
if (error)
|
|
if (error)
|
|
- goto out_trans_abort;
|
|
|
|
|
|
+ goto out_bmap_cancel;
|
|
xfs_trans_log_inode(tp, wip, XFS_ILOG_CORE);
|
|
xfs_trans_log_inode(tp, wip, XFS_ILOG_CORE);
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -3120,12 +3095,10 @@ xfs_rename(
|
|
IRELE(wip);
|
|
IRELE(wip);
|
|
return error;
|
|
return error;
|
|
|
|
|
|
-out_trans_abort:
|
|
|
|
- cancel_flags |= XFS_TRANS_ABORT;
|
|
|
|
out_bmap_cancel:
|
|
out_bmap_cancel:
|
|
xfs_bmap_cancel(&free_list);
|
|
xfs_bmap_cancel(&free_list);
|
|
out_trans_cancel:
|
|
out_trans_cancel:
|
|
- xfs_trans_cancel(tp, cancel_flags);
|
|
|
|
|
|
+ xfs_trans_cancel(tp);
|
|
if (wip)
|
|
if (wip)
|
|
IRELE(wip);
|
|
IRELE(wip);
|
|
return error;
|
|
return error;
|