summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuís Henriques <lhenriques@suse.de>2023-09-28 16:23:41 +0100
committerChristian Brauner <brauner@kernel.org>2023-10-19 11:02:48 +0200
commit6036c5f1317526890925576f0efcbc427a32a2ae (patch)
tree92aa6e21c454e5acf60f7eb83eccf11a0d96bfd3
parent85fadf89e5708d74c4923e9ceeca4b9df0e000bb (diff)
fs: simplify misleading code to remove ambiguity regarding ihold()/iput()
Because 'inode' is being initialised before checking if 'dentry' is negative it looks like an extra iput() on 'inode' may happen since the ihold() is done only if the dentry is *not* negative. In reality this doesn't happen because d_is_negative() is never true if ->d_inode is NULL. This patch only makes the code easier to understand, as I was initially mislead by it. Signed-off-by: Luís Henriques <lhenriques@suse.de> Link: https://lore.kernel.org/r/20230928152341.303-1-lhenriques@suse.de Signed-off-by: Christian Brauner <brauner@kernel.org>
-rw-r--r--fs/namei.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/fs/namei.c b/fs/namei.c
index 94b27370f468..c36ff6f8195a 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -4367,11 +4367,9 @@ retry_deleg:
if (!IS_ERR(dentry)) {
/* Why not before? Because we want correct error value */
- if (last.name[last.len])
+ if (last.name[last.len] || d_is_negative(dentry))
goto slashes;
inode = dentry->d_inode;
- if (d_is_negative(dentry))
- goto slashes;
ihold(inode);
error = security_path_unlink(&path, dentry);
if (error)