Loading fs/internal.h +0 −2 Original line number Diff line number Diff line Loading @@ -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 { Loading fs/namei.c +6 −9 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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; } Loading Loading @@ -2607,7 +2604,7 @@ static struct file *do_last(struct nameidata *nd, struct path *path, 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)) Loading fs/open.c +3 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading Loading
fs/internal.h +0 −2 Original line number Diff line number Diff line Loading @@ -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 { Loading
fs/namei.c +6 −9 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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; } Loading Loading @@ -2607,7 +2604,7 @@ static struct file *do_last(struct nameidata *nd, struct path *path, 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)) Loading
fs/open.c +3 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading