All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH RFC 00/12] Allow concurrent directory updates.
@ 2022-06-13 23:18 NeilBrown
  2022-06-13 23:18 ` [PATCH 04/12] VFS: move dput() and mnt_drop_write() into done_path_update() NeilBrown
                   ` (12 more replies)
  0 siblings, 13 replies; 34+ messages in thread
From: NeilBrown @ 2022-06-13 23:18 UTC (permalink / raw)
  To: Al Viro, Daire Byrne, Trond Myklebust, Chuck Lever
  Cc: Linux NFS Mailing List, linux-fsdevel, LKML

VFS currently holds an exclusive lock on a directory during create,
unlink, rename.  This imposes serialisation on all filesystems though
some may not benefit from it, and some may be able to provide finer
grained locking internally, thus reducing contention.

This series allows the filesystem to request that the inode lock be
shared rather than exclusive.  In that case an exclusive lock will be
held on the dentry instead, much as is done for parallel lookup.

The NFS filesystem can easily support concurrent updates (server does
any needed serialiation) so it is converted.

This series also converts nfsd to use the new interfaces so concurrent
incoming NFS requests in the one directory can be handled concurrently.

As a net result, if an NFS mounted filesystem is reexported over NFS,
then multiple clients can create files in a single directory and all
synchronisation will be handled on the final server.  This helps hid
latency on link from client to server.

I include a few nfsd patches that aren't strictly needed for this work,
but seem to be a logical consequence of the changes that I did have to
make.

I have only tested this lightly.  In particular the rename support is
quite new and I haven't tried to break it yet.

I post this for general review, and hopefully extra testing...  Daire
Byrne has expressed interest in the NFS re-export parallelism.

NeilBrown


---

NeilBrown (12):
      VFS: support parallel updates in the one directory.
      VFS: move EEXIST and ENOENT tests into lookup_hash_update()
      VFS: move want_write checks into lookup_hash_update()
      VFS: move dput() and mnt_drop_write() into done_path_update()
      VFS: export done_path_update()
      VFS: support concurrent renames.
      NFS: support parallel updates in the one directory.
      nfsd: allow parallel creates from nfsd
      nfsd: support concurrent renames.
      nfsd: reduce locking in nfsd_lookup()
      nfsd: use (un)lock_inode instead of fh_(un)lock
      nfsd: discard fh_locked flag and fh_lock/fh_unlock


 fs/dcache.c            |  59 ++++-
 fs/namei.c             | 578 ++++++++++++++++++++++++++++++++---------
 fs/nfs/dir.c           |  29 ++-
 fs/nfs/inode.c         |   2 +
 fs/nfs/unlink.c        |   5 +-
 fs/nfsd/nfs2acl.c      |   6 +-
 fs/nfsd/nfs3acl.c      |   4 +-
 fs/nfsd/nfs3proc.c     |  37 +--
 fs/nfsd/nfs4acl.c      |   7 +-
 fs/nfsd/nfs4proc.c     |  61 ++---
 fs/nfsd/nfs4state.c    |   8 +-
 fs/nfsd/nfsfh.c        |  10 +-
 fs/nfsd/nfsfh.h        |  58 +----
 fs/nfsd/nfsproc.c      |  31 +--
 fs/nfsd/vfs.c          | 243 ++++++++---------
 fs/nfsd/vfs.h          |   8 +-
 include/linux/dcache.h |  27 ++
 include/linux/fs.h     |   1 +
 include/linux/namei.h  |  30 ++-
 19 files changed, 791 insertions(+), 413 deletions(-)

--
Signature


^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2022-07-04 17:17 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-13 23:18 [PATCH RFC 00/12] Allow concurrent directory updates NeilBrown
2022-06-13 23:18 ` [PATCH 04/12] VFS: move dput() and mnt_drop_write() into done_path_update() NeilBrown
2022-06-13 23:18 ` [PATCH 03/12] VFS: move want_write checks into lookup_hash_update() NeilBrown
2022-06-13 23:18 ` [PATCH 02/12] VFS: move EEXIST and ENOENT tests " NeilBrown
2022-06-13 23:18 ` [PATCH 01/12] VFS: support parallel updates in the one directory NeilBrown
2022-06-13 23:18 ` [PATCH 05/12] VFS: export done_path_update() NeilBrown
2022-06-13 23:18 ` [PATCH 08/12] nfsd: allow parallel creates from nfsd NeilBrown
2022-06-24 14:43   ` Chuck Lever III
2022-06-28 22:35   ` Chuck Lever III
2022-06-28 23:09     ` NeilBrown
2022-07-04 17:17       ` Chuck Lever III
2022-06-13 23:18 ` [PATCH 07/12] NFS: support parallel updates in the one directory NeilBrown
2022-06-13 23:18 ` [PATCH 11/12] nfsd: use (un)lock_inode instead of fh_(un)lock NeilBrown
2022-06-24 14:43   ` Chuck Lever III
2022-06-13 23:18 ` [PATCH 06/12] VFS: support concurrent renames NeilBrown
2022-06-14  4:35   ` kernel test robot
2022-06-14 12:37   ` kernel test robot
2022-06-14 13:28   ` kernel test robot
2022-06-26 13:07   ` [VFS] 46a2afd9f6: ltp.rename10.fail kernel test robot
2022-06-26 13:07     ` kernel test robot
2022-06-26 13:07     ` [LTP] " kernel test robot
2022-06-13 23:18 ` [PATCH 12/12] nfsd: discard fh_locked flag and fh_lock/fh_unlock NeilBrown
2022-06-24 14:43   ` Chuck Lever III
2022-06-13 23:18 ` [PATCH 10/12] nfsd: reduce locking in nfsd_lookup() NeilBrown
2022-06-24 14:43   ` Chuck Lever III
2022-06-13 23:18 ` [PATCH 09/12] nfsd: support concurrent renames NeilBrown
2022-06-24 14:43   ` Chuck Lever III
2022-06-15 13:46 ` [PATCH RFC 00/12] Allow concurrent directory updates Daire Byrne
2022-06-16  0:55   ` NeilBrown
2022-06-16 10:48     ` Daire Byrne
2022-06-17  5:49       ` NeilBrown
2022-06-17 15:27         ` Daire Byrne
2022-06-20 10:18           ` Daire Byrne
2022-06-16 13:49     ` Anna Schumaker

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.