From: "Darrick J. Wong" <djwong@kernel.org>
To: Bill O'Donnell <bodonnel@redhat.com>
Cc: linux-xfs@vger.kernel.org, sandeen@sandeen.net, hch@infradead.org
Subject: Re: [PATCH v2] xfs_repair: handling a block with bad crc, bad uuid, and bad magic number needs fixing
Date: Fri, 21 Mar 2025 13:39:14 -0700 [thread overview]
Message-ID: <20250321203914.GA89034@frogsfrogsfrogs> (raw)
In-Reply-To: <Z93N12zwQeg6Fuot@redhat.com>
On Fri, Mar 21, 2025 at 03:36:39PM -0500, Bill O'Donnell wrote:
> On Fri, Mar 21, 2025 at 08:27:25AM -0700, Darrick J. Wong wrote:
> > On Fri, Mar 21, 2025 at 09:28:49AM -0500, bodonnel@redhat.com wrote:
> > > From: Bill O'Donnell <bodonnel@redhat.com>
> > >
> > > In certain cases, if a block is so messed up that crc, uuid and magic
> > > number are all bad, we need to not only detect in phase3 but fix it
> > > properly in phase6. In the current code, the mechanism doesn't work
> > > in that it only pays attention to one of the parameters.
> > >
> > > Note: in this case, the nlink inode link count drops to 1, but
> > > re-running xfs_repair fixes it back to 2. This is a side effect that
> > > should probably be handled in update_inode_nlinks() with separate patch.
> > > Regardless, running xfs_repair twice fixes the issue. Also, this patch
> > > fixes the issue with v5, but not v4 xfs.
> > >
> > > Signed-off-by: Bill O'Donnell <bodonnel@redhat.com>
> >
> > That makes sense.
> > Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
> >
> > Bonus question: does longform_dir2_check_leaf need a similar correction
> > for:
> >
> > if (leafhdr.magic == XFS_DIR3_LEAF1_MAGIC) {
> > error = check_da3_header(mp, bp, ip->i_ino);
> > if (error) {
> > libxfs_buf_relse(bp);
> > return error;
> > }
> > }
> > --D
> >
>
> I believe so, yes. Basing the v4/v5 decisions on an assumed correct
> magic number is not so good. I'll fix it in a new version or separate
> patch if preferred.
It's up to you, but since this fix has already earned its review, how
about a separate patch? :)
--D
> Thanks-
> Bill
>
>
> > >
> > > v2: remove superfluous wantmagic logic
> > >
> > > ---
> > > repair/phase6.c | 5 +----
> > > 1 file changed, 1 insertion(+), 4 deletions(-)
> > >
> > > diff --git a/repair/phase6.c b/repair/phase6.c
> > > index 4064a84b2450..9cffbb1f4510 100644
> > > --- a/repair/phase6.c
> > > +++ b/repair/phase6.c
> > > @@ -2364,7 +2364,6 @@ longform_dir2_entry_check(
> > > da_bno = (xfs_dablk_t)next_da_bno) {
> > > const struct xfs_buf_ops *ops;
> > > int error;
> > > - struct xfs_dir2_data_hdr *d;
> > >
> > > next_da_bno = da_bno + mp->m_dir_geo->fsbcount - 1;
> > > if (bmap_next_offset(ip, &next_da_bno)) {
> > > @@ -2404,9 +2403,7 @@ longform_dir2_entry_check(
> > > }
> > >
> > > /* check v5 metadata */
> > > - d = bp->b_addr;
> > > - if (be32_to_cpu(d->magic) == XFS_DIR3_BLOCK_MAGIC ||
> > > - be32_to_cpu(d->magic) == XFS_DIR3_DATA_MAGIC) {
> > > + if (xfs_has_crc(mp)) {
> > > error = check_dir3_header(mp, bp, ino);
> > > if (error) {
> > > fixit++;
> > > --
> > > 2.48.1
> > >
> > >
> >
>
next prev parent reply other threads:[~2025-03-21 20:39 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-21 14:28 [PATCH v2] xfs_repair: handling a block with bad crc, bad uuid, and bad magic number needs fixing bodonnel
2025-03-21 15:27 ` Darrick J. Wong
2025-03-21 20:36 ` Bill O'Donnell
2025-03-21 20:39 ` Darrick J. Wong [this message]
2025-03-21 23:57 ` Bill O'Donnell
2025-03-21 20:49 ` Eric Sandeen
2025-03-21 21:57 ` Bill O'Donnell
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=20250321203914.GA89034@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=bodonnel@redhat.com \
--cc=hch@infradead.org \
--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