From: Hao Xu <hao.xu@linux.dev>
To: Dominique Martinet <asmadeus@codewreck.org>,
Christian Brauner <brauner@kernel.org>
Cc: io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
Pavel Begunkov <asml.silence@gmail.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
Dave Chinner <david@fromorbit.com>,
linux-fsdevel@vger.kernel.org, Wanpeng Li <wanpengli@tencent.com>
Subject: Re: [PATCH 2/3] vfs_getdents/struct dir_context: add flags field
Date: Thu, 13 Jul 2023 12:12:51 +0800 [thread overview]
Message-ID: <57d4290a-af9a-a89e-65ba-ff40128dd28b@linux.dev> (raw)
In-Reply-To: <ZK7OeEmsHAU7xSxQ@codewreck.org>
Hi Christian and Dominique,
On 7/13/23 00:02, Dominique Martinet wrote:
> (replying as that was my code)
>
> Christian Brauner wrote on Wed, Jul 12, 2023 at 01:31:57PM +0200:
>> On Tue, Jul 11, 2023 at 07:40:26PM +0800, Hao Xu wrote:
>>> diff --git a/fs/readdir.c b/fs/readdir.c
>>> index 9592259b7e7f..b80caf4c9321 100644
>>> --- a/fs/readdir.c
>>> +++ b/fs/readdir.c
>>> @@ -358,12 +358,14 @@ static bool filldir64(struct dir_context *ctx, const char *name, int namlen,
>>> * @file : pointer to file struct of directory
>>> * @dirent : pointer to user directory structure
>>> * @count : size of buffer
>>> + * @flags : additional dir_context flags
>> Why do you need that flag argument. The ->iterate{_shared}() i_op gets
>> passed the file so the filesystem can check
>> @file->f_mode & FMODE_NOWAIT, no?
> As far as I understand it, it's not because the fd is capable of NOWAIT
> that uring will call it in NOWAIT mode:
> - if the first getdents call returned -EAGAIN it'll also fall back to
> waiting in a separate thread (there's no "getdents poll" implementation,
> so there's no other way of rescheduling a non-blocking call)
> - it's also possible for the user to specify it wants IOSQE_ASYNC in the
> sqe->flags (admitedly I'm not sure why would anyone do this, but that's
> useful for benchmarks at least -- it skips the initial NOWAIT call
> before falling back to threaded waiting call)
>
> Even outsides of io_uring, a call to getdents64 should block, so even if
> the filesystem supports non-blocking it should be explicitely required
> by the caller.
Hi Christian,
My understanding of FMODE_NOWAIT is "this file support nowait IO". Just
like what Dominique
said, io_uring issue a request two rounds(let's simplify it here since
no apoll or task work involved),
and the first round is a nowait/nonblock try, the second one is an
offload-ed block try. So besides
a "ability" flag(FMODE_NOWAIT), we still need a "one-round" flag to
point out that "we do need to
do nowait IO this time".
>
>>> --- a/include/linux/fs.h
>>> +++ b/include/linux/fs.h
>>> @@ -1719,8 +1719,16 @@ typedef bool (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64,
>>> struct dir_context {
>>> filldir_t actor;
>>> loff_t pos;
>>> + unsigned long flags;
>>> };
>>>
>>> +/*
>>> + * flags for dir_context flags
>>> + * DIR_CONTEXT_F_NOWAIT: Request non-blocking iterate
>>> + * (requires file->f_mode & FMODE_NOWAIT)
>>> + */
>>> +#define DIR_CONTEXT_F_NOWAIT (1 << 0)
>> Even if this should be needed, I don't think this needs to use a full
>> flags field.
> I also got a request to somehow pass back "are there more entries to
> read after this call" to the caller in my v1, and I had done this as a
> second flag -- in general my understanding was that it's better to add
> flags than a specific boolean for extensibility but I have no opinon
> here.
I've no strong opinion here, I kept it here as a flag variable to make it
more extendable in the future.
Thanks,
Hao
next prev parent reply other threads:[~2023-07-13 4:13 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-11 11:40 [PATCH v3 0/3] io_uring getdents Hao Xu
2023-07-11 11:40 ` [PATCH 1/3] fs: split off vfs_getdents function of getdents64 syscall Hao Xu
2023-07-11 13:02 ` Ammar Faizi
2023-07-12 8:03 ` Hao Xu
2023-07-12 13:55 ` Ammar Faizi
2023-07-13 4:17 ` Hao Xu
2023-07-11 23:41 ` Dave Chinner
2023-07-11 23:50 ` Jens Axboe
2023-07-12 11:14 ` Christian Brauner
2023-07-11 11:40 ` [PATCH 2/3] vfs_getdents/struct dir_context: add flags field Hao Xu
2023-07-12 11:31 ` Christian Brauner
2023-07-12 16:02 ` Dominique Martinet
2023-07-13 4:12 ` Hao Xu [this message]
2023-07-11 11:40 ` [PATCH 3/3] io_uring: add support for getdents Hao Xu
2023-07-11 12:15 ` Dominique Martinet
2023-07-12 7:53 ` Hao Xu
2023-07-12 16:10 ` Dominique Martinet
2023-07-13 4:05 ` Hao Xu
2023-07-13 4:40 ` Hao Xu
2023-07-13 4:50 ` Dominique Martinet
2023-07-12 8:01 ` Hao Xu
2023-07-12 15:27 ` Christian Brauner
2023-07-13 4:35 ` Hao Xu
2023-07-13 7:10 ` Christian Brauner
2023-07-13 9:06 ` Hao Xu
2023-07-13 15:14 ` Christian Brauner
2023-07-16 11:57 ` Hao Xu
2023-07-18 6:55 ` Hao Xu
2023-07-11 23:47 ` [PATCH v3 0/3] io_uring getdents Dave Chinner
2023-07-11 23:51 ` Jens Axboe
2023-07-12 0:53 ` Dominique Martinet
2023-07-12 0:56 ` Jens Axboe
2023-07-12 3:16 ` Hao Xu
2023-07-12 3:12 ` Hao Xu
2023-07-12 3:19 ` Hao Xu
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=57d4290a-af9a-a89e-65ba-ff40128dd28b@linux.dev \
--to=hao.xu@linux.dev \
--cc=asmadeus@codewreck.org \
--cc=asml.silence@gmail.com \
--cc=axboe@kernel.dk \
--cc=brauner@kernel.org \
--cc=bugs@claycon.org \
--cc=david@fromorbit.com \
--cc=io-uring@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=shr@fb.com \
--cc=viro@zeniv.linux.org.uk \
--cc=wanpengli@tencent.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 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.