public inbox for [email protected]
 help / color / mirror / Atom feed
From: Clay Harris <[email protected]>
To: Stefan Roesch <[email protected]>
Cc: [email protected], [email protected]
Subject: Re: [PATCH v2 0/3] io_uring: add getdents64 support
Date: Wed, 24 Nov 2021 22:42:47 -0600	[thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>


I seem to recall making a few comments the last time a getdents64
for io_uring was proposed; in particular I wanted to bring up one
here.  This applies only to altering the internal interface, which
io_uring would use, although wiring up a new syscall would be a nice
addition.

The current interface has 2 issues:

1)
getdents64 requires at least two calls to read a directory.
One or more to get the dents and a final call to see the EOF.
With small directories, this means literally 50% of the calls
are wasted.

2)
The fpos cannot be changed atomically with a read, so it is not
possible to to safely perform concurrent reads on the same fd.

But, the kernel knows (most, if not all of the time) that it is at
EOF at the time it returns the last buffer.  So, it would be very
useful to get an EOF indicator back with the final buffer.  This
could just a flag, or for instance make an fpos parameter which is
both input and output, returning the (post read) fpos or zero at
EOF.

Futhermore, for input, one could supply:
	0:	Start from directory beginning
	-1:	Read from current position
	other:	(output from previous call) Read from here

On Wed, Nov 24 2021 at 15:16:57 -0800, Stefan Roesch quoth thus:

> This series adds support for getdents64 in liburing. The intent is to
> provide a more complete I/O interface for io_uring.
> 
> Patch 1: fs: add parameter use_fpos to iterate_dir()
>   This adds a new parameter to the function iterate_dir() so the
>   caller can specify if the position is the file position or the
>   position stored in the buffer context.
> 
> Patch 2: fs: split off vfs_getdents function from getdents64 system call
>   This splits of the iterate_dir part of the syscall in its own
>   dedicated function. This allows to call the function directly from
>   liburing.
> 
> Patch 3: io_uring: add support for getdents64
>   Adds the functions to io_uring to support getdents64.
> 
> There is also a patch series for the changes to liburing. This includes
> a new test. The patch series is called "liburing: add getdents support."
> 
> The following tests have been performed:
> - new liburing getdents test program has been run
> - xfstests have been run
> - both tests have been repeated with the kernel memory leak checker
>   and no leaks have been reported.
> 
> Signed-off-by: Stefan Roesch <[email protected]>
> ---
> V2: Updated the iterate_dir calls in fs/ksmbd, fs/ecryptfs and arch/alpha with
>     the additional parameter.
> 
> Stefan Roesch (3):
>   fs: add parameter use_fpos to iterate_dir function
>   fs: split off vfs_getdents function of getdents64 syscall
>   io_uring: add support for getdents64
> 
>  arch/alpha/kernel/osf_sys.c   |  2 +-
>  fs/ecryptfs/file.c            |  2 +-
>  fs/exportfs/expfs.c           |  2 +-
>  fs/internal.h                 |  8 +++++
>  fs/io_uring.c                 | 52 ++++++++++++++++++++++++++++
>  fs/ksmbd/smb2pdu.c            |  2 +-
>  fs/ksmbd/vfs.c                |  4 +--
>  fs/nfsd/nfs4recover.c         |  2 +-
>  fs/nfsd/vfs.c                 |  2 +-
>  fs/overlayfs/readdir.c        |  6 ++--
>  fs/readdir.c                  | 64 ++++++++++++++++++++++++++---------
>  include/linux/fs.h            |  2 +-
>  include/uapi/linux/io_uring.h |  1 +
>  13 files changed, 121 insertions(+), 28 deletions(-)
> 
> 
> base-commit: f0afafc21027c39544a2c1d889b0cff75b346932
> -- 
> 2.30.2

  parent reply	other threads:[~2021-11-25  4:44 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-24 23:16 [PATCH v2 0/3] io_uring: add getdents64 support Stefan Roesch
2021-11-24 23:16 ` [PATCH v2 1/3] fs: add parameter use_fpos to iterate_dir function Stefan Roesch
2021-11-24 23:16 ` [PATCH v2 2/3] fs: split off vfs_getdents function of getdents64 syscall Stefan Roesch
2021-11-24 23:17 ` [PATCH v2 3/3] io_uring: add support for getdents64 Stefan Roesch
2021-11-25  4:42 ` Clay Harris [this message]
2021-12-01  6:01   ` [PATCH v2 0/3] io_uring: add getdents64 support Stefan Roesch
2021-12-01  7:11     ` Clay Harris
2021-12-15 21:09 ` Jens Axboe
2021-12-31 23:27   ` Al Viro

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=20211125044246.ve2433klyjua3a6d@ps29521.dreamhostps.com \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    /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