xfs: convert "skip_discard" to a proper flags bitset
Convert the boolean to skip discard on free into a proper flags field so that we can add more flags in the next patch. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
4e0e2c0fe3
commit
980faece91
@ -1008,7 +1008,7 @@ xfs_ag_shrink_space(
|
||||
goto resv_err;
|
||||
|
||||
err2 = xfs_free_extent_later(*tpp, args.fsbno, delta, NULL,
|
||||
XFS_AG_RESV_NONE, true);
|
||||
XFS_AG_RESV_NONE, XFS_FREE_EXTENT_SKIP_DISCARD);
|
||||
if (err2)
|
||||
goto resv_err;
|
||||
|
||||
|
@ -2562,7 +2562,7 @@ xfs_defer_extent_free(
|
||||
xfs_filblks_t len,
|
||||
const struct xfs_owner_info *oinfo,
|
||||
enum xfs_ag_resv_type type,
|
||||
bool skip_discard,
|
||||
unsigned int free_flags,
|
||||
struct xfs_defer_pending **dfpp)
|
||||
{
|
||||
struct xfs_extent_free_item *xefi;
|
||||
@ -2582,6 +2582,7 @@ xfs_defer_extent_free(
|
||||
ASSERT(len < mp->m_sb.sb_agblocks);
|
||||
ASSERT(agbno + len <= mp->m_sb.sb_agblocks);
|
||||
#endif
|
||||
ASSERT(!(free_flags & ~XFS_FREE_EXTENT_ALL_FLAGS));
|
||||
ASSERT(xfs_extfree_item_cache != NULL);
|
||||
ASSERT(type != XFS_AG_RESV_AGFL);
|
||||
|
||||
@ -2593,7 +2594,7 @@ xfs_defer_extent_free(
|
||||
xefi->xefi_startblock = bno;
|
||||
xefi->xefi_blockcount = (xfs_extlen_t)len;
|
||||
xefi->xefi_agresv = type;
|
||||
if (skip_discard)
|
||||
if (free_flags & XFS_FREE_EXTENT_SKIP_DISCARD)
|
||||
xefi->xefi_flags |= XFS_EFI_SKIP_DISCARD;
|
||||
if (oinfo) {
|
||||
ASSERT(oinfo->oi_offset == 0);
|
||||
@ -2621,11 +2622,11 @@ xfs_free_extent_later(
|
||||
xfs_filblks_t len,
|
||||
const struct xfs_owner_info *oinfo,
|
||||
enum xfs_ag_resv_type type,
|
||||
bool skip_discard)
|
||||
unsigned int free_flags)
|
||||
{
|
||||
struct xfs_defer_pending *dontcare = NULL;
|
||||
|
||||
return xfs_defer_extent_free(tp, bno, len, oinfo, type, skip_discard,
|
||||
return xfs_defer_extent_free(tp, bno, len, oinfo, type, free_flags,
|
||||
&dontcare);
|
||||
}
|
||||
|
||||
@ -2650,13 +2651,13 @@ xfs_free_extent_later(
|
||||
int
|
||||
xfs_alloc_schedule_autoreap(
|
||||
const struct xfs_alloc_arg *args,
|
||||
bool skip_discard,
|
||||
unsigned int free_flags,
|
||||
struct xfs_alloc_autoreap *aarp)
|
||||
{
|
||||
int error;
|
||||
|
||||
error = xfs_defer_extent_free(args->tp, args->fsbno, args->len,
|
||||
&args->oinfo, args->resv, skip_discard, &aarp->dfp);
|
||||
&args->oinfo, args->resv, free_flags, &aarp->dfp);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
@ -235,7 +235,12 @@ xfs_buf_to_agfl_bno(
|
||||
|
||||
int xfs_free_extent_later(struct xfs_trans *tp, xfs_fsblock_t bno,
|
||||
xfs_filblks_t len, const struct xfs_owner_info *oinfo,
|
||||
enum xfs_ag_resv_type type, bool skip_discard);
|
||||
enum xfs_ag_resv_type type, unsigned int free_flags);
|
||||
|
||||
/* Don't issue a discard for the blocks freed. */
|
||||
#define XFS_FREE_EXTENT_SKIP_DISCARD (1U << 0)
|
||||
|
||||
#define XFS_FREE_EXTENT_ALL_FLAGS (XFS_FREE_EXTENT_SKIP_DISCARD)
|
||||
|
||||
/*
|
||||
* List of extents to be free "later".
|
||||
@ -264,7 +269,7 @@ struct xfs_alloc_autoreap {
|
||||
};
|
||||
|
||||
int xfs_alloc_schedule_autoreap(const struct xfs_alloc_arg *args,
|
||||
bool skip_discard, struct xfs_alloc_autoreap *aarp);
|
||||
unsigned int free_flags, struct xfs_alloc_autoreap *aarp);
|
||||
void xfs_alloc_cancel_autoreap(struct xfs_trans *tp,
|
||||
struct xfs_alloc_autoreap *aarp);
|
||||
void xfs_alloc_commit_autoreap(struct xfs_trans *tp,
|
||||
|
@ -605,7 +605,7 @@ xfs_bmap_btree_to_extents(
|
||||
|
||||
xfs_rmap_ino_bmbt_owner(&oinfo, ip->i_ino, whichfork);
|
||||
error = xfs_free_extent_later(cur->bc_tp, cbno, 1, &oinfo,
|
||||
XFS_AG_RESV_NONE, false);
|
||||
XFS_AG_RESV_NONE, 0);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
@ -5381,11 +5381,15 @@ xfs_bmap_del_extent_real(
|
||||
error = xfs_rtfree_blocks(tp, del->br_startblock,
|
||||
del->br_blockcount);
|
||||
} else {
|
||||
unsigned int efi_flags = 0;
|
||||
|
||||
if ((bflags & XFS_BMAPI_NODISCARD) ||
|
||||
del->br_state == XFS_EXT_UNWRITTEN)
|
||||
efi_flags |= XFS_FREE_EXTENT_SKIP_DISCARD;
|
||||
|
||||
error = xfs_free_extent_later(tp, del->br_startblock,
|
||||
del->br_blockcount, NULL,
|
||||
XFS_AG_RESV_NONE,
|
||||
((bflags & XFS_BMAPI_NODISCARD) ||
|
||||
del->br_state == XFS_EXT_UNWRITTEN));
|
||||
XFS_AG_RESV_NONE, efi_flags);
|
||||
}
|
||||
if (error)
|
||||
return error;
|
||||
|
@ -282,7 +282,7 @@ xfs_bmbt_free_block(
|
||||
|
||||
xfs_rmap_ino_bmbt_owner(&oinfo, ip->i_ino, cur->bc_ino.whichfork);
|
||||
error = xfs_free_extent_later(cur->bc_tp, fsbno, 1, &oinfo,
|
||||
XFS_AG_RESV_NONE, false);
|
||||
XFS_AG_RESV_NONE, 0);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
@ -1990,7 +1990,7 @@ xfs_difree_inode_chunk(
|
||||
return xfs_free_extent_later(tp,
|
||||
XFS_AGB_TO_FSB(mp, agno, sagbno),
|
||||
M_IGEO(mp)->ialloc_blks, &XFS_RMAP_OINFO_INODES,
|
||||
XFS_AG_RESV_NONE, false);
|
||||
XFS_AG_RESV_NONE, 0);
|
||||
}
|
||||
|
||||
/* holemask is only 16-bits (fits in an unsigned long) */
|
||||
@ -2036,8 +2036,7 @@ xfs_difree_inode_chunk(
|
||||
ASSERT(contigblk % mp->m_sb.sb_spino_align == 0);
|
||||
error = xfs_free_extent_later(tp,
|
||||
XFS_AGB_TO_FSB(mp, agno, agbno), contigblk,
|
||||
&XFS_RMAP_OINFO_INODES, XFS_AG_RESV_NONE,
|
||||
false);
|
||||
&XFS_RMAP_OINFO_INODES, XFS_AG_RESV_NONE, 0);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
@ -170,7 +170,7 @@ __xfs_inobt_free_block(
|
||||
xfs_inobt_mod_blockcount(cur, -1);
|
||||
fsbno = XFS_DADDR_TO_FSB(cur->bc_mp, xfs_buf_daddr(bp));
|
||||
return xfs_free_extent_later(cur->bc_tp, fsbno, 1,
|
||||
&XFS_RMAP_OINFO_INOBT, resv, false);
|
||||
&XFS_RMAP_OINFO_INOBT, resv, 0);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
|
@ -1173,7 +1173,7 @@ xfs_refcount_adjust_extents(
|
||||
tmp.rc_startblock);
|
||||
error = xfs_free_extent_later(cur->bc_tp, fsbno,
|
||||
tmp.rc_blockcount, NULL,
|
||||
XFS_AG_RESV_NONE, false);
|
||||
XFS_AG_RESV_NONE, 0);
|
||||
if (error)
|
||||
goto out_error;
|
||||
}
|
||||
@ -1237,7 +1237,7 @@ xfs_refcount_adjust_extents(
|
||||
ext.rc_startblock);
|
||||
error = xfs_free_extent_later(cur->bc_tp, fsbno,
|
||||
ext.rc_blockcount, NULL,
|
||||
XFS_AG_RESV_NONE, false);
|
||||
XFS_AG_RESV_NONE, 0);
|
||||
if (error)
|
||||
goto out_error;
|
||||
}
|
||||
@ -2022,7 +2022,7 @@ xfs_refcount_recover_cow_leftovers(
|
||||
/* Free the block. */
|
||||
error = xfs_free_extent_later(tp, fsb,
|
||||
rr->rr_rrec.rc_blockcount, NULL,
|
||||
XFS_AG_RESV_NONE, false);
|
||||
XFS_AG_RESV_NONE, 0);
|
||||
if (error)
|
||||
goto out_trans;
|
||||
|
||||
|
@ -109,7 +109,7 @@ xfs_refcountbt_free_block(
|
||||
be32_add_cpu(&agf->agf_refcount_blocks, -1);
|
||||
xfs_alloc_log_agf(cur->bc_tp, agbp, XFS_AGF_REFCOUNT_BLOCKS);
|
||||
return xfs_free_extent_later(cur->bc_tp, fsbno, 1,
|
||||
&XFS_RMAP_OINFO_REFC, XFS_AG_RESV_METADATA, false);
|
||||
&XFS_RMAP_OINFO_REFC, XFS_AG_RESV_METADATA, 0);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
|
@ -160,7 +160,8 @@ xrep_newbt_add_blocks(
|
||||
if (args->tp) {
|
||||
ASSERT(xnr->oinfo.oi_offset == 0);
|
||||
|
||||
error = xfs_alloc_schedule_autoreap(args, true, &resv->autoreap);
|
||||
error = xfs_alloc_schedule_autoreap(args,
|
||||
XFS_FREE_EXTENT_SKIP_DISCARD, &resv->autoreap);
|
||||
if (error)
|
||||
goto out_pag;
|
||||
}
|
||||
@ -414,7 +415,7 @@ xrep_newbt_free_extent(
|
||||
*/
|
||||
fsbno = XFS_AGB_TO_FSB(sc->mp, resv->pag->pag_agno, free_agbno);
|
||||
error = xfs_free_extent_later(sc->tp, fsbno, free_aglen, &xnr->oinfo,
|
||||
xnr->resv, true);
|
||||
xnr->resv, XFS_FREE_EXTENT_SKIP_DISCARD);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
@ -451,7 +451,7 @@ xreap_agextent_iter(
|
||||
|
||||
xfs_refcount_free_cow_extent(sc->tp, fsbno, *aglenp);
|
||||
error = xfs_free_extent_later(sc->tp, fsbno, *aglenp, NULL,
|
||||
rs->resv, true);
|
||||
rs->resv, XFS_FREE_EXTENT_SKIP_DISCARD);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
@ -477,7 +477,7 @@ xreap_agextent_iter(
|
||||
* system with large EFIs.
|
||||
*/
|
||||
error = xfs_free_extent_later(sc->tp, fsbno, *aglenp, rs->oinfo,
|
||||
rs->resv, true);
|
||||
rs->resv, XFS_FREE_EXTENT_SKIP_DISCARD);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
@ -943,7 +943,8 @@ xrep_reap_bmapi_iter(
|
||||
xfs_trans_mod_dquot_byino(sc->tp, ip, XFS_TRANS_DQ_BCOUNT,
|
||||
-(int64_t)imap->br_blockcount);
|
||||
return xfs_free_extent_later(sc->tp, imap->br_startblock,
|
||||
imap->br_blockcount, NULL, XFS_AG_RESV_NONE, true);
|
||||
imap->br_blockcount, NULL, XFS_AG_RESV_NONE,
|
||||
XFS_FREE_EXTENT_SKIP_DISCARD);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -603,7 +603,7 @@ xfs_reflink_cancel_cow_blocks(
|
||||
|
||||
error = xfs_free_extent_later(*tpp, del.br_startblock,
|
||||
del.br_blockcount, NULL,
|
||||
XFS_AG_RESV_NONE, false);
|
||||
XFS_AG_RESV_NONE, 0);
|
||||
if (error)
|
||||
break;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user