Message ID | 20230715063647.2094989-2-leo.lilong@huawei.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | xfs: fix two problem when recovery intents fails | expand |
On Sat, Jul 15, 2023 at 02:36:45PM +0800, Long Li wrote: > Factor out xfs_defer_pending_abort() from xfs_defer_trans_abort(), which > not use transaction parameter, so it can be used after the transaction > life cycle. > > Signed-off-by: Long Li <leo.lilong@huawei.com> Pretty straightforward slicing and dicing, so Reviewed-by: Darrick J. Wong <djwong@kernel.org> --D > --- > fs/xfs/libxfs/xfs_defer.c | 23 +++++++++++++++-------- > 1 file changed, 15 insertions(+), 8 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_defer.c b/fs/xfs/libxfs/xfs_defer.c > index bcfb6a4203cd..88388e12f8e7 100644 > --- a/fs/xfs/libxfs/xfs_defer.c > +++ b/fs/xfs/libxfs/xfs_defer.c > @@ -245,21 +245,18 @@ xfs_defer_create_intents( > return ret; > } > > -/* Abort all the intents that were committed. */ > STATIC void > -xfs_defer_trans_abort( > - struct xfs_trans *tp, > - struct list_head *dop_pending) > +xfs_defer_pending_abort( > + struct xfs_mount *mp, > + struct list_head *dop_list) > { > struct xfs_defer_pending *dfp; > const struct xfs_defer_op_type *ops; > > - trace_xfs_defer_trans_abort(tp, _RET_IP_); > - > /* Abort intent items that don't have a done item. */ > - list_for_each_entry(dfp, dop_pending, dfp_list) { > + list_for_each_entry(dfp, dop_list, dfp_list) { > ops = defer_op_types[dfp->dfp_type]; > - trace_xfs_defer_pending_abort(tp->t_mountp, dfp); > + trace_xfs_defer_pending_abort(mp, dfp); > if (dfp->dfp_intent && !dfp->dfp_done) { > ops->abort_intent(dfp->dfp_intent); > dfp->dfp_intent = NULL; > @@ -267,6 +264,16 @@ xfs_defer_trans_abort( > } > } > > +/* Abort all the intents that were committed. */ > +STATIC void > +xfs_defer_trans_abort( > + struct xfs_trans *tp, > + struct list_head *dop_pending) > +{ > + trace_xfs_defer_trans_abort(tp, _RET_IP_); > + xfs_defer_pending_abort(tp->t_mountp, dop_pending); > +} > + > /* > * Capture resources that the caller said not to release ("held") when the > * transaction commits. Caller is responsible for zero-initializing @dres. > -- > 2.31.1 >
diff --git a/fs/xfs/libxfs/xfs_defer.c b/fs/xfs/libxfs/xfs_defer.c index bcfb6a4203cd..88388e12f8e7 100644 --- a/fs/xfs/libxfs/xfs_defer.c +++ b/fs/xfs/libxfs/xfs_defer.c @@ -245,21 +245,18 @@ xfs_defer_create_intents( return ret; } -/* Abort all the intents that were committed. */ STATIC void -xfs_defer_trans_abort( - struct xfs_trans *tp, - struct list_head *dop_pending) +xfs_defer_pending_abort( + struct xfs_mount *mp, + struct list_head *dop_list) { struct xfs_defer_pending *dfp; const struct xfs_defer_op_type *ops; - trace_xfs_defer_trans_abort(tp, _RET_IP_); - /* Abort intent items that don't have a done item. */ - list_for_each_entry(dfp, dop_pending, dfp_list) { + list_for_each_entry(dfp, dop_list, dfp_list) { ops = defer_op_types[dfp->dfp_type]; - trace_xfs_defer_pending_abort(tp->t_mountp, dfp); + trace_xfs_defer_pending_abort(mp, dfp); if (dfp->dfp_intent && !dfp->dfp_done) { ops->abort_intent(dfp->dfp_intent); dfp->dfp_intent = NULL; @@ -267,6 +264,16 @@ xfs_defer_trans_abort( } } +/* Abort all the intents that were committed. */ +STATIC void +xfs_defer_trans_abort( + struct xfs_trans *tp, + struct list_head *dop_pending) +{ + trace_xfs_defer_trans_abort(tp, _RET_IP_); + xfs_defer_pending_abort(tp->t_mountp, dop_pending); +} + /* * Capture resources that the caller said not to release ("held") when the * transaction commits. Caller is responsible for zero-initializing @dres.
Factor out xfs_defer_pending_abort() from xfs_defer_trans_abort(), which not use transaction parameter, so it can be used after the transaction life cycle. Signed-off-by: Long Li <leo.lilong@huawei.com> --- fs/xfs/libxfs/xfs_defer.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-)