Author: wuguanghao <wuguanghao3@huawei.com> Date: Mon Mar 14 20:12:17 2022 +0800 (cherry picked from commit feb7ea39582af46f13599e1678473c98965b05c7)
54 lines
1.8 KiB
Diff
54 lines
1.8 KiB
Diff
From fc46ff14390ec9ee346f58b33486ea23157d981f Mon Sep 17 00:00:00 2001
|
|
From: "Darrick J. Wong" <darrick.wong@oracle.com>
|
|
Date: Thu, 12 Nov 2020 17:39:58 -0500
|
|
Subject: [PATCH] xfs: set xefi_discard when creating a deferred agfl free log
|
|
intent item
|
|
|
|
Source kernel commit: 2c334e12f957cd8c6bb66b4aa3f79848b7c33cab
|
|
|
|
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: fcb762f5de2e ("xfs: add bmapi nodiscard flag")
|
|
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
|
|
Reviewed-by: Brian Foster <bfoster@redhat.com>
|
|
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
|
|
---
|
|
libxfs/xfs_alloc.c | 1 +
|
|
libxfs/xfs_bmap.h | 2 +-
|
|
2 files changed, 2 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/libxfs/xfs_alloc.c b/libxfs/xfs_alloc.c
|
|
index 93043d59..92f61fae 100644
|
|
--- a/libxfs/xfs_alloc.c
|
|
+++ b/libxfs/xfs_alloc.c
|
|
@@ -2463,6 +2463,7 @@ xfs_defer_agfl_block(
|
|
new->xefi_startblock = XFS_AGB_TO_FSB(mp, agno, agbno);
|
|
new->xefi_blockcount = 1;
|
|
new->xefi_oinfo = *oinfo;
|
|
+ new->xefi_skip_discard = false;
|
|
|
|
trace_xfs_agfl_free_defer(mp, agno, 0, agbno, 1);
|
|
|
|
diff --git a/libxfs/xfs_bmap.h b/libxfs/xfs_bmap.h
|
|
index e1bd484e..6747e97a 100644
|
|
--- a/libxfs/xfs_bmap.h
|
|
+++ b/libxfs/xfs_bmap.h
|
|
@@ -52,9 +52,9 @@ struct xfs_extent_free_item
|
|
{
|
|
xfs_fsblock_t xefi_startblock;/* starting fs block number */
|
|
xfs_extlen_t xefi_blockcount;/* number of blocks in extent */
|
|
+ bool xefi_skip_discard;
|
|
struct list_head xefi_list;
|
|
struct xfs_owner_info xefi_oinfo; /* extent owner */
|
|
- bool xefi_skip_discard;
|
|
};
|
|
|
|
#define XFS_BMAP_MAX_NMAP 4
|
|
--
|
|
2.27.0
|
|
|