Commit 72bd866a authored by Al Viro's avatar Al Viro

fs/namei.c: don't pass nameidata to __lookup_hash() and lookup_real()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 00cd8dd3
...@@ -1080,7 +1080,7 @@ static struct dentry *lookup_dcache(struct qstr *name, struct dentry *dir, ...@@ -1080,7 +1080,7 @@ static struct dentry *lookup_dcache(struct qstr *name, struct dentry *dir,
* dir->d_inode->i_mutex must be held * dir->d_inode->i_mutex must be held
*/ */
static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry, static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry,
struct nameidata *nd) unsigned int flags)
{ {
struct dentry *old; struct dentry *old;
...@@ -1090,7 +1090,7 @@ static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry, ...@@ -1090,7 +1090,7 @@ static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry,
return ERR_PTR(-ENOENT); return ERR_PTR(-ENOENT);
} }
old = dir->i_op->lookup(dir, dentry, nd ? nd->flags : 0); old = dir->i_op->lookup(dir, dentry, flags);
if (unlikely(old)) { if (unlikely(old)) {
dput(dentry); dput(dentry);
dentry = old; dentry = old;
...@@ -1099,16 +1099,16 @@ static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry, ...@@ -1099,16 +1099,16 @@ static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry,
} }
static struct dentry *__lookup_hash(struct qstr *name, static struct dentry *__lookup_hash(struct qstr *name,
struct dentry *base, struct nameidata *nd) struct dentry *base, unsigned int flags)
{ {
bool need_lookup; bool need_lookup;
struct dentry *dentry; struct dentry *dentry;
dentry = lookup_dcache(name, base, nd ? nd->flags : 0, &need_lookup); dentry = lookup_dcache(name, base, flags, &need_lookup);
if (!need_lookup) if (!need_lookup)
return dentry; return dentry;
return lookup_real(base->d_inode, dentry, nd); return lookup_real(base->d_inode, dentry, flags);
} }
/* /*
...@@ -1227,7 +1227,7 @@ static int lookup_slow(struct nameidata *nd, struct qstr *name, ...@@ -1227,7 +1227,7 @@ static int lookup_slow(struct nameidata *nd, struct qstr *name,
BUG_ON(nd->inode != parent->d_inode); BUG_ON(nd->inode != parent->d_inode);
mutex_lock(&parent->d_inode->i_mutex); mutex_lock(&parent->d_inode->i_mutex);
dentry = __lookup_hash(name, parent, nd); dentry = __lookup_hash(name, parent, nd->flags);
mutex_unlock(&parent->d_inode->i_mutex); mutex_unlock(&parent->d_inode->i_mutex);
if (IS_ERR(dentry)) if (IS_ERR(dentry))
return PTR_ERR(dentry); return PTR_ERR(dentry);
...@@ -1859,7 +1859,7 @@ int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt, ...@@ -1859,7 +1859,7 @@ int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
*/ */
static struct dentry *lookup_hash(struct nameidata *nd) static struct dentry *lookup_hash(struct nameidata *nd)
{ {
return __lookup_hash(&nd->last, nd->path.dentry, nd); return __lookup_hash(&nd->last, nd->path.dentry, nd->flags);
} }
/** /**
...@@ -1906,7 +1906,7 @@ struct dentry *lookup_one_len(const char *name, struct dentry *base, int len) ...@@ -1906,7 +1906,7 @@ struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
if (err) if (err)
return ERR_PTR(err); return ERR_PTR(err);
return __lookup_hash(&this, base, NULL); return __lookup_hash(&this, base, 0);
} }
int user_path_at_empty(int dfd, const char __user *name, unsigned flags, int user_path_at_empty(int dfd, const char __user *name, unsigned flags,
...@@ -2310,7 +2310,7 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry, ...@@ -2310,7 +2310,7 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry,
no_open: no_open:
if (need_lookup) { if (need_lookup) {
dentry = lookup_real(dir, dentry, nd); dentry = lookup_real(dir, dentry, nd->flags);
if (IS_ERR(dentry)) if (IS_ERR(dentry))
return PTR_ERR(dentry); return PTR_ERR(dentry);
...@@ -2372,7 +2372,7 @@ static int lookup_open(struct nameidata *nd, struct path *path, ...@@ -2372,7 +2372,7 @@ static int lookup_open(struct nameidata *nd, struct path *path,
if (need_lookup) { if (need_lookup) {
BUG_ON(dentry->d_inode); BUG_ON(dentry->d_inode);
dentry = lookup_real(dir_inode, dentry, nd); dentry = lookup_real(dir_inode, dentry, nd->flags);
if (IS_ERR(dentry)) if (IS_ERR(dentry))
return PTR_ERR(dentry); return PTR_ERR(dentry);
} }
......
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