From: Christoph Hellwig <hch@infradead.org>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: sandeen@sandeen.net, linux-xfs@vger.kernel.org
Subject: Re: [PATCH 06/16] xfs_repair: fix rmapbt record order check
Date: Sun, 10 May 2020 00:33:18 -0700 [thread overview]
Message-ID: <20200510073318.GH8939@infradead.org> (raw)
In-Reply-To: <158904183079.982941.15948246247495283555.stgit@magnolia>
On Sat, May 09, 2020 at 09:30:30AM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> The rmapbt record order checks here don't quite work properly. For
> non-shared filesystems, we fail to check that the startblock of the nth
> record comes entirely after the previous record.
>
> However, for filesystems with shared blocks (reflink) we correctly check
> that the startblock/owner/offset of the nth record comes after the
> previous one.
>
> Therefore, make the reflink fs checks use "laststartblock" to preserve
> that functionality while making the non-reflink fs checks use
> "lastblock" to fix the problem outlined above.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> repair/scan.c | 12 +++++++-----
> 1 file changed, 7 insertions(+), 5 deletions(-)
>
>
> diff --git a/repair/scan.c b/repair/scan.c
> index 7c46ab89..7508f7e8 100644
> --- a/repair/scan.c
> +++ b/repair/scan.c
> @@ -925,15 +925,15 @@ struct rmap_priv {
> static bool
> rmap_in_order(
> xfs_agblock_t b,
> - xfs_agblock_t lastblock,
> + xfs_agblock_t laststartblock,
> uint64_t owner,
> uint64_t lastowner,
> uint64_t offset,
> uint64_t lastoffset)
> {
> - if (b > lastblock)
> + if (b > laststartblock)
> return true;
> - else if (b < lastblock)
> + else if (b < laststartblock)
> return false;
>
> if (owner > lastowner)
So this is just a variable rename and looks obviously fine.
> @@ -964,6 +964,7 @@ scan_rmapbt(
> int hdr_errors = 0;
> int numrecs;
> int state;
> + xfs_agblock_t laststartblock = 0;
> xfs_agblock_t lastblock = 0;
> uint64_t lastowner = 0;
> uint64_t lastoffset = 0;
> @@ -1101,14 +1102,15 @@ _("%s rmap btree block claimed (state %d), agno %d, bno %d, suspect %d\n"),
> /* Check for out of order records. */
> if (i == 0) {
> advance:
> - lastblock = b;
> + laststartblock = b;
> + lastblock = end - 1;
> lastowner = owner;
> lastoffset = offset;
> } else {
> bool bad;
>
> if (xfs_sb_version_hasreflink(&mp->m_sb))
> - bad = !rmap_in_order(b, lastblock,
> + bad = !rmap_in_order(b, laststartblock,
> owner, lastowner,
> offset, lastoffset);
> else
This looks correct, but really hard to read. I'll send a follow on
cleanup.
Reviewed-by: Christoph Hellwig <hch@lst.de>
next prev parent reply other threads:[~2020-05-10 7:33 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-09 16:29 [PATCH 00/16] xfs_repair: catch things that xfs_check misses Darrick J. Wong
2020-05-09 16:29 ` [PATCH 01/16] xfs_repair: fix missing dir buffer corruption checks Darrick J. Wong
2020-05-09 17:08 ` Christoph Hellwig
2020-05-11 16:44 ` Darrick J. Wong
2020-05-11 17:36 ` Darrick J. Wong
2020-05-12 17:29 ` [PATCH v2 " Darrick J. Wong
2020-05-13 6:22 ` Christoph Hellwig
2020-05-13 15:35 ` Darrick J. Wong
2020-05-09 16:30 ` [PATCH 02/16] xfs_repair: warn when we would have rebuilt a directory Darrick J. Wong
2020-05-09 17:09 ` Christoph Hellwig
2020-05-09 16:30 ` [PATCH 03/16] xfs_repair: check for AG btree records that would wrap around Darrick J. Wong
2020-05-09 17:09 ` Christoph Hellwig
2020-05-09 16:30 ` [PATCH 04/16] xfs_repair: fix bnobt and refcountbt record order checks Darrick J. Wong
2020-05-09 17:10 ` Christoph Hellwig
2020-05-09 16:30 ` [PATCH 05/16] xfs_repair: check for out-of-order inobt records Darrick J. Wong
2020-05-09 17:11 ` Christoph Hellwig
2020-05-09 16:30 ` [PATCH 06/16] xfs_repair: fix rmapbt record order check Darrick J. Wong
2020-05-10 7:33 ` Christoph Hellwig [this message]
2020-05-09 16:30 ` [PATCH 07/16] xfs_repair: tag inobt vs finobt errors properly Darrick J. Wong
2020-05-09 17:14 ` Christoph Hellwig
2020-05-09 16:30 ` [PATCH 08/16] xfs_repair: complain about bad interior btree pointers Darrick J. Wong
2020-05-09 17:15 ` Christoph Hellwig
2020-05-09 16:30 ` [PATCH 09/16] xfs_repair: convert to libxfs_verify_agbno Darrick J. Wong
2020-05-09 17:18 ` Christoph Hellwig
2020-05-11 16:22 ` Darrick J. Wong
2020-05-12 8:07 ` Christoph Hellwig
2020-05-09 16:31 ` [PATCH 10/16] xfs_repair: refactor verify_dfsbno_range Darrick J. Wong
2020-05-10 7:24 ` Christoph Hellwig
2020-05-09 16:31 ` [PATCH 11/16] xfs_repair: remove verify_dfsbno Darrick J. Wong
2020-05-10 7:24 ` Christoph Hellwig
2020-05-09 16:31 ` [PATCH 12/16] xfs_repair: remove verify_aginum Darrick J. Wong
2020-05-10 7:25 ` Christoph Hellwig
2020-05-09 16:31 ` [PATCH 13/16] xfs_repair: mark entire free space btree record as free1 Darrick J. Wong
2020-05-10 7:26 ` Christoph Hellwig
2020-05-09 16:31 ` [PATCH 14/16] xfs_repair: complain about free space only seen by one btree Darrick J. Wong
2020-05-10 7:26 ` Christoph Hellwig
2020-05-09 16:31 ` [PATCH 15/16] xfs_repair: complain about extents in unknown state Darrick J. Wong
2020-05-10 7:27 ` Christoph Hellwig
2020-05-09 16:31 ` [PATCH 16/16] xfs_repair: complain about any nonzero inprogress value, not just 1 Darrick J. Wong
2020-05-10 7:27 ` Christoph Hellwig
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=20200510073318.GH8939@infradead.org \
--to=hch@infradead.org \
--cc=darrick.wong@oracle.com \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@sandeen.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox