[RFC PATCH v3 47/59] do_{mknodat,mkdirat,unlinkat,rmdir}(): use CLASS(filename_consume)

From: Al Viro

Date: Mon Dec 15 2025 - 22:54:53 EST


same rationale as for previous commit

Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
---
fs/namei.c | 32 +++++++++++++-------------------
1 file changed, 13 insertions(+), 19 deletions(-)

diff --git a/fs/namei.c b/fs/namei.c
index fbf306fe8414..0221cdb92297 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -5066,9 +5066,10 @@ static int may_mknod(umode_t mode)
}
}

-static int do_mknodat(int dfd, struct filename *name, umode_t mode,
+static int do_mknodat(int dfd, struct filename *__name, umode_t mode,
unsigned int dev)
{
+ CLASS(filename_consume, name)(__name);
struct delegated_inode di = { };
struct mnt_idmap *idmap;
struct dentry *dentry;
@@ -5078,12 +5079,11 @@ static int do_mknodat(int dfd, struct filename *name, umode_t mode,

error = may_mknod(mode);
if (error)
- goto out1;
+ return error;
retry:
dentry = filename_create(dfd, name, &path, lookup_flags);
- error = PTR_ERR(dentry);
if (IS_ERR(dentry))
- goto out1;
+ return PTR_ERR(dentry);

error = security_path_mknod(&path, dentry,
mode_strip_umask(path.dentry->d_inode, mode), dev);
@@ -5117,8 +5117,6 @@ static int do_mknodat(int dfd, struct filename *name, umode_t mode,
lookup_flags |= LOOKUP_REVAL;
goto retry;
}
-out1:
- putname(name);
return error;
}

@@ -5201,8 +5199,9 @@ struct dentry *vfs_mkdir(struct mnt_idmap *idmap, struct inode *dir,
}
EXPORT_SYMBOL(vfs_mkdir);

-int do_mkdirat(int dfd, struct filename *name, umode_t mode)
+int do_mkdirat(int dfd, struct filename *__name, umode_t mode)
{
+ CLASS(filename_consume, name)(__name);
struct dentry *dentry;
struct path path;
int error;
@@ -5211,9 +5210,8 @@ int do_mkdirat(int dfd, struct filename *name, umode_t mode)

retry:
dentry = filename_create(dfd, name, &path, lookup_flags);
- error = PTR_ERR(dentry);
if (IS_ERR(dentry))
- goto out_putname;
+ return PTR_ERR(dentry);

error = security_path_mkdir(&path, dentry,
mode_strip_umask(path.dentry->d_inode, mode));
@@ -5233,8 +5231,6 @@ int do_mkdirat(int dfd, struct filename *name, umode_t mode)
lookup_flags |= LOOKUP_REVAL;
goto retry;
}
-out_putname:
- putname(name);
return error;
}

@@ -5308,8 +5304,9 @@ int vfs_rmdir(struct mnt_idmap *idmap, struct inode *dir,
}
EXPORT_SYMBOL(vfs_rmdir);

-int do_rmdir(int dfd, struct filename *name)
+int do_rmdir(int dfd, struct filename *__name)
{
+ CLASS(filename_consume, name)(__name);
int error;
struct dentry *dentry;
struct path path;
@@ -5320,7 +5317,7 @@ int do_rmdir(int dfd, struct filename *name)
retry:
error = filename_parentat(dfd, name, lookup_flags, &path, &last, &type);
if (error)
- goto exit1;
+ return error;

switch (type) {
case LAST_DOTDOT:
@@ -5362,8 +5359,6 @@ int do_rmdir(int dfd, struct filename *name)
lookup_flags |= LOOKUP_REVAL;
goto retry;
}
-exit1:
- putname(name);
return error;
}

@@ -5451,8 +5446,9 @@ EXPORT_SYMBOL(vfs_unlink);
* writeout happening, and we don't want to prevent access to the directory
* while waiting on the I/O.
*/
-int do_unlinkat(int dfd, struct filename *name)
+int do_unlinkat(int dfd, struct filename *__name)
{
+ CLASS(filename_consume, name)(__name);
int error;
struct dentry *dentry;
struct path path;
@@ -5464,7 +5460,7 @@ int do_unlinkat(int dfd, struct filename *name)
retry:
error = filename_parentat(dfd, name, lookup_flags, &path, &last, &type);
if (error)
- goto exit_putname;
+ return error;

error = -EISDIR;
if (type != LAST_NORM)
@@ -5511,8 +5507,6 @@ int do_unlinkat(int dfd, struct filename *name)
lookup_flags |= LOOKUP_REVAL;
goto retry;
}
-exit_putname:
- putname(name);
return error;
}

--
2.47.3