aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/internal.h2
-rw-r--r--fs/namei.c15
-rw-r--r--fs/open.c6
3 files changed, 9 insertions, 14 deletions
diff --git a/fs/internal.h b/fs/internal.h
index ae69a3b150d7..09003a02292d 100644
--- a/fs/internal.h
+++ b/fs/internal.h
@@ -83,8 +83,6 @@ extern struct super_block *user_get_super(dev_t);
* open.c
*/
struct opendata {
- struct dentry *dentry;
- struct vfsmount *mnt;
struct file *filp;
};
struct open_flags {
diff --git a/fs/namei.c b/fs/namei.c
index f0dae0057ec9..af83ede92a4f 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -2269,14 +2269,11 @@ static struct file *atomic_open(struct nameidata *nd, struct dentry *dentry,
if (nd->flags & LOOKUP_DIRECTORY)
open_flag |= O_DIRECTORY;
- od->dentry = DENTRY_NOT_SET;
- od->mnt = nd->path.mnt;
+ od->filp->f_path.dentry = DENTRY_NOT_SET;
+ od->filp->f_path.mnt = nd->path.mnt;
error = dir->i_op->atomic_open(dir, dentry, od, open_flag, mode,
opened);
if (error < 0) {
- if (WARN_ON(od->dentry != DENTRY_NOT_SET))
- dput(od->dentry);
-
if (create_error && error == -ENOENT)
error = create_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 (WARN_ON(od->dentry == DENTRY_NOT_SET)) {
+ if (WARN_ON(od->filp->f_path.dentry == DENTRY_NOT_SET)) {
filp = ERR_PTR(-EIO);
goto out;
}
- if (od->dentry) {
+ if (od->filp->f_path.dentry) {
dput(dentry);
- dentry = od->dentry;
+ dentry = od->filp->f_path.dentry;
}
goto looked_up;
}
@@ -2607,7 +2604,7 @@ finish_open_created:
error = may_open(&nd->path, acc_mode, open_flag);
if (error)
goto exit;
- od->mnt = nd->path.mnt;
+ od->filp->f_path.mnt = nd->path.mnt;
filp = finish_open(od, nd->path.dentry, NULL, opened);
if (IS_ERR(filp)) {
if (filp == ERR_PTR(-EOPENSTALE))
diff --git a/fs/open.c b/fs/open.c
index c87f98201c29..2b1654d8bfbd 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -788,10 +788,10 @@ struct file *finish_open(struct opendata *od, struct dentry *dentry,
struct file *res;
BUG_ON(*opened & FILE_OPENED); /* once it's opened, it's opened */
- mntget(od->mnt);
+ mntget(od->filp->f_path.mnt);
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))
*opened |= FILE_OPENED;
@@ -810,7 +810,7 @@ EXPORT_SYMBOL(finish_open);
*/
void finish_no_open(struct opendata *od, struct dentry *dentry)
{
- od->dentry = dentry;
+ od->filp->f_path.dentry = dentry;
}
EXPORT_SYMBOL(finish_no_open);