mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
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 <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
7272f77c67
commit
84a3c1576c
@ -27,6 +27,7 @@
|
||||
#include "xfs_ag_resv.h"
|
||||
#include "xfs_bmap.h"
|
||||
#include "xfs_health.h"
|
||||
#include "xfs_extfree_item.h"
|
||||
|
||||
struct kmem_cache *xfs_extfree_item_cache;
|
||||
|
||||
@ -2552,16 +2553,7 @@ xfs_defer_extent_free(
|
||||
xefi->xefi_owner = XFS_RMAP_OWN_NULL;
|
||||
}
|
||||
|
||||
trace_xfs_extent_free_defer(mp, xefi);
|
||||
|
||||
xfs_extent_free_get_group(mp, xefi);
|
||||
|
||||
if (xefi->xefi_agresv == XFS_AG_RESV_AGFL)
|
||||
*dfpp = xfs_defer_add(tp, &xefi->xefi_list,
|
||||
&xfs_agfl_free_defer_type);
|
||||
else
|
||||
*dfpp = xfs_defer_add(tp, &xefi->xefi_list,
|
||||
&xfs_extent_free_defer_type);
|
||||
xfs_extent_free_defer_add(tp, xefi, dfpp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -256,9 +256,6 @@ struct xfs_extent_free_item {
|
||||
enum xfs_ag_resv_type xefi_agresv;
|
||||
};
|
||||
|
||||
void xfs_extent_free_get_group(struct xfs_mount *mp,
|
||||
struct xfs_extent_free_item *xefi);
|
||||
|
||||
#define XFS_EFI_SKIP_DISCARD (1U << 0) /* don't issue discard */
|
||||
#define XFS_EFI_ATTR_FORK (1U << 1) /* freeing attr fork block */
|
||||
#define XFS_EFI_BMBT_BLOCK (1U << 2) /* freeing bmap btree block */
|
||||
|
@ -436,21 +436,24 @@ xfs_extent_free_create_done(
|
||||
return &efdp->efd_item;
|
||||
}
|
||||
|
||||
/* Take a passive ref to the AG containing the space we're freeing. */
|
||||
/* Add this deferred EFI to the transaction. */
|
||||
void
|
||||
xfs_extent_free_get_group(
|
||||
struct xfs_mount *mp,
|
||||
struct xfs_extent_free_item *xefi)
|
||||
xfs_extent_free_defer_add(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_extent_free_item *xefi,
|
||||
struct xfs_defer_pending **dfpp)
|
||||
{
|
||||
xefi->xefi_pag = xfs_perag_intent_get(mp, xefi->xefi_startblock);
|
||||
}
|
||||
struct xfs_mount *mp = tp->t_mountp;
|
||||
|
||||
/* Release a passive AG ref after some freeing work. */
|
||||
static inline void
|
||||
xfs_extent_free_put_group(
|
||||
struct xfs_extent_free_item *xefi)
|
||||
{
|
||||
xfs_perag_intent_put(xefi->xefi_pag);
|
||||
trace_xfs_extent_free_defer(mp, xefi);
|
||||
|
||||
xefi->xefi_pag = xfs_perag_intent_get(mp, xefi->xefi_startblock);
|
||||
if (xefi->xefi_agresv == XFS_AG_RESV_AGFL)
|
||||
*dfpp = xfs_defer_add(tp, &xefi->xefi_list,
|
||||
&xfs_agfl_free_defer_type);
|
||||
else
|
||||
*dfpp = xfs_defer_add(tp, &xefi->xefi_list,
|
||||
&xfs_extent_free_defer_type);
|
||||
}
|
||||
|
||||
/* Cancel a free extent. */
|
||||
@ -460,7 +463,7 @@ xfs_extent_free_cancel_item(
|
||||
{
|
||||
struct xfs_extent_free_item *xefi = xefi_entry(item);
|
||||
|
||||
xfs_extent_free_put_group(xefi);
|
||||
xfs_perag_intent_put(xefi->xefi_pag);
|
||||
kmem_cache_free(xfs_extfree_item_cache, xefi);
|
||||
}
|
||||
|
||||
@ -575,7 +578,7 @@ xfs_efi_recover_work(
|
||||
xefi->xefi_blockcount = extp->ext_len;
|
||||
xefi->xefi_agresv = XFS_AG_RESV_NONE;
|
||||
xefi->xefi_owner = XFS_RMAP_OWN_UNKNOWN;
|
||||
xfs_extent_free_get_group(mp, xefi);
|
||||
xefi->xefi_pag = xfs_perag_intent_get(mp, extp->ext_start);
|
||||
|
||||
xfs_defer_add_item(dfp, &xefi->xefi_list);
|
||||
}
|
||||
|
@ -88,4 +88,10 @@ xfs_efd_log_item_sizeof(
|
||||
extern struct kmem_cache *xfs_efi_cache;
|
||||
extern struct kmem_cache *xfs_efd_cache;
|
||||
|
||||
struct xfs_extent_free_item;
|
||||
|
||||
void xfs_extent_free_defer_add(struct xfs_trans *tp,
|
||||
struct xfs_extent_free_item *xefi,
|
||||
struct xfs_defer_pending **dfpp);
|
||||
|
||||
#endif /* __XFS_EXTFREE_ITEM_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user