[PATCH 2/2] vfs: replace ints with enum last_type for LAST_XXX
From: Jori Koolstra
Date: Thu May 28 2026 - 14:00:50 EST
Several functions in namei.c take an "int *type" parameter, such as
filename_parentat(). To know what values this can take you have to find
the anonymous struct that defines the LAST_XXX values. Define an enum
last_type to make this type explicit.
Signed-off-by: Jori Koolstra <jkoolstra@xxxxxxxxx>
---
fs/namei.c | 28 ++++++++++++++++------------
1 file changed, 16 insertions(+), 12 deletions(-)
diff --git a/fs/namei.c b/fs/namei.c
index 889792761bc2..a1ba45f9faa9 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -132,7 +132,7 @@ static struct kmem_cache *__names_cache __ro_after_init;
/*
* Type of the last component on LOOKUP_PARENT
*/
-enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT};
+enum last_type {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT};
void __init filename_init(void)
{
@@ -732,7 +732,7 @@ struct nameidata {
struct inode *inode; /* path.dentry.d_inode */
unsigned int flags, state;
unsigned seq, next_seq, m_seq, r_seq;
- int last_type;
+ enum last_type last_type;
unsigned depth;
int total_link_count;
struct saved {
@@ -2225,7 +2225,7 @@ static struct dentry *follow_dotdot(struct nameidata *nd)
return dget(nd->path.dentry);
}
-static const char *handle_dots(struct nameidata *nd, int type)
+static const char *handle_dots(struct nameidata *nd, enum last_type type)
{
if (type == LAST_DOTDOT) {
const char *error = NULL;
@@ -2873,7 +2873,7 @@ static int path_parentat(struct nameidata *nd, unsigned flags,
/* Note: this does not consume "name" */
static int __filename_parentat(int dfd, struct filename *name,
unsigned int flags, struct path *parent,
- struct qstr *last, int *type,
+ struct qstr *last, enum last_type *type,
const struct path *root)
{
int retval;
@@ -2898,7 +2898,7 @@ static int __filename_parentat(int dfd, struct filename *name,
static int filename_parentat(int dfd, struct filename *name,
unsigned int flags, struct path *parent,
- struct qstr *last, int *type)
+ struct qstr *last, enum last_type *type)
{
return __filename_parentat(dfd, name, flags, parent, last, type, NULL);
}
@@ -2966,7 +2966,8 @@ static struct dentry *__start_removing_path(int dfd, struct filename *name,
struct path parent_path __free(path_put) = {};
struct dentry *d;
struct qstr last;
- int type, error;
+ enum last_type type;
+ int error;
error = filename_parentat(dfd, name, 0, &parent_path, &last, &type);
if (error)
@@ -3012,7 +3013,8 @@ struct dentry *kern_path_parent(const char *name, struct path *path)
CLASS(filename_kernel, filename)(name);
struct dentry *d;
struct qstr last;
- int type, error;
+ enum last_type type;
+ int error;
error = filename_parentat(AT_FDCWD, filename, 0, &parent_path, &last, &type);
if (error)
@@ -3062,7 +3064,7 @@ int vfs_path_parent_lookup(struct filename *filename, unsigned int flags,
struct path *parent, struct qstr *last,
const struct path *root)
{
- int type;
+ enum last_type type;
int err = __filename_parentat(AT_FDCWD, filename, flags, parent, last,
&type, root);
if (err)
@@ -4937,7 +4939,7 @@ static struct dentry *filename_create(int dfd, struct filename *name,
bool want_dir = lookup_flags & LOOKUP_DIRECTORY;
unsigned int reval_flag = lookup_flags & LOOKUP_REVAL;
unsigned int create_flags = LOOKUP_CREATE | LOOKUP_EXCL;
- int type;
+ enum last_type type;
int error;
error = filename_parentat(dfd, name, reval_flag, path, &last, &type);
@@ -5399,7 +5401,7 @@ int filename_rmdir(int dfd, struct filename *name)
struct dentry *dentry;
struct path path;
struct qstr last;
- int type;
+ enum last_type type;
unsigned int lookup_flags = 0;
struct delegated_inode delegated_inode = { };
retry:
@@ -5408,6 +5410,8 @@ int filename_rmdir(int dfd, struct filename *name)
return error;
switch (type) {
+ case LAST_NORM:
+ break;
case LAST_DOTDOT:
error = -ENOTEMPTY;
goto exit2;
@@ -5541,7 +5545,7 @@ int filename_unlinkat(int dfd, struct filename *name)
struct dentry *dentry;
struct path path;
struct qstr last;
- int type;
+ enum last_type type;
struct inode *inode;
struct delegated_inode delegated_inode = { };
unsigned int lookup_flags = 0;
@@ -6108,7 +6112,7 @@ int filename_renameat2(int olddfd, struct filename *from,
struct renamedata rd;
struct path old_path, new_path;
struct qstr old_last, new_last;
- int old_type, new_type;
+ enum last_type old_type, new_type;
struct delegated_inode delegated_inode = { };
unsigned int lookup_flags = 0;
bool should_retry = false;
--
2.54.0