From: David Sterba <dsterba@suse.cz>
To: Josef Bacik <josef@toxicpanda.com>
Cc: Qu Wenruo <quwenruo.btrfs@gmx.com>, Qu Wenruo <wqu@suse.com>,
linux-btrfs@vger.kernel.org,
Hans van Kranenburg <hans@knorrie.org>
Subject: Re: [PATCH RFC 2/2] btrfs: space-info: Don't allow signal to interrupt ticket waiting
Date: Tue, 7 Jul 2020 18:16:54 +0200 [thread overview]
Message-ID: <20200707161654.GC16141@twin.jikos.cz> (raw)
In-Reply-To: <9cc6e3ff-ef7f-0948-f55c-b940364cf67f@toxicpanda.com>
On Mon, Jul 06, 2020 at 10:33:56AM -0400, Josef Bacik wrote:
> On 7/6/20 10:05 AM, Qu Wenruo wrote:
> >> This only needs to be handled for FLUSH_ALL and FLUSH_STEAL. Anybody
> >> doing btrfs_start_transaction() should be able to fail with -EINTR,
> >> because they should be close to the syscall path. Balance needs to be
> >> fixed to deal with it, and I assume there might be a few other places,
> >> but by-in-large none of these places should flip read only. Thanks,
> >
> > There are already ones existing, for btrfs_drop_snapshot().
> >
> > This is mostly caused by btrfs_delalloc_reserve_metadata(), which always
> > use FLUSH_ALL unless there is a running trans or its space cache inode.
> >
> > But still, for a lot of relocation code, we don't really want to bother
> > the EINTR and just want uninterruptible at least for now.
> >
> > Any idea for that?
> > Or just rework how we handle errors in a lot of places?
> >
> > It doesn't look correct for such a low level mechanism to return -EINTR
> > while most of callers doesn't really want to bother.
> >
>
> That's the point, most callers shouldn't have to, because most callers shouldn't
> be far enough into their operations that -EINTR causes problems.
Agreed, that's a sane pattern to follow so we should convert the
remaining cases, perhaps also auditing all existing
btrfs_start_transaction calls but after a quick look I haven't spotted
anything else than the reloc and drop snapshot.
> We should probably just change btrfs_drop_snapshot to use join, and then have it
> do any space reservation it needs outside of the trans handle. The other option
> is a FLUSH_ALL_UNKILLABLE. Thanks,
I'd rather not push the killable semantics to the flushing state machine
and let it up to the caller context to decide.
prev parent reply other threads:[~2020-07-07 16:17 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-06 7:44 [PATCH RFC 0/2] btrfs: make ticket wait uninterruptible to address unexpected RO during balance Qu Wenruo
2020-07-06 7:44 ` [PATCH RFC 1/2] btrfs: relocation: Allow signal to cancel balance Qu Wenruo
2020-07-06 13:45 ` Josef Bacik
2020-07-06 18:19 ` Hans van Kranenburg
2020-07-06 22:43 ` Qu Wenruo
2020-07-06 7:44 ` [PATCH RFC 2/2] btrfs: space-info: Don't allow signal to interrupt ticket waiting Qu Wenruo
2020-07-06 13:45 ` Josef Bacik
2020-07-06 13:50 ` Qu Wenruo
2020-07-06 13:53 ` Josef Bacik
2020-07-06 14:05 ` Qu Wenruo
2020-07-06 14:33 ` Josef Bacik
2020-07-07 16:16 ` David Sterba [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=20200707161654.GC16141@twin.jikos.cz \
--to=dsterba@suse.cz \
--cc=hans@knorrie.org \
--cc=josef@toxicpanda.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=quwenruo.btrfs@gmx.com \
--cc=wqu@suse.com \
/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