xfs: set xefi_discard when creating a deferred agfl free log intent item
Make sure that we actually initialize xefi_discard when we're scheduling
a deferred free of an AGFL block. This was (eventually) found by the
UBSAN while I was banging on realtime rmap problems, but it exists in
the upstream codebase. While we're at it, rearrange the structure to
reduce the struct size from 64 to 56 bytes.
Fixes: fcb762f5de
("xfs: add bmapi nodiscard flag")
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
This commit is contained in:
parent
3650b228f8
commit
2c334e12f9
|
@ -2467,6 +2467,7 @@ xfs_defer_agfl_block(
|
||||||
new->xefi_startblock = XFS_AGB_TO_FSB(mp, agno, agbno);
|
new->xefi_startblock = XFS_AGB_TO_FSB(mp, agno, agbno);
|
||||||
new->xefi_blockcount = 1;
|
new->xefi_blockcount = 1;
|
||||||
new->xefi_oinfo = *oinfo;
|
new->xefi_oinfo = *oinfo;
|
||||||
|
new->xefi_skip_discard = false;
|
||||||
|
|
||||||
trace_xfs_agfl_free_defer(mp, agno, 0, agbno, 1);
|
trace_xfs_agfl_free_defer(mp, agno, 0, agbno, 1);
|
||||||
|
|
||||||
|
|
|
@ -52,9 +52,9 @@ struct xfs_extent_free_item
|
||||||
{
|
{
|
||||||
xfs_fsblock_t xefi_startblock;/* starting fs block number */
|
xfs_fsblock_t xefi_startblock;/* starting fs block number */
|
||||||
xfs_extlen_t xefi_blockcount;/* number of blocks in extent */
|
xfs_extlen_t xefi_blockcount;/* number of blocks in extent */
|
||||||
|
bool xefi_skip_discard;
|
||||||
struct list_head xefi_list;
|
struct list_head xefi_list;
|
||||||
struct xfs_owner_info xefi_oinfo; /* extent owner */
|
struct xfs_owner_info xefi_oinfo; /* extent owner */
|
||||||
bool xefi_skip_discard;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define XFS_BMAP_MAX_NMAP 4
|
#define XFS_BMAP_MAX_NMAP 4
|
||||||
|
|
Loading…
Reference in New Issue