From: Dave Chinner <david@fromorbit.com>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: linux-xfs@vger.kernel.org, cem@kernel.org
Subject: Re: [PATCH 3/3] xfs: prevent mount and log shutdown race
Date: Wed, 13 Nov 2024 11:56:31 +1100 [thread overview]
Message-ID: <ZzP5P4hNnEC0P1NF@dread.disaster.area> (raw)
In-Reply-To: <20241112235808.GI9438@frogsfrogsfrogs>
On Tue, Nov 12, 2024 at 03:58:08PM -0800, Darrick J. Wong wrote:
> On Wed, Nov 13, 2024 at 09:05:16AM +1100, Dave Chinner wrote:
> > From: Dave Chinner <dchinner@redhat.com>
> >
> > I recently had an fstests hang where there were two internal tasks
> > stuck like so:
....
> > For the CIL to be doing shutdown processing, the log must be marked
> > with XLOG_IO_ERROR, but that doesn't happen until after the log
> > force is issued. Hence for xfs_do_force_shutdown() to be forcing
> > the log on a shut down log, we must have had a racing
> > xlog_force_shutdown and xfs_force_shutdown like so:
> >
> > p0 p1 CIL push
> >
> > <holds buffer lock>
> > xlog_force_shutdown
> > xfs_log_force
> > test_and_set_bit(XLOG_IO_ERROR)
> > xlog_state_release_iclog()
> > sees XLOG_IO_ERROR
> > xlog_state_shutdown_callbacks
> > ....
> > xfs_buf_item_unpin
> > xfs_buf_lock
> > <blocks on buffer p1 holds>
> >
> > xfs_force_shutdown
> > xfs_set_shutdown(mp) wins
> > xlog_force_shutdown
> > xfs_log_force
> > <blocks on CIL push>
> >
> > xfs_set_shutdown(mp) fails
> > <shuts down rest of log>
>
> Huh. I wonder, what happens today if there are multiple threads all
> trying to shut down the log? Same thing?
Yes. Anywhere that a both a log shutdown and a mount shutdown can be
called concurrently and one of them holds a locked buffer that is
also dirty in the CIL can trip over this. When I first saw it I
thought "calling shutdown with a locked buffer is bad", then
realised that we do that -everywhere- and assume it is safe to do
so. That's when I started looking deeper and found this....
> I guess we've never really
> gone Farmer Brown's Bad Day[1] on this part of the fs.
Oh, running ~64 individual fstests concurrently on the same VM does
a good imitation of that.
$ time sudo ./check-parallel /mnt/xfs -s xfs -x dump
Tests run: 1143
Failure count: 11
real 9m12.307s
user 0m0.007s
sys 0m0.013s
$
That's what's finding these little weird timing-related issues. I've got
several other repeating issues that I haven't got to the bottom of
yet, so Farmer Brown's Bad Day is not over yet...
-Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2024-11-13 0:56 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-12 22:05 [PATCH 0/3] xfs: miscellaneous bug fixes Dave Chinner
2024-11-12 22:05 ` [PATCH 1/3] xfs: fix sparse inode limits on runt AG Dave Chinner
2024-11-12 23:15 ` Darrick J. Wong
2024-11-13 0:12 ` Dave Chinner
2024-11-13 0:24 ` Darrick J. Wong
2024-11-12 22:05 ` [PATCH 2/3] xfs: delalloc and quota softlimit timers are incoherent Dave Chinner
2024-11-12 23:48 ` Darrick J. Wong
2024-11-13 0:14 ` Dave Chinner
2024-11-13 8:48 ` Christoph Hellwig
2024-11-12 22:05 ` [PATCH 3/3] xfs: prevent mount and log shutdown race Dave Chinner
2024-11-12 23:58 ` Darrick J. Wong
2024-11-13 0:56 ` Dave Chinner [this message]
2024-11-13 8:50 ` Christoph Hellwig
2024-11-12 23:59 ` [PATCH 0/3] xfs: miscellaneous bug fixes Darrick J. Wong
2024-11-13 1:09 ` Dave Chinner
2024-11-25 11:57 ` Carlos Maiolino
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=ZzP5P4hNnEC0P1NF@dread.disaster.area \
--to=david@fromorbit.com \
--cc=cem@kernel.org \
--cc=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.