Commit ce356d64 authored by Brian Foster's avatar Brian Foster Committed by Darrick J. Wong

xfs: pass transaction to dfops reset/move helpers

All callers pass ->t_dfops of the associated transactions. Refactor
the helpers to receive the transactions and facilitate further
cleanups between xfs_defer_ops and xfs_trans.
Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 7279aa13
...@@ -324,9 +324,12 @@ xfs_defer_bjoin( ...@@ -324,9 +324,12 @@ xfs_defer_bjoin(
*/ */
static void static void
xfs_defer_reset( xfs_defer_reset(
struct xfs_defer_ops *dop) struct xfs_trans *tp)
{ {
struct xfs_defer_ops *dop = tp->t_dfops;
ASSERT(!xfs_defer_has_unfinished_work(dop)); ASSERT(!xfs_defer_has_unfinished_work(dop));
dop->dop_low = false; dop->dop_low = false;
memset(dop->dop_inodes, 0, sizeof(dop->dop_inodes)); memset(dop->dop_inodes, 0, sizeof(dop->dop_inodes));
memset(dop->dop_bufs, 0, sizeof(dop->dop_bufs)); memset(dop->dop_bufs, 0, sizeof(dop->dop_bufs));
...@@ -457,7 +460,7 @@ xfs_defer_finish( ...@@ -457,7 +460,7 @@ xfs_defer_finish(
if (error) if (error)
return error; return error;
} }
xfs_defer_reset((*tp)->t_dfops); xfs_defer_reset(*tp);
return 0; return 0;
} }
...@@ -575,9 +578,11 @@ xfs_defer_init( ...@@ -575,9 +578,11 @@ xfs_defer_init(
*/ */
void void
xfs_defer_move( xfs_defer_move(
struct xfs_defer_ops *dst, struct xfs_trans *dtp,
struct xfs_defer_ops *src) struct xfs_trans *stp)
{ {
struct xfs_defer_ops *dst = dtp->t_dfops;
struct xfs_defer_ops *src = stp->t_dfops;
ASSERT(dst != src); ASSERT(dst != src);
list_splice_init(&src->dop_intake, &dst->dop_intake); list_splice_init(&src->dop_intake, &dst->dop_intake);
...@@ -587,5 +592,5 @@ xfs_defer_move( ...@@ -587,5 +592,5 @@ xfs_defer_move(
memcpy(dst->dop_bufs, src->dop_bufs, sizeof(dst->dop_bufs)); memcpy(dst->dop_bufs, src->dop_bufs, sizeof(dst->dop_bufs));
dst->dop_low = src->dop_low; dst->dop_low = src->dop_low;
xfs_defer_reset(src); xfs_defer_reset(stp);
} }
...@@ -55,7 +55,7 @@ void xfs_defer_init(struct xfs_trans *tp, struct xfs_defer_ops *dop); ...@@ -55,7 +55,7 @@ void xfs_defer_init(struct xfs_trans *tp, struct xfs_defer_ops *dop);
bool xfs_defer_has_unfinished_work(struct xfs_defer_ops *dop); bool xfs_defer_has_unfinished_work(struct xfs_defer_ops *dop);
int xfs_defer_ijoin(struct xfs_defer_ops *dop, struct xfs_inode *ip); int xfs_defer_ijoin(struct xfs_defer_ops *dop, struct xfs_inode *ip);
int xfs_defer_bjoin(struct xfs_defer_ops *dop, struct xfs_buf *bp); int xfs_defer_bjoin(struct xfs_defer_ops *dop, struct xfs_buf *bp);
void xfs_defer_move(struct xfs_defer_ops *dst, struct xfs_defer_ops *src); void xfs_defer_move(struct xfs_trans *dtp, struct xfs_trans *stp);
/* Description of a deferred type. */ /* Description of a deferred type. */
struct xfs_defer_op_type { struct xfs_defer_op_type {
......
...@@ -446,7 +446,7 @@ xfs_bui_recover( ...@@ -446,7 +446,7 @@ xfs_bui_recover(
* finishes them on completion. Transfer current dfops state to this * finishes them on completion. Transfer current dfops state to this
* transaction and transfer the result back before we return. * transaction and transfer the result back before we return.
*/ */
xfs_defer_move(tp->t_dfops, parent_tp->t_dfops); xfs_defer_move(tp, parent_tp);
budp = xfs_trans_get_bud(tp, buip); budp = xfs_trans_get_bud(tp, buip);
/* Grab the inode. */ /* Grab the inode. */
...@@ -494,7 +494,7 @@ xfs_bui_recover( ...@@ -494,7 +494,7 @@ xfs_bui_recover(
} }
set_bit(XFS_BUI_RECOVERED, &buip->bui_flags); set_bit(XFS_BUI_RECOVERED, &buip->bui_flags);
xfs_defer_move(parent_tp->t_dfops, tp->t_dfops); xfs_defer_move(parent_tp, tp);
error = xfs_trans_commit(tp); error = xfs_trans_commit(tp);
xfs_iunlock(ip, XFS_ILOCK_EXCL); xfs_iunlock(ip, XFS_ILOCK_EXCL);
xfs_irele(ip); xfs_irele(ip);
...@@ -502,7 +502,7 @@ xfs_bui_recover( ...@@ -502,7 +502,7 @@ xfs_bui_recover(
return error; return error;
err_inode: err_inode:
xfs_defer_move(parent_tp->t_dfops, tp->t_dfops); xfs_defer_move(parent_tp, tp);
xfs_trans_cancel(tp); xfs_trans_cancel(tp);
if (ip) { if (ip) {
xfs_iunlock(ip, XFS_ILOCK_EXCL); xfs_iunlock(ip, XFS_ILOCK_EXCL);
......
...@@ -4853,7 +4853,7 @@ xlog_finish_defer_ops( ...@@ -4853,7 +4853,7 @@ xlog_finish_defer_ops(
if (error) if (error)
return error; return error;
/* transfer all collected dfops to this transaction */ /* transfer all collected dfops to this transaction */
xfs_defer_move(tp->t_dfops, parent_tp->t_dfops); xfs_defer_move(tp, parent_tp);
return xfs_trans_commit(tp); return xfs_trans_commit(tp);
} }
......
...@@ -457,7 +457,7 @@ xfs_cui_recover( ...@@ -457,7 +457,7 @@ xfs_cui_recover(
* finishes them on completion. Transfer current dfops state to this * finishes them on completion. Transfer current dfops state to this
* transaction and transfer the result back before we return. * transaction and transfer the result back before we return.
*/ */
xfs_defer_move(tp->t_dfops, parent_tp->t_dfops); xfs_defer_move(tp, parent_tp);
cudp = xfs_trans_get_cud(tp, cuip); cudp = xfs_trans_get_cud(tp, cuip);
for (i = 0; i < cuip->cui_format.cui_nextents; i++) { for (i = 0; i < cuip->cui_format.cui_nextents; i++) {
...@@ -522,13 +522,13 @@ xfs_cui_recover( ...@@ -522,13 +522,13 @@ xfs_cui_recover(
xfs_refcount_finish_one_cleanup(tp, rcur, error); xfs_refcount_finish_one_cleanup(tp, rcur, error);
set_bit(XFS_CUI_RECOVERED, &cuip->cui_flags); set_bit(XFS_CUI_RECOVERED, &cuip->cui_flags);
xfs_defer_move(parent_tp->t_dfops, tp->t_dfops); xfs_defer_move(parent_tp, tp);
error = xfs_trans_commit(tp); error = xfs_trans_commit(tp);
return error; return error;
abort_error: abort_error:
xfs_refcount_finish_one_cleanup(tp, rcur, error); xfs_refcount_finish_one_cleanup(tp, rcur, error);
xfs_defer_move(parent_tp->t_dfops, tp->t_dfops); xfs_defer_move(parent_tp, tp);
xfs_trans_cancel(tp); xfs_trans_cancel(tp);
return error; return error;
} }
...@@ -125,7 +125,7 @@ xfs_trans_dup( ...@@ -125,7 +125,7 @@ xfs_trans_dup(
if (tp->t_dfops != &tp->t_dfops_internal) if (tp->t_dfops != &tp->t_dfops_internal)
ntp->t_dfops = tp->t_dfops; ntp->t_dfops = tp->t_dfops;
else else
xfs_defer_move(ntp->t_dfops, tp->t_dfops); xfs_defer_move(ntp, tp);
xfs_trans_dup_dqinfo(tp, ntp); xfs_trans_dup_dqinfo(tp, ntp);
......
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