All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/14] namei: clean up retry logic in various do_* functions
@ 2021-07-15 10:45 Dmitry Kadashev
  2021-07-15 10:45 ` [PATCH v2 01/14] namei: prepare do_rmdir for refactoring Dmitry Kadashev
                   ` (13 more replies)
  0 siblings, 14 replies; 15+ messages in thread
From: Dmitry Kadashev @ 2021-07-15 10:45 UTC (permalink / raw)
  To: Jens Axboe, Alexander Viro, Christian Brauner, Linus Torvalds
  Cc: linux-fsdevel, io-uring, Dmitry Kadashev

Suggested by Linus in https://lore.kernel.org/io-uring/CAHk-=wh=cpt_tQCirzFZRPawRpbuFTZ2MxNpXiyUF+eBXF=+sw@mail.gmail.com/

This patchset does all the do_* functions one by one. The idea is to
move the main logic to a helper function and handle stale retries /
struct filename cleanups outside, which makes the logic easier to
follow.

There are a few minor changes in behavior:

1. filename_lookup() / filename_parentat() / filename_create() do their
own retries on ESTALE (regardless of flags), and previously they were
exempt from retries in the do_* functions (but they *were* called on
retry - it's just the return code wasn't checked for ESTALE). And
now the retry is done on the upper level, and so technically it could be
called a behavior change. Hopefully it's an edge case where an
additional check does not matter.

2. Some safety checks like may_mknod() / flags validation are now
repeated on retry. Those are mostly trivial and retry is a slow path, so
that should be OK.

3. retry_estale() is wrapped into unlikely() now

On top of https://lore.kernel.org/io-uring/20210708063447.3556403-1-dkadashev@gmail.com/

v2:

- Split flow changes and code reorganization to different commits;

- Move more checks into the new helpers, to avoid gotos in the touched
  do_* functions completely;

- Add unlikely() around retry_estale();

- Name the new helper functions try_* instead of *_helper;

Dmitry Kadashev (14):
  namei: prepare do_rmdir for refactoring
  namei: clean up do_rmdir retry logic
  namei: prepare do_unlinkat for refactoring
  namei: clean up do_unlinkat retry logic
  namei: prepare do_mkdirat for refactoring
  namei: clean up do_mkdirat retry logic
  namei: prepare do_mknodat for refactoring
  namei: clean up do_mknodat retry logic
  namei: prepare do_symlinkat for refactoring
  namei: clean up do_symlinkat retry logic
  namei: prepare do_linkat for refactoring
  namei: clean up do_linkat retry logic
  namei: prepare do_renameat2 for refactoring
  namei: clean up do_renameat2 retry logic

 fs/namei.c | 252 +++++++++++++++++++++++++++++------------------------
 1 file changed, 140 insertions(+), 112 deletions(-)

-- 
2.30.2


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

end of thread, other threads:[~2021-07-15 10:46 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-15 10:45 [PATCH v2 00/14] namei: clean up retry logic in various do_* functions Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 01/14] namei: prepare do_rmdir for refactoring Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 02/14] namei: clean up do_rmdir retry logic Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 03/14] namei: prepare do_unlinkat for refactoring Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 04/14] namei: clean up do_unlinkat retry logic Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 05/14] namei: prepare do_mkdirat for refactoring Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 06/14] namei: clean up do_mkdirat retry logic Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 07/14] namei: prepare do_mknodat for refactoring Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 08/14] namei: clean up do_mknodat retry logic Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 09/14] namei: prepare do_symlinkat for refactoring Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 10/14] namei: clean up do_symlinkat retry logic Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 11/14] namei: prepare do_linkat for refactoring Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 12/14] namei: clean up do_linkat retry logic Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 13/14] namei: prepare do_renameat2 for refactoring Dmitry Kadashev
2021-07-15 10:45 ` [PATCH v2 14/14] namei: clean up do_renameat2 retry logic Dmitry Kadashev

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.