Skip to content

Commit 84a3c15

Browse files
author
Darrick J. Wong
committed
xfs: move xfs_extent_free_defer_add to xfs_extfree_item.c
Move the code that adds the incore xfs_extent_free_item deferred work data to a transaction to live with the EFI log item code. This means that the allocator code no longer has to know about the inner workings of the EFI log items. As a consequence, we can get rid of the _{get,put}_group helpers. Signed-off-by: Darrick J. Wong <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]>
1 parent 7272f77 commit 84a3c15

File tree

4 files changed

+25
-27
lines changed

4 files changed

+25
-27
lines changed

fs/xfs/libxfs/xfs_alloc.c

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "xfs_ag_resv.h"
2828
#include "xfs_bmap.h"
2929
#include "xfs_health.h"
30+
#include "xfs_extfree_item.h"
3031

3132
struct kmem_cache *xfs_extfree_item_cache;
3233

@@ -2552,16 +2553,7 @@ xfs_defer_extent_free(
25522553
xefi->xefi_owner = XFS_RMAP_OWN_NULL;
25532554
}
25542555

2555-
trace_xfs_extent_free_defer(mp, xefi);
2556-
2557-
xfs_extent_free_get_group(mp, xefi);
2558-
2559-
if (xefi->xefi_agresv == XFS_AG_RESV_AGFL)
2560-
*dfpp = xfs_defer_add(tp, &xefi->xefi_list,
2561-
&xfs_agfl_free_defer_type);
2562-
else
2563-
*dfpp = xfs_defer_add(tp, &xefi->xefi_list,
2564-
&xfs_extent_free_defer_type);
2556+
xfs_extent_free_defer_add(tp, xefi, dfpp);
25652557
return 0;
25662558
}
25672559

fs/xfs/libxfs/xfs_alloc.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,9 +256,6 @@ struct xfs_extent_free_item {
256256
enum xfs_ag_resv_type xefi_agresv;
257257
};
258258

259-
void xfs_extent_free_get_group(struct xfs_mount *mp,
260-
struct xfs_extent_free_item *xefi);
261-
262259
#define XFS_EFI_SKIP_DISCARD (1U << 0) /* don't issue discard */
263260
#define XFS_EFI_ATTR_FORK (1U << 1) /* freeing attr fork block */
264261
#define XFS_EFI_BMBT_BLOCK (1U << 2) /* freeing bmap btree block */

fs/xfs/xfs_extfree_item.c

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -436,21 +436,24 @@ xfs_extent_free_create_done(
436436
return &efdp->efd_item;
437437
}
438438

439-
/* Take a passive ref to the AG containing the space we're freeing. */
439+
/* Add this deferred EFI to the transaction. */
440440
void
441-
xfs_extent_free_get_group(
442-
struct xfs_mount *mp,
443-
struct xfs_extent_free_item *xefi)
441+
xfs_extent_free_defer_add(
442+
struct xfs_trans *tp,
443+
struct xfs_extent_free_item *xefi,
444+
struct xfs_defer_pending **dfpp)
444445
{
445-
xefi->xefi_pag = xfs_perag_intent_get(mp, xefi->xefi_startblock);
446-
}
446+
struct xfs_mount *mp = tp->t_mountp;
447447

448-
/* Release a passive AG ref after some freeing work. */
449-
static inline void
450-
xfs_extent_free_put_group(
451-
struct xfs_extent_free_item *xefi)
452-
{
453-
xfs_perag_intent_put(xefi->xefi_pag);
448+
trace_xfs_extent_free_defer(mp, xefi);
449+
450+
xefi->xefi_pag = xfs_perag_intent_get(mp, xefi->xefi_startblock);
451+
if (xefi->xefi_agresv == XFS_AG_RESV_AGFL)
452+
*dfpp = xfs_defer_add(tp, &xefi->xefi_list,
453+
&xfs_agfl_free_defer_type);
454+
else
455+
*dfpp = xfs_defer_add(tp, &xefi->xefi_list,
456+
&xfs_extent_free_defer_type);
454457
}
455458

456459
/* Cancel a free extent. */
@@ -460,7 +463,7 @@ xfs_extent_free_cancel_item(
460463
{
461464
struct xfs_extent_free_item *xefi = xefi_entry(item);
462465

463-
xfs_extent_free_put_group(xefi);
466+
xfs_perag_intent_put(xefi->xefi_pag);
464467
kmem_cache_free(xfs_extfree_item_cache, xefi);
465468
}
466469

@@ -575,7 +578,7 @@ xfs_efi_recover_work(
575578
xefi->xefi_blockcount = extp->ext_len;
576579
xefi->xefi_agresv = XFS_AG_RESV_NONE;
577580
xefi->xefi_owner = XFS_RMAP_OWN_UNKNOWN;
578-
xfs_extent_free_get_group(mp, xefi);
581+
xefi->xefi_pag = xfs_perag_intent_get(mp, extp->ext_start);
579582

580583
xfs_defer_add_item(dfp, &xefi->xefi_list);
581584
}

fs/xfs/xfs_extfree_item.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,10 @@ xfs_efd_log_item_sizeof(
8888
extern struct kmem_cache *xfs_efi_cache;
8989
extern struct kmem_cache *xfs_efd_cache;
9090

91+
struct xfs_extent_free_item;
92+
93+
void xfs_extent_free_defer_add(struct xfs_trans *tp,
94+
struct xfs_extent_free_item *xefi,
95+
struct xfs_defer_pending **dfpp);
96+
9197
#endif /* __XFS_EXTFREE_ITEM_H__ */

0 commit comments

Comments
 (0)