xfs: reduce the size of struct xfs_extent_free_item
We only use EFIs to free metadata blocks -- not regular data/attr fork extents. Remove all the fields that we never use, for a net reduction of 16 bytes. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Chandan Babu R <chandan.babu@oracle.com>
This commit is contained in:
parent
c201d9ca53
commit
b3b5ff412a
fs/xfs
@ -2462,12 +2462,11 @@ xfs_defer_agfl_block(
|
||||
ASSERT(xfs_extfree_item_cache != NULL);
|
||||
ASSERT(oinfo != NULL);
|
||||
|
||||
new = kmem_cache_alloc(xfs_extfree_item_cache,
|
||||
new = kmem_cache_zalloc(xfs_extfree_item_cache,
|
||||
GFP_KERNEL | __GFP_NOFAIL);
|
||||
new->xefi_startblock = XFS_AGB_TO_FSB(mp, agno, agbno);
|
||||
new->xefi_blockcount = 1;
|
||||
new->xefi_oinfo = *oinfo;
|
||||
new->xefi_skip_discard = false;
|
||||
new->xefi_owner = oinfo->oi_owner;
|
||||
|
||||
trace_xfs_agfl_free_defer(mp, agno, 0, agbno, 1);
|
||||
|
||||
@ -2505,15 +2504,23 @@ __xfs_free_extent_later(
|
||||
#endif
|
||||
ASSERT(xfs_extfree_item_cache != NULL);
|
||||
|
||||
new = kmem_cache_alloc(xfs_extfree_item_cache,
|
||||
new = kmem_cache_zalloc(xfs_extfree_item_cache,
|
||||
GFP_KERNEL | __GFP_NOFAIL);
|
||||
new->xefi_startblock = bno;
|
||||
new->xefi_blockcount = (xfs_extlen_t)len;
|
||||
if (oinfo)
|
||||
new->xefi_oinfo = *oinfo;
|
||||
else
|
||||
new->xefi_oinfo = XFS_RMAP_OINFO_SKIP_UPDATE;
|
||||
new->xefi_skip_discard = skip_discard;
|
||||
if (skip_discard)
|
||||
new->xefi_flags |= XFS_EFI_SKIP_DISCARD;
|
||||
if (oinfo) {
|
||||
ASSERT(oinfo->oi_offset == 0);
|
||||
|
||||
if (oinfo->oi_flags & XFS_OWNER_INFO_ATTR_FORK)
|
||||
new->xefi_flags |= XFS_EFI_ATTR_FORK;
|
||||
if (oinfo->oi_flags & XFS_OWNER_INFO_BMBT_BLOCK)
|
||||
new->xefi_flags |= XFS_EFI_BMBT_BLOCK;
|
||||
new->xefi_owner = oinfo->oi_owner;
|
||||
} else {
|
||||
new->xefi_owner = XFS_RMAP_OWN_NULL;
|
||||
}
|
||||
trace_xfs_bmap_free_defer(tp->t_mountp,
|
||||
XFS_FSB_TO_AGNO(tp->t_mountp, bno), 0,
|
||||
XFS_FSB_TO_AGBNO(tp->t_mountp, bno), len);
|
||||
|
@ -258,12 +258,16 @@ void __xfs_free_extent_later(struct xfs_trans *tp, xfs_fsblock_t bno,
|
||||
*/
|
||||
struct xfs_extent_free_item {
|
||||
struct list_head xefi_list;
|
||||
uint64_t xefi_owner;
|
||||
xfs_fsblock_t xefi_startblock;/* starting fs block number */
|
||||
xfs_extlen_t xefi_blockcount;/* number of blocks in extent */
|
||||
bool xefi_skip_discard;
|
||||
struct xfs_owner_info xefi_oinfo; /* extent owner */
|
||||
unsigned int xefi_flags;
|
||||
};
|
||||
|
||||
#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 */
|
||||
|
||||
static inline void
|
||||
xfs_free_extent_later(
|
||||
struct xfs_trans *tp,
|
||||
|
@ -474,14 +474,20 @@ xfs_extent_free_finish_item(
|
||||
struct list_head *item,
|
||||
struct xfs_btree_cur **state)
|
||||
{
|
||||
struct xfs_owner_info oinfo = { };
|
||||
struct xfs_extent_free_item *free;
|
||||
int error;
|
||||
|
||||
free = container_of(item, struct xfs_extent_free_item, xefi_list);
|
||||
oinfo.oi_owner = free->xefi_owner;
|
||||
if (free->xefi_flags & XFS_EFI_ATTR_FORK)
|
||||
oinfo.oi_flags |= XFS_OWNER_INFO_ATTR_FORK;
|
||||
if (free->xefi_flags & XFS_EFI_BMBT_BLOCK)
|
||||
oinfo.oi_flags |= XFS_OWNER_INFO_BMBT_BLOCK;
|
||||
error = xfs_trans_free_extent(tp, EFD_ITEM(done),
|
||||
free->xefi_startblock,
|
||||
free->xefi_blockcount,
|
||||
&free->xefi_oinfo, free->xefi_skip_discard);
|
||||
&oinfo, free->xefi_flags & XFS_EFI_SKIP_DISCARD);
|
||||
kmem_cache_free(xfs_extfree_item_cache, free);
|
||||
return error;
|
||||
}
|
||||
@ -525,6 +531,7 @@ xfs_agfl_free_finish_item(
|
||||
struct list_head *item,
|
||||
struct xfs_btree_cur **state)
|
||||
{
|
||||
struct xfs_owner_info oinfo = { };
|
||||
struct xfs_mount *mp = tp->t_mountp;
|
||||
struct xfs_efd_log_item *efdp = EFD_ITEM(done);
|
||||
struct xfs_extent_free_item *free;
|
||||
@ -539,13 +546,13 @@ xfs_agfl_free_finish_item(
|
||||
ASSERT(free->xefi_blockcount == 1);
|
||||
agno = XFS_FSB_TO_AGNO(mp, free->xefi_startblock);
|
||||
agbno = XFS_FSB_TO_AGBNO(mp, free->xefi_startblock);
|
||||
oinfo.oi_owner = free->xefi_owner;
|
||||
|
||||
trace_xfs_agfl_free_deferred(mp, agno, 0, agbno, free->xefi_blockcount);
|
||||
|
||||
error = xfs_alloc_read_agf(mp, tp, agno, 0, &agbp);
|
||||
if (!error)
|
||||
error = xfs_free_agfl_block(tp, agno, agbno, agbp,
|
||||
&free->xefi_oinfo);
|
||||
error = xfs_free_agfl_block(tp, agno, agbno, agbp, &oinfo);
|
||||
|
||||
/*
|
||||
* Mark the transaction dirty, even on error. This ensures the
|
||||
|
Loading…
Reference in New Issue
Block a user