From: "Darrick J. Wong" <djwong@kernel.org>
To: djwong@kernel.org
Cc: linux-xfs@vger.kernel.org
Subject: [PATCH 3/6] xfs: flag free space btree records that could be merged
Date: Sun, 02 Oct 2022 11:20:36 -0700 [thread overview]
Message-ID: <166473483646.1084923.10060980464175596930.stgit@magnolia> (raw)
In-Reply-To: <166473483595.1084923.1946295148534639238.stgit@magnolia>
From: Darrick J. Wong <djwong@kernel.org>
Complain if we encounter free space btree records that could be merged.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
fs/xfs/scrub/alloc.c | 31 ++++++++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/fs/xfs/scrub/alloc.c b/fs/xfs/scrub/alloc.c
index 0cd20d998368..de4b7c34275a 100644
--- a/fs/xfs/scrub/alloc.c
+++ b/fs/xfs/scrub/alloc.c
@@ -31,6 +31,13 @@ xchk_setup_ag_allocbt(
}
/* Free space btree scrubber. */
+
+struct xchk_alloc {
+ /* Previous free space extent. */
+ xfs_agblock_t prev_bno;
+ xfs_extlen_t prev_len;
+};
+
/*
* Ensure there's a corresponding cntbt/bnobt record matching this
* bnobt/cntbt record, respectively.
@@ -91,6 +98,25 @@ xchk_allocbt_xref(
xchk_xref_is_not_cow_staging(sc, agbno, len);
}
+/* Flag failures for records that could be merged. */
+STATIC void
+xchk_allocbt_mergeable(
+ struct xchk_btree *bs,
+ struct xchk_alloc *ca,
+ xfs_agblock_t bno,
+ xfs_extlen_t len)
+{
+ if (bs->sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
+ return;
+
+ if (ca->prev_len > 0 && ca->prev_bno + ca->prev_len == bno &&
+ ca->prev_len + len < (uint32_t)~0U)
+ xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
+
+ ca->prev_bno = bno;
+ ca->prev_len = len;
+}
+
/* Scrub a bnobt/cntbt record. */
STATIC int
xchk_allocbt_rec(
@@ -98,6 +124,7 @@ xchk_allocbt_rec(
const union xfs_btree_rec *rec)
{
struct xfs_perag *pag = bs->cur->bc_ag.pag;
+ struct xchk_alloc *ca = bs->private;
xfs_agblock_t bno;
xfs_extlen_t len;
@@ -109,6 +136,7 @@ xchk_allocbt_rec(
!xfs_verify_agbno(pag, bno + len - 1))
xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
+ xchk_allocbt_mergeable(bs, ca, bno, len);
xchk_allocbt_xref(bs->sc, bno, len);
return 0;
@@ -120,10 +148,11 @@ xchk_allocbt(
struct xfs_scrub *sc,
xfs_btnum_t which)
{
+ struct xchk_alloc ca = { .prev_len = 0 };
struct xfs_btree_cur *cur;
cur = which == XFS_BTNUM_BNO ? sc->sa.bno_cur : sc->sa.cnt_cur;
- return xchk_btree(sc, cur, xchk_allocbt_rec, &XFS_RMAP_OINFO_AG, NULL);
+ return xchk_btree(sc, cur, xchk_allocbt_rec, &XFS_RMAP_OINFO_AG, &ca);
}
int
next prev parent reply other threads:[~2022-10-02 18:35 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-02 18:20 [PATCHSET v23.1 0/6] xfs: detect mergeable and overlapping btree records Darrick J. Wong
2022-10-02 18:20 ` [PATCH 1/6] xfs: change bmap scrubber to store the previous mapping Darrick J. Wong
2022-10-02 18:20 ` [PATCH 6/6] xfs: check for reverse mapping records that could be merged Darrick J. Wong
2022-10-02 18:20 ` [PATCH 5/6] xfs: check overlapping rmap btree records Darrick J. Wong
2022-10-02 18:20 ` Darrick J. Wong [this message]
2022-10-02 18:20 ` [PATCH 2/6] xfs: alert the user about data/attr fork mappings that could be merged Darrick J. Wong
2022-10-02 18:20 ` [PATCH 4/6] xfs: flag refcount btree records " Darrick J. Wong
2022-12-30 22:11 [PATCHSET v24.0 0/6] xfs: detect mergeable and overlapping btree records Darrick J. Wong
2022-12-30 22:11 ` [PATCH 3/6] xfs: flag free space btree records that could be merged Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=166473483646.1084923.10060980464175596930.stgit@magnolia \
--to=djwong@kernel.org \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.