All of lore.kernel.org
 help / color / mirror / Atom feed
From: Al Viro <viro@zeniv.linux.org.uk>
To: NeilBrown <neil@brown.name>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
	Jeff Layton <jlayton@kernel.org>,
	Trond Myklebust <trondmy@kernel.org>,
	Anna Schumaker <anna@kernel.org>,
	Miklos Szeredi <miklos@szeredi.hu>,
	Amir Goldstein <amir73il@gmail.com>, Jeremy Kerr <jk@ozlabs.org>,
	Ard Biesheuvel <ardb@kernel.org>,
	Christoph Hellwig <hch@infradead.org>,
	linux-efi@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	linux-nfs@vger.kernel.org, linux-unionfs@vger.kernel.org,
	linux-kernel@vger.kernel
Subject: Re: [PATCH v2 00/19] Prepare to lift lookup out of exclusive lock for directory ops
Date: Mon, 27 Apr 2026 04:47:01 +0100	[thread overview]
Message-ID: <20260427034701.GS3518998@ZenIV> (raw)
In-Reply-To: <20260427033527.773006-1-neilb@ownmail.net>

On Mon, Apr 27, 2026 at 01:29:33PM +1000, NeilBrown wrote:
> This patch set progresses my effort to improve concurrency of
> directory operations and specifically to allow concurrent updates
> in a given directory.
> 
> It is a selection of patches from the 53-patch set I posted in March
> which got relatively little response.  Maybe a shorter set will be more
> approachable.

Got it, will post a review tomorrow.

> This set:
>  - prepares the VFS in various ways
>  - make use of these preparations in ovl and NFS (the most challenging
>    filesystems for lookup as they do the most interesting things)
>  - make use in efivars and shmem which for different reasons need a small 
>    change that seemed worth including here.
> 
> The goal that these patch work towards is moving lookup out of i_rwsem
> on the directory - except for the actual ->lookup call.  This is itself
> a step towards allowing broad concurrency of operations in a given
> directory.
> 
> There are two particular requirements before lookup can move outside the lock:
> 1/ d_drop() mustn't be used before an operation completes: the dentry being present
>    in the dcache becomes part of the locking protocol.  This in turn requires
>    d_splice_alias() to work with hashed negative dentries.
> 2/ d_alloc_parallel() mustn't be called while i_rw_sem is held, as this would
>    result in a lock inversion.  So d_alloc_noblock and others are introduced
>    to handle the various cases.
>    In a few cases we need to drop and re-take i_rw_sem inside ->lookup.
>    As lookup might be called with a shared or exclusive lock this requires
>    a new LOOKUP_SHARED flag which is ugly but can be removed after the
>    lookup is moved out of the lock (then ->lookup will only ever be called
>    with a shared lock).
> 
> The full set of patches including these 19 and the rest to complete the
> lifting of lookup out of the exclusive lock can be found at
>    github/neilbrown/linux in branch pdirops
> 
> Significant changes since last time are:
>  - use wait_var_event for d_alloc_parallel() rather than effectively
>    duplicating that infrastructure - as suggested by Christop
>  - changes to ovl_readdir handling as discussed with Amir.
> 
> Thanks,
> NeilBrown
> 
> 
>  [PATCH v2 01/19] VFS: fix various typos in documentation for
>  [PATCH v2 02/19] VFS: enhance d_splice_alias() to handle in-lookup
>  [PATCH v2 03/19] VFS: allow d_alloc_name() to be used with ->d_hash
>  [PATCH v2 04/19] VFS: use wait_var_event for waiting in
>  [PATCH v2 05/19] VFS: introduce d_alloc_noblock()
>  [PATCH v2 06/19] VFS: add d_duplicate()
>  [PATCH v2 07/19] VFS: Add LOOKUP_SHARED flag.
>  [PATCH v2 08/19] VFS/xfs/ntfs: drop parent lock across
>  [PATCH v2 09/19] ovl: stop using lookup_one() in iterate_shared()
>  [PATCH v2 10/19] VFS/ovl: add d_alloc_noblock_return()
>  [PATCH v2 11/19] efivarfs: use d_alloc_name()
>  [PATCH v2 12/19] shmem: use d_duplicate()
>  [PATCH v2 13/19] nfs: remove d_drop()/d_alloc_parallel() from
>  [PATCH v2 14/19] nfs: use d_splice_alias() in nfs_link()
>  [PATCH v2 15/19] nfs: don't d_drop() before d_splice_alias()
>  [PATCH v2 16/19] nfs: don't d_drop() before d_splice_alias() in
>  [PATCH v2 17/19] nfs: Use d_alloc_noblock() in nfs_prime_dcache()
>  [PATCH v2 18/19] nfs: use d_alloc_noblock() in silly-rename
>  [PATCH v2 19/19] nfs: use d_duplicate()

  parent reply	other threads:[~2026-04-27  3:46 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-27  3:29 [PATCH v2 00/19] Prepare to lift lookup out of exclusive lock for directory ops NeilBrown
2026-04-27  3:29 ` [PATCH v2 01/19] VFS: fix various typos in documentation for start_creating start_removing etc NeilBrown
2026-04-27  3:29 ` [PATCH v2 02/19] VFS: enhance d_splice_alias() to handle in-lookup dentries NeilBrown
2026-04-27  3:29 ` [PATCH v2 03/19] VFS: allow d_alloc_name() to be used with ->d_hash NeilBrown
2026-04-27  3:29 ` [PATCH v2 04/19] VFS: use wait_var_event for waiting in d_alloc_parallel() NeilBrown
2026-04-27  3:29 ` [PATCH v2 05/19] VFS: introduce d_alloc_noblock() NeilBrown
2026-04-27  3:29 ` [PATCH v2 06/19] VFS: add d_duplicate() NeilBrown
2026-04-27  3:29 ` [PATCH v2 07/19] VFS: Add LOOKUP_SHARED flag NeilBrown
2026-04-27  3:29 ` [PATCH v2 08/19] VFS/xfs/ntfs: drop parent lock across d_alloc_parallel() in d_add_ci() NeilBrown
2026-04-27  3:29 ` [PATCH v2 09/19] ovl: stop using lookup_one() in iterate_shared() handling NeilBrown
2026-04-27  3:29 ` [PATCH v2 10/19] VFS/ovl: add d_alloc_noblock_return() NeilBrown
2026-04-27  3:29 ` [PATCH v2 11/19] efivarfs: use d_alloc_name() NeilBrown
2026-04-27  3:29 ` [PATCH v2 12/19] shmem: use d_duplicate() NeilBrown
2026-04-27  3:29 ` [PATCH v2 13/19] nfs: remove d_drop()/d_alloc_parallel() from nfs_atomic_open() NeilBrown
2026-04-27  3:29 ` [PATCH v2 14/19] nfs: use d_splice_alias() in nfs_link() NeilBrown
2026-04-27  3:29 ` [PATCH v2 15/19] nfs: don't d_drop() before d_splice_alias() NeilBrown
2026-04-27  3:29 ` [PATCH v2 16/19] nfs: don't d_drop() before d_splice_alias() in atomic_create NeilBrown
2026-04-27  3:29 ` [PATCH v2 17/19] nfs: Use d_alloc_noblock() in nfs_prime_dcache() NeilBrown
2026-04-27  3:29 ` [PATCH v2 18/19] nfs: use d_alloc_noblock() in silly-rename NeilBrown
2026-04-27  3:29 ` [PATCH v2 19/19] nfs: use d_duplicate() NeilBrown
2026-04-27  3:47 ` Al Viro [this message]
2026-04-27  8:41 ` [syzbot ci] Re: Prepare to lift lookup out of exclusive lock for directory ops syzbot ci

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=20260427034701.GS3518998@ZenIV \
    --to=viro@zeniv.linux.org.uk \
    --cc=amir73il@gmail.com \
    --cc=anna@kernel.org \
    --cc=ardb@kernel.org \
    --cc=brauner@kernel.org \
    --cc=hch@infradead.org \
    --cc=jack@suse.cz \
    --cc=jk@ozlabs.org \
    --cc=jlayton@kernel.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-unionfs@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    --cc=neil@brown.name \
    --cc=torvalds@linux-foundation.org \
    --cc=trondmy@kernel.org \
    /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.