xfs: add bmapi nodiscard flag
Freed extents are unconditionally discarded when online discard is enabled. Define XFS_BMAPI_NODISCARD to allow callers to bypass discards when unnecessary. For example, this will be useful for eofblocks trimming. This patch does not change behavior. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:

committed by
Darrick J. Wong

parent
e6631f8554
commit
fcb762f5de
@@ -3009,18 +3009,20 @@ out:
|
||||
* after fixing up the freelist.
|
||||
*/
|
||||
int /* error */
|
||||
xfs_free_extent(
|
||||
__xfs_free_extent(
|
||||
struct xfs_trans *tp, /* transaction pointer */
|
||||
xfs_fsblock_t bno, /* starting block number of extent */
|
||||
xfs_extlen_t len, /* length of extent */
|
||||
struct xfs_owner_info *oinfo, /* extent owner */
|
||||
enum xfs_ag_resv_type type) /* block reservation type */
|
||||
enum xfs_ag_resv_type type, /* block reservation type */
|
||||
bool skip_discard)
|
||||
{
|
||||
struct xfs_mount *mp = tp->t_mountp;
|
||||
struct xfs_buf *agbp;
|
||||
xfs_agnumber_t agno = XFS_FSB_TO_AGNO(mp, bno);
|
||||
xfs_agblock_t agbno = XFS_FSB_TO_AGBNO(mp, bno);
|
||||
int error;
|
||||
unsigned int busy_flags = 0;
|
||||
|
||||
ASSERT(len != 0);
|
||||
ASSERT(type != XFS_AG_RESV_AGFL);
|
||||
@@ -3044,7 +3046,9 @@ xfs_free_extent(
|
||||
if (error)
|
||||
goto err;
|
||||
|
||||
xfs_extent_busy_insert(tp, agno, agbno, len, 0);
|
||||
if (skip_discard)
|
||||
busy_flags |= XFS_EXTENT_BUSY_SKIP_DISCARD;
|
||||
xfs_extent_busy_insert(tp, agno, agbno, len, busy_flags);
|
||||
return 0;
|
||||
|
||||
err:
|
||||
|
Reference in New Issue
Block a user