From: Dmitry Kadashev <[email protected]>
To: Jens Axboe <[email protected]>,
Alexander Viro <[email protected]>,
Christian Brauner <[email protected]>,
Linus Torvalds <[email protected]>
Cc: [email protected], [email protected],
Dmitry Kadashev <[email protected]>
Subject: [PATCH v2 11/14] namei: prepare do_linkat for refactoring
Date: Thu, 15 Jul 2021 17:45:33 +0700 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
This is just a preparation for the move of the main linkat logic to a
separate function to make the logic easier to follow. This change
contains the flow changes so that the actual change to move the main
logic to a separate function does no change the flow at all.
Changes to the flow here:
1. Flags handling is moved into the retry loop. So it can be moved
into the function with the main logic. The cost here is mainly the
capabilities check on retry, but hopefully that is OK, ESTALE retries
are a slow path anyway.
2. Just like the similar patches for rmdir and others a few commits
before, previously on filename_create() and filename_lookup() error the
function used to exit immediately, and now it will check the return code
to see if ESTALE retry is appropriate. Both filename_create() and
filename_lookup() do their own retries on ESTALE (at least via
filename_parentat() used inside), but this extra check should be
completely fine. Invalid flags will now hit `if retry_estale()` as well.
3. unlikely() is added around the ESTALE check;
Cc: Linus Torvalds <[email protected]>
Cc: Al Viro <[email protected]>
Cc: Christian Brauner <[email protected]>
Suggested-by: Linus Torvalds <[email protected]>
Link: https://lore.kernel.org/io-uring/CAHk-=wiG+sN+2zSoAOggKCGue2kOJvw3rQySvQXsZstRQFTN+g@mail.gmail.com/
Link https://lore.kernel.org/io-uring/CAHk-=wiE_JVny73KRZ6wuhL_5U0RRSmAw678_Cnkh3OHM8C7Jg@mail.gmail.com/
Signed-off-by: Dmitry Kadashev <[email protected]>
---
fs/namei.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/fs/namei.c b/fs/namei.c
index 61cf6bbe1e5c..82cb6421b6df 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -4391,6 +4391,7 @@ int do_linkat(int olddfd, struct filename *old, int newdfd,
int how = 0;
int error;
+retry:
if ((flags & ~(AT_SYMLINK_FOLLOW | AT_EMPTY_PATH)) != 0) {
error = -EINVAL;
goto out_putnames;
@@ -4407,7 +4408,7 @@ int do_linkat(int olddfd, struct filename *old, int newdfd,
if (flags & AT_SYMLINK_FOLLOW)
how |= LOOKUP_FOLLOW;
-retry:
+
error = __filename_lookup(olddfd, old, how, &old_path, NULL);
if (error)
goto out_putnames;
@@ -4439,14 +4440,13 @@ int do_linkat(int olddfd, struct filename *old, int newdfd,
goto retry;
}
}
- if (retry_estale(error, how)) {
- path_put(&old_path);
- how |= LOOKUP_REVAL;
- goto retry;
- }
out_putpath:
path_put(&old_path);
out_putnames:
+ if (unlikely(retry_estale(error, how))) {
+ how |= LOOKUP_REVAL;
+ goto retry;
+ }
putname(old);
putname(new);
--
2.30.2
next prev parent reply other threads:[~2021-07-15 10:46 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
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 ` Dmitry Kadashev [this message]
2021-07-15 10:45 ` [PATCH v2 12/14] namei: clean up do_linkat " 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
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 \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[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