kill opendata->{mnt,dentry}
->filp->f_path is there for purpose... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
d95852777b
commit
a4a3bdd778
@ -83,8 +83,6 @@ extern struct super_block *user_get_super(dev_t);
|
|||||||
* open.c
|
* open.c
|
||||||
*/
|
*/
|
||||||
struct opendata {
|
struct opendata {
|
||||||
struct dentry *dentry;
|
|
||||||
struct vfsmount *mnt;
|
|
||||||
struct file *filp;
|
struct file *filp;
|
||||||
};
|
};
|
||||||
struct open_flags {
|
struct open_flags {
|
||||||
|
15
fs/namei.c
15
fs/namei.c
@ -2269,14 +2269,11 @@ static struct file *atomic_open(struct nameidata *nd, struct dentry *dentry,
|
|||||||
if (nd->flags & LOOKUP_DIRECTORY)
|
if (nd->flags & LOOKUP_DIRECTORY)
|
||||||
open_flag |= O_DIRECTORY;
|
open_flag |= O_DIRECTORY;
|
||||||
|
|
||||||
od->dentry = DENTRY_NOT_SET;
|
od->filp->f_path.dentry = DENTRY_NOT_SET;
|
||||||
od->mnt = nd->path.mnt;
|
od->filp->f_path.mnt = nd->path.mnt;
|
||||||
error = dir->i_op->atomic_open(dir, dentry, od, open_flag, mode,
|
error = dir->i_op->atomic_open(dir, dentry, od, open_flag, mode,
|
||||||
opened);
|
opened);
|
||||||
if (error < 0) {
|
if (error < 0) {
|
||||||
if (WARN_ON(od->dentry != DENTRY_NOT_SET))
|
|
||||||
dput(od->dentry);
|
|
||||||
|
|
||||||
if (create_error && error == -ENOENT)
|
if (create_error && error == -ENOENT)
|
||||||
error = create_error;
|
error = create_error;
|
||||||
filp = ERR_PTR(error);
|
filp = ERR_PTR(error);
|
||||||
@ -2290,13 +2287,13 @@ static struct file *atomic_open(struct nameidata *nd, struct dentry *dentry,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (error) { /* returned 1, that is */
|
if (error) { /* returned 1, that is */
|
||||||
if (WARN_ON(od->dentry == DENTRY_NOT_SET)) {
|
if (WARN_ON(od->filp->f_path.dentry == DENTRY_NOT_SET)) {
|
||||||
filp = ERR_PTR(-EIO);
|
filp = ERR_PTR(-EIO);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (od->dentry) {
|
if (od->filp->f_path.dentry) {
|
||||||
dput(dentry);
|
dput(dentry);
|
||||||
dentry = od->dentry;
|
dentry = od->filp->f_path.dentry;
|
||||||
}
|
}
|
||||||
goto looked_up;
|
goto looked_up;
|
||||||
}
|
}
|
||||||
@ -2607,7 +2604,7 @@ static struct file *do_last(struct nameidata *nd, struct path *path,
|
|||||||
error = may_open(&nd->path, acc_mode, open_flag);
|
error = may_open(&nd->path, acc_mode, open_flag);
|
||||||
if (error)
|
if (error)
|
||||||
goto exit;
|
goto exit;
|
||||||
od->mnt = nd->path.mnt;
|
od->filp->f_path.mnt = nd->path.mnt;
|
||||||
filp = finish_open(od, nd->path.dentry, NULL, opened);
|
filp = finish_open(od, nd->path.dentry, NULL, opened);
|
||||||
if (IS_ERR(filp)) {
|
if (IS_ERR(filp)) {
|
||||||
if (filp == ERR_PTR(-EOPENSTALE))
|
if (filp == ERR_PTR(-EOPENSTALE))
|
||||||
|
@ -788,10 +788,10 @@ struct file *finish_open(struct opendata *od, struct dentry *dentry,
|
|||||||
struct file *res;
|
struct file *res;
|
||||||
BUG_ON(*opened & FILE_OPENED); /* once it's opened, it's opened */
|
BUG_ON(*opened & FILE_OPENED); /* once it's opened, it's opened */
|
||||||
|
|
||||||
mntget(od->mnt);
|
mntget(od->filp->f_path.mnt);
|
||||||
dget(dentry);
|
dget(dentry);
|
||||||
|
|
||||||
res = do_dentry_open(dentry, od->mnt, od->filp, open, current_cred());
|
res = do_dentry_open(dentry, od->filp->f_path.mnt, od->filp, open, current_cred());
|
||||||
if (!IS_ERR(res))
|
if (!IS_ERR(res))
|
||||||
*opened |= FILE_OPENED;
|
*opened |= FILE_OPENED;
|
||||||
|
|
||||||
@ -810,7 +810,7 @@ EXPORT_SYMBOL(finish_open);
|
|||||||
*/
|
*/
|
||||||
void finish_no_open(struct opendata *od, struct dentry *dentry)
|
void finish_no_open(struct opendata *od, struct dentry *dentry)
|
||||||
{
|
{
|
||||||
od->dentry = dentry;
|
od->filp->f_path.dentry = dentry;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(finish_no_open);
|
EXPORT_SYMBOL(finish_no_open);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user