From: Jens Axboe <axboe@kernel.dk>
To: Al Viro <viro@zeniv.linux.org.uk>,
Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-fsdevel <linux-fsdevel@vger.kernel.org>
Subject: Re: [PATCH 1/2] fs: add support for LOOKUP_NONBLOCK
Date: Fri, 11 Dec 2020 14:46:35 -0700 [thread overview]
Message-ID: <53f6be3d-58d7-9471-44ab-1b594b83a4b9@kernel.dk> (raw)
In-Reply-To: <20201211172931.GY3579531@ZenIV.linux.org.uk>
On 12/11/20 10:29 AM, Al Viro wrote:
> On Fri, Dec 11, 2020 at 09:21:20AM -0800, Linus Torvalds wrote:
>> On Fri, Dec 11, 2020 at 7:57 AM Jens Axboe <axboe@kernel.dk> wrote:
>>>
>>> On 12/10/20 7:35 PM, Al Viro wrote:
>>>> _IF_ for some theoretical exercise you want to do "lookup without dropping
>>>> out of RCU", just add a flag that has unlazy_walk() fail. With -ECHILD.
>>>> Strip it away in complete_walk() and have path_init() with that flag
>>>> and without LOOKUP_RCU fail with -EAGAIN. All there is to it.
>>>
>>> Thanks Al, that makes for an easier implementation. I like that suggestion,
>>> boils it down to just three hunks (see below).
>>
>> Ooh. Yes, very nice.
>
> Except for the wrong order in path_init() - the check should go _before_
> if (!*s)
> flags &= ~LOOKUP_RCU;
> for obvious reasons.
Oops yes, I fixed that up.
> Again, that part is trivial - what to do with
> do_open()/open_last_lookups() is where the nastiness will be.
> Basically, it makes sure we bail out in cases when lookup itself
> would've blocked, but it does *not* bail out when equally heavy (and
> unlikely) blocking sources hit past the complete_walk(). Which makes
> it rather useless for the caller, unless we get logics added to that
> part as well. And _that_ I want to see before we commit to anything.
A few items can be handled by just disallowing them upfront - like
O_TRUNC with RESOLVE_NONBLOCK. I'd prefer to do that instead of
sprinkling trylock variants in places where they kind of end up being
nonsensical anyway (eg O_TRUNC with RESOLVE_NONBLOCK just doesn't make
sense). Outside of that, doesn't look like to me that do_open() needs
any further massaging. open_last_lookups() needs to deal with
non-blocking mnt_want_write(), but that looks pretty trivial, and
trylock on the inode.
So all seems pretty doable. Which makes me think I must be missing
something?
--
Jens Axboe
next prev parent reply other threads:[~2020-12-11 22:43 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-10 20:01 [PATCHSET 0/2] fs: Support for LOOKUP_NONBLOCK / RESOLVE_NONBLOCK Jens Axboe
2020-12-10 20:01 ` [PATCH 1/2] fs: add support for LOOKUP_NONBLOCK Jens Axboe
2020-12-10 20:53 ` Linus Torvalds
2020-12-10 21:06 ` Jens Axboe
2020-12-11 2:45 ` Al Viro
2020-12-11 16:05 ` Jens Axboe
2020-12-11 17:20 ` Al Viro
2020-12-11 17:35 ` Linus Torvalds
2020-12-11 18:50 ` Jens Axboe
2020-12-11 21:51 ` Al Viro
2020-12-11 23:47 ` Jens Axboe
2020-12-11 17:33 ` Matthew Wilcox
2020-12-11 18:55 ` Jens Axboe
2020-12-11 2:35 ` Al Viro
2020-12-11 15:57 ` Jens Axboe
2020-12-11 17:21 ` Linus Torvalds
2020-12-11 17:29 ` Al Viro
2020-12-11 17:38 ` Al Viro
2020-12-11 17:44 ` Linus Torvalds
2020-12-11 21:46 ` Jens Axboe [this message]
2020-12-10 20:01 ` [PATCH 2/2] fs: expose LOOKUP_NONBLOCK through openat2() RESOLVE_NONBLOCK Jens Axboe
2020-12-10 22:29 ` Dave Chinner
2020-12-10 23:12 ` Jens Axboe
2020-12-10 23:29 ` Linus Torvalds
2020-12-11 0:58 ` Dave Chinner
2020-12-11 1:01 ` Linus Torvalds
2020-12-11 3:45 ` Dave Chinner
2020-12-11 18:07 ` Linus Torvalds
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=53f6be3d-58d7-9471-44ab-1b594b83a4b9@kernel.dk \
--to=axboe@kernel.dk \
--cc=linux-fsdevel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
/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;
as well as URLs for NNTP newsgroup(s).