From: "Darrick J. Wong" <djwong@kernel.org>
To: Dave Chinner <david@fromorbit.com>
Cc: Dan Carpenter <error27@gmail.com>, linux-xfs@vger.kernel.org
Subject: Re: [bug report] xfs: allow setting and clearing of log incompat feature flags
Date: Tue, 17 Jan 2023 15:41:42 -0800 [thread overview]
Message-ID: <Y8cyNsEn372fjMRb@magnolia> (raw)
In-Reply-To: <20230117210757.GF360264@dread.disaster.area>
On Wed, Jan 18, 2023 at 08:07:57AM +1100, Dave Chinner wrote:
> On Tue, Jan 17, 2023 at 01:56:11PM +0300, Dan Carpenter wrote:
> > Hello Darrick J. Wong,
> >
> > The patch 908ce71e54f8: "xfs: allow setting and clearing of log
> > incompat feature flags" from Aug 8, 2021, leads to the following
> > Smatch static checker warning:
> >
> > fs/xfs/xfs_mount.c:1315 xfs_add_incompat_log_feature()
> > warn: missing error code 'error'
> >
> > fs/xfs/xfs_mount.c
> > 1280 int
> > 1281 xfs_add_incompat_log_feature(
> > 1282 struct xfs_mount *mp,
> > 1283 uint32_t feature)
> > 1284 {
> > 1285 struct xfs_dsb *dsb;
> > 1286 int error;
> > 1287
> > 1288 ASSERT(hweight32(feature) == 1);
> > 1289 ASSERT(!(feature & XFS_SB_FEAT_INCOMPAT_LOG_UNKNOWN));
> > 1290
> > 1291 /*
> > 1292 * Force the log to disk and kick the background AIL thread to reduce
> > 1293 * the chances that the bwrite will stall waiting for the AIL to unpin
> > 1294 * the primary superblock buffer. This isn't a data integrity
> > 1295 * operation, so we don't need a synchronous push.
> > 1296 */
> > 1297 error = xfs_log_force(mp, XFS_LOG_SYNC);
> > 1298 if (error)
> > 1299 return error;
> > 1300 xfs_ail_push_all(mp->m_ail);
> > 1301
> > 1302 /*
> > 1303 * Lock the primary superblock buffer to serialize all callers that
> > 1304 * are trying to set feature bits.
> > 1305 */
> > 1306 xfs_buf_lock(mp->m_sb_bp);
> > 1307 xfs_buf_hold(mp->m_sb_bp);
> > 1308
> > 1309 if (xfs_is_shutdown(mp)) {
> > 1310 error = -EIO;
> > 1311 goto rele;
> > 1312 }
> > 1313
> > 1314 if (xfs_sb_has_incompat_log_feature(&mp->m_sb, feature))
> > --> 1315 goto rele;
> > ^^^^^^^^^
> > It's not clear to me, why this old code is suddenly showing up as a new
> > warning... But it does feel like it should be an error path.
>
> Seems like a smatch issue?
>
> error at this point will be zero and this test is checking if the
> superblock is already marked with the incompat feature we need to
> add as there can be races with adding and removing the feature flag.
> If it is set once we hold the superblock buffer locked, then we just
> need to release the locked superblock buffer and return 0 to say it
> is set.
>
> IOWs, it looks to me like the code is correct and the checker hasn't
> understood the code pattern being used....
This is similar to the exchange we had last March:
https://lore.kernel.org/linux-xfs/20220324104521.GF12805@kadam/
wherein there was a series of if tests that would bail out early on
error, followed by one last test that checks if we've no further work to
do and returns a zero that was set earlier in the function. This sort
of situation is probably very difficult to detect within a static
checker, but I would much prefer that we review the online fsck
patchset[1] instead of reopening review on existing code that already
works and has already been merged.
[1] https://lore.kernel.org/linux-xfs/Y69UceeA2MEpjMJ8@magnolia/
--D
> Cheers,
>
> Dave.
> --
> Dave Chinner
> david@fromorbit.com
next prev parent reply other threads:[~2023-01-18 0:24 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-17 10:56 [bug report] xfs: allow setting and clearing of log incompat feature flags Dan Carpenter
2023-01-17 21:07 ` Dave Chinner
2023-01-17 23:41 ` Darrick J. Wong [this message]
2023-01-18 8:31 ` Dan Carpenter
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=Y8cyNsEn372fjMRb@magnolia \
--to=djwong@kernel.org \
--cc=david@fromorbit.com \
--cc=error27@gmail.com \
--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.