Suggested by Linus in https://lore.kernel.org/io-uring/CAHk-=wh=cpt_tQCirzFZRPawRpbuFTZ2MxNpXiyUF+eBXF=+sw@xxxxxxxxxxxxxx/ 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 is one minor change in the behavior: 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. On top of https://lore.kernel.org/io-uring/20210708063447.3556403-1-dkadashev@xxxxxxxxx/ Dmitry Kadashev (7): namei: clean up do_rmdir retry logic namei: clean up do_unlinkat retry logic namei: clean up do_mkdirat retry logic namei: clean up do_mknodat retry logic namei: clean up do_symlinkat retry logic namei: clean up do_linkat retry logic namei: clean up do_renameat retry logic fs/namei.c | 283 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 163 insertions(+), 120 deletions(-) -- 2.30.2