summary refs log tree commit diff
path: root/fs/namei.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2020-03-10 10:09:26 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2020-04-02 01:09:29 -0400
commit72287417abd16c42f1d1ea8d93ee60ba08022fc1 (patch)
treeafdbcef8d045b4ec957403260387760da10947fd /fs/namei.c
parentf7bb959d9623ddf9fe9cc44234c210051548ea18 (diff)
downloadlinux-72287417abd16c42f1d1ea8d93ee60ba08022fc1.tar.gz
open_last_lookups(): don't abuse complete_walk() when all we want is unlazy
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/namei.c')
-rw-r--r--fs/namei.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/fs/namei.c b/fs/namei.c
index 6cb41608c47c..9f2d95aa2502 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -3147,15 +3147,11 @@ static const char *open_last_lookups(struct nameidata *nd,
 		BUG_ON(nd->flags & LOOKUP_RCU);
 	} else {
 		/* create side of things */
-		/*
-		 * This will *only* deal with leaving RCU mode - LOOKUP_JUMPED
-		 * has been cleared when we got to the last component we are
-		 * about to look up
-		 */
-		error = complete_walk(nd);
-		if (unlikely(error))
-			return ERR_PTR(error);
-
+		if (nd->flags & LOOKUP_RCU) {
+			error = unlazy_walk(nd);
+			if (unlikely(error))
+				return ERR_PTR(error);
+		}
 		audit_inode(nd->name, dir, AUDIT_INODE_PARENT);
 		/* trailing slashes? */
 		if (unlikely(nd->last.name[nd->last.len]))