Commit 34a26b99 authored by Al Viro's avatar Al Viro

namei: get rid of nameidata->base

we can do fdput() under rcu_read_lock() just fine; all we need to take
care of is fetching nd->inode value first.
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 8bcb77fa
...@@ -503,7 +503,6 @@ struct nameidata { ...@@ -503,7 +503,6 @@ struct nameidata {
int last_type; int last_type;
unsigned depth; unsigned depth;
int total_link_count; int total_link_count;
struct file *base;
struct saved { struct saved {
struct path link; struct path link;
void *cookie; void *cookie;
...@@ -1872,7 +1871,6 @@ static int path_init(int dfd, const struct filename *name, unsigned int flags, ...@@ -1872,7 +1871,6 @@ static int path_init(int dfd, const struct filename *name, unsigned int flags,
nd->last_type = LAST_ROOT; /* if there are only slashes... */ nd->last_type = LAST_ROOT; /* if there are only slashes... */
nd->flags = flags | LOOKUP_JUMPED | LOOKUP_PARENT; nd->flags = flags | LOOKUP_JUMPED | LOOKUP_PARENT;
nd->depth = 0; nd->depth = 0;
nd->base = NULL;
if (flags & LOOKUP_ROOT) { if (flags & LOOKUP_ROOT) {
struct dentry *root = nd->root.dentry; struct dentry *root = nd->root.dentry;
struct inode *inode = root->d_inode; struct inode *inode = root->d_inode;
...@@ -1941,14 +1939,15 @@ static int path_init(int dfd, const struct filename *name, unsigned int flags, ...@@ -1941,14 +1939,15 @@ static int path_init(int dfd, const struct filename *name, unsigned int flags,
nd->path = f.file->f_path; nd->path = f.file->f_path;
if (flags & LOOKUP_RCU) { if (flags & LOOKUP_RCU) {
if (f.flags & FDPUT_FPUT)
nd->base = f.file;
nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
rcu_read_lock(); rcu_read_lock();
nd->inode = nd->path.dentry->d_inode;
nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
} else { } else {
path_get(&nd->path); path_get(&nd->path);
fdput(f); nd->inode = nd->path.dentry->d_inode;
} }
fdput(f);
goto done;
} }
nd->inode = nd->path.dentry->d_inode; nd->inode = nd->path.dentry->d_inode;
...@@ -1971,8 +1970,6 @@ static void path_cleanup(struct nameidata *nd) ...@@ -1971,8 +1970,6 @@ static void path_cleanup(struct nameidata *nd)
path_put(&nd->root); path_put(&nd->root);
nd->root.mnt = NULL; nd->root.mnt = NULL;
} }
if (unlikely(nd->base))
fput(nd->base);
} }
static int trailing_symlink(struct nameidata *nd) static int trailing_symlink(struct nameidata *nd)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment