From: Christoph Hellwig Date: Mon, 10 Aug 2020 20:32:04 +0000 (-0400) Subject: xfs: use a xfs_btree_cur for the ->finish_cleanup state X-Git-Tag: v5.8.0-rc0~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4371b480bb175822a7906ee7049358f33b26d31f;p=thirdparty%2Fxfsprogs-dev.git xfs: use a xfs_btree_cur for the ->finish_cleanup state Source kernel commit: 3ec1b26c04d4910f37cdaad26d14b403c0240e30 Given how XFS is all based around btrees it doesn't make much sense to offer a totally generic state when we can just use the btree cursor. Signed-off-by: Christoph Hellwig Reviewed-by: Brian Foster Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong Signed-off-by: Eric Sandeen --- diff --git a/libxfs/defer_item.c b/libxfs/defer_item.c index bd872d18e..b18182e95 100644 --- a/libxfs/defer_item.c +++ b/libxfs/defer_item.c @@ -73,7 +73,7 @@ xfs_extent_free_finish_item( struct xfs_trans *tp, struct xfs_log_item *done, struct list_head *item, - void **state) + struct xfs_btree_cur **state) { struct xfs_extent_free_item *free; int error; @@ -121,7 +121,7 @@ xfs_agfl_free_finish_item( struct xfs_trans *tp, struct xfs_log_item *done, struct list_head *item, - void **state) + struct xfs_btree_cur **state) { struct xfs_mount *mp = tp->t_mountp; struct xfs_extent_free_item *free; @@ -202,7 +202,7 @@ xfs_rmap_update_finish_item( struct xfs_trans *tp, struct xfs_log_item *done, struct list_head *item, - void **state) + struct xfs_btree_cur **state) { struct xfs_rmap_intent *rmap; int error; @@ -215,23 +215,11 @@ xfs_rmap_update_finish_item( rmap->ri_bmap.br_startblock, rmap->ri_bmap.br_blockcount, rmap->ri_bmap.br_state, - (struct xfs_btree_cur **)state); + state); kmem_free(rmap); return error; } -/* Clean up after processing deferred rmaps. */ -STATIC void -xfs_rmap_update_finish_cleanup( - struct xfs_trans *tp, - void *state, - int error) -{ - struct xfs_btree_cur *rcur = state; - - xfs_rmap_finish_one_cleanup(tp, rcur, error); -} - /* Abort all pending RUIs. */ STATIC void xfs_rmap_update_abort_intent( @@ -255,7 +243,7 @@ const struct xfs_defer_op_type xfs_rmap_update_defer_type = { .abort_intent = xfs_rmap_update_abort_intent, .create_done = xfs_rmap_update_create_done, .finish_item = xfs_rmap_update_finish_item, - .finish_cleanup = xfs_rmap_update_finish_cleanup, + .finish_cleanup = xfs_rmap_finish_one_cleanup, .cancel_item = xfs_rmap_update_cancel_item, }; @@ -309,7 +297,7 @@ xfs_refcount_update_finish_item( struct xfs_trans *tp, struct xfs_log_item *done, struct list_head *item, - void **state) + struct xfs_btree_cur **state) { struct xfs_refcount_intent *refc; xfs_fsblock_t new_fsb; @@ -322,7 +310,7 @@ xfs_refcount_update_finish_item( refc->ri_startblock, refc->ri_blockcount, &new_fsb, &new_aglen, - (struct xfs_btree_cur **)state); + state); /* Did we run out of reservation? Requeue what we didn't finish. */ if (!error && new_aglen > 0) { ASSERT(refc->ri_type == XFS_REFCOUNT_INCREASE || @@ -335,18 +323,6 @@ xfs_refcount_update_finish_item( return error; } -/* Clean up after processing deferred refcounts. */ -STATIC void -xfs_refcount_update_finish_cleanup( - struct xfs_trans *tp, - void *state, - int error) -{ - struct xfs_btree_cur *rcur = state; - - xfs_refcount_finish_one_cleanup(tp, rcur, error); -} - /* Abort all pending CUIs. */ STATIC void xfs_refcount_update_abort_intent( @@ -370,7 +346,7 @@ const struct xfs_defer_op_type xfs_refcount_update_defer_type = { .abort_intent = xfs_refcount_update_abort_intent, .create_done = xfs_refcount_update_create_done, .finish_item = xfs_refcount_update_finish_item, - .finish_cleanup = xfs_refcount_update_finish_cleanup, + .finish_cleanup = xfs_refcount_finish_one_cleanup, .cancel_item = xfs_refcount_update_cancel_item, }; @@ -422,7 +398,7 @@ xfs_bmap_update_finish_item( struct xfs_trans *tp, struct xfs_log_item *done, struct list_head *item, - void **state) + struct xfs_btree_cur **state) { struct xfs_bmap_intent *bmap; xfs_filblks_t count; diff --git a/libxfs/xfs_defer.c b/libxfs/xfs_defer.c index f4fa2c085..f5ad0dcaf 100644 --- a/libxfs/xfs_defer.c +++ b/libxfs/xfs_defer.c @@ -359,7 +359,7 @@ xfs_defer_finish_one( struct xfs_defer_pending *dfp) { const struct xfs_defer_op_type *ops = defer_op_types[dfp->dfp_type]; - void *state = NULL; + struct xfs_btree_cur *state = NULL; struct list_head *li, *n; int error; diff --git a/libxfs/xfs_defer.h b/libxfs/xfs_defer.h index a86c890e6..f2b65981b 100644 --- a/libxfs/xfs_defer.h +++ b/libxfs/xfs_defer.h @@ -6,6 +6,7 @@ #ifndef __XFS_DEFER_H__ #define __XFS_DEFER_H__ +struct xfs_btree_cur; struct xfs_defer_op_type; /* @@ -49,8 +50,9 @@ struct xfs_defer_op_type { struct xfs_log_item *(*create_done)(struct xfs_trans *tp, struct xfs_log_item *intent, unsigned int count); int (*finish_item)(struct xfs_trans *tp, struct xfs_log_item *done, - struct list_head *item, void **state); - void (*finish_cleanup)(struct xfs_trans *, void *, int); + struct list_head *item, struct xfs_btree_cur **state); + void (*finish_cleanup)(struct xfs_trans *tp, + struct xfs_btree_cur *state, int error); void (*cancel_item)(struct list_head *); unsigned int max_items; };