From: "Darrick J. Wong" <djwong@kernel.org>
To: Chris Mason <clm@meta.com>
Cc: cem@kernel.org, hch@lst.de, linux-xfs@vger.kernel.org,
linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH v6.1 11/11] xfs: add media verification ioctl
Date: Thu, 5 Feb 2026 20:53:32 -0800 [thread overview]
Message-ID: <20260206045332.GU7712@frogsfrogsfrogs> (raw)
In-Reply-To: <20260206030527.2506821-1-clm@meta.com>
On Thu, Feb 05, 2026 at 07:01:32PM -0800, Chris Mason wrote:
> "Darrick J. Wong" <djwong@kernel.org> wrote:
> > From: Darrick J. Wong <djwong@kernel.org>
> >
> > Add a new privileged ioctl so that xfs_scrub can ask the kernel to
> > verify the media of the devices backing an xfs filesystem, and have any
> > resulting media errors reported to fsnotify and xfs_healer.
>
> Hi everyone,
>
> I'm trying out my AI review prompts on a few more trees, and I ran it
> on the fuse-iomap-cache branch:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git/log/?h=fuse-iomap-cache
>
> This was the latest email lore could find, apologies if I grabbed the wrong one.
>
> Hopefully the review below is useful, please let me know if there are places it
> has gone wildly wrong. I kept the header to make it obvious exactly which
> commit I'd run through.
>
> (This is another XFS commit that ended up in my rev-list range, low confidence
> in the actual review, but I'm curious if AI got this one right)
>
> commit 2e5c40a5b6ca722202bc0e99830b6ecf8755d19c
> Author: Darrick J. Wong <djwong@kernel.org>
>
> xfs: add media verification ioctl
>
> [ ... ]
>
> > diff --git a/fs/xfs/xfs_verify_media.c b/fs/xfs/xfs_verify_media.c
> > --- /dev/null
> > +++ b/fs/xfs/xfs_verify_media.c
> > @@ -0,0 +1,445 @@
>
> [ ... ]
>
> > +/* Walk reverse mappings to look for all file data loss */
> > +static int
> > +xfs_verify_report_losses(
> > + struct xfs_mount *mp,
> > + enum xfs_group_type type,
> > + xfs_daddr_t daddr,
> > + u64 bblen)
> > +{
> > + struct xfs_group *xg = NULL;
> > + struct xfs_trans *tp;
> > + xfs_fsblock_t start_bno, end_bno;
> > + uint32_t start_gno, end_gno;
> > + int error;
> > +
> > + if (type == XG_TYPE_RTG) {
> > + start_bno = xfs_daddr_to_rtb(mp, daddr);
> > + end_bno = xfs_daddr_to_rtb(mp, daddr + bblen - 1);
> > + } else {
> > + start_bno = XFS_DADDR_TO_FSB(mp, daddr);
> > + end_bno = XFS_DADDR_TO_FSB(mp, daddr + bblen - 1);
> > + }
> > +
> > + tp = xfs_trans_alloc_empty(mp);
> > + start_gno = xfs_fsb_to_gno(mp, start_bno, type);
> > + end_gno = xfs_fsb_to_gno(mp, end_bno, type);
> > + while ((xg = xfs_group_next_range(mp, xg, start_gno, end_gno, type))) {
> > + struct xfs_buf *agf_bp = NULL;
> > + struct xfs_rtgroup *rtg = NULL;
> > + struct xfs_btree_cur *cur;
> > + struct xfs_rmap_irec ri_low = { };
> > + struct xfs_rmap_irec ri_high;
> > + struct xfs_group_data_lost lost;
> > +
> > + if (type == XG_TYPE_AG) {
> > + struct xfs_perag *pag = to_perag(xg);
> > +
> > + error = xfs_alloc_read_agf(pag, tp, 0, &agf_bp);
> > + if (error) {
> > + xfs_perag_put(pag);
> > + break;
> > + }
> > +
> > + cur = xfs_rmapbt_init_cursor(mp, tp, agf_bp, pag);
> > + } else {
> > + rtg = to_rtg(xg);
> > + xfs_rtgroup_lock(rtg, XFS_RTGLOCK_RMAP);
> > + cur = xfs_rtrmapbt_init_cursor(tp, rtg);
> > + }
>
> Does this code have a reference counting mismatch in the error paths?
>
> The xfs_group returned by xfs_group_next_range() is acquired via
> xfs_group_grab() which increments xg_active_ref.
>
> In the error path at line 120, the code uses xfs_perag_put() to release
> the reference:
>
> error = xfs_alloc_read_agf(pag, tp, 0, &agf_bp);
> if (error) {
> xfs_perag_put(pag);
> break;
> }
>
> And later in the loop, line 144 uses xfs_group_put().
>
> Both xfs_perag_put() and xfs_group_put() decrement xg_ref, not
> xg_active_ref. Looking at the reference counting implementation:
>
> xfs_group_grab() calls atomic_inc_not_zero(&xg->xg_active_ref)
> xfs_group_rele() calls atomic_dec(&xg->xg_active_ref)
> xfs_group_put() calls atomic_dec(&xg->xg_ref)
>
> Should these error paths use xfs_group_rele() instead to match the
> xfs_group_grab() in xfs_group_next_range()?
Yep. Wouldn't it be nice if our type system could keep those things
straight... :/
--D
prev parent reply other threads:[~2026-02-06 4:53 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-16 5:42 [PATCHSET v6] xfs: autonomous self healing of filesystems Darrick J. Wong
2026-01-16 5:42 ` [PATCH 01/11] docs: discuss autonomous self healing in the xfs online repair design doc Darrick J. Wong
2026-01-16 5:42 ` [PATCH 02/11] xfs: start creating infrastructure for health monitoring Darrick J. Wong
2026-02-06 13:07 ` Pankaj Raghav (Samsung)
2026-02-06 17:47 ` Darrick J. Wong
2026-02-06 18:54 ` Pankaj Raghav
2026-02-06 20:41 ` Darrick J. Wong
2026-02-09 6:34 ` Christoph Hellwig
2026-02-10 4:57 ` Darrick J. Wong
2026-01-16 5:42 ` [PATCH 03/11] xfs: create event queuing, formatting, and discovery infrastructure Darrick J. Wong
2026-01-16 5:43 ` [PATCH 04/11] xfs: convey filesystem unmount events to the health monitor Darrick J. Wong
2026-01-19 15:44 ` Christoph Hellwig
2026-01-16 5:43 ` [PATCH 05/11] xfs: convey metadata health " Darrick J. Wong
2026-01-16 5:43 ` [PATCH 06/11] xfs: convey filesystem shutdown " Darrick J. Wong
2026-01-19 15:44 ` Christoph Hellwig
2026-01-16 5:43 ` [PATCH 07/11] xfs: convey externally discovered fsdax media errors " Darrick J. Wong
2026-01-16 5:44 ` [PATCH 08/11] xfs: convey file I/O " Darrick J. Wong
2026-01-16 5:44 ` [PATCH 09/11] xfs: allow toggling verbose logging on the health monitoring file Darrick J. Wong
2026-01-16 5:44 ` [PATCH 10/11] xfs: check if an open file is on the health monitored fs Darrick J. Wong
2026-01-16 5:44 ` [PATCH 11/11] xfs: add media verification ioctl Darrick J. Wong
2026-01-19 15:56 ` Christoph Hellwig
2026-01-19 17:35 ` Darrick J. Wong
2026-01-20 4:12 ` [PATCH v6.1 " Darrick J. Wong
2026-01-20 7:18 ` Christoph Hellwig
2026-01-20 18:00 ` Darrick J. Wong
2026-01-21 7:05 ` Christoph Hellwig
2026-01-21 19:58 ` Darrick J. Wong
2026-02-06 3:01 ` Chris Mason
2026-02-06 4:53 ` Darrick J. Wong [this message]
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=20260206045332.GU7712@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=cem@kernel.org \
--cc=clm@meta.com \
--cc=hch@lst.de \
--cc=linux-fsdevel@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox