Skip to content

Commit

Permalink
vfs: nameidata_to_filp(): don't throw away file on error
Browse files Browse the repository at this point in the history
If open fails, don't put the file.  This allows it to be reused if open needs to
be retried.

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
  • Loading branch information
Miklos Szeredi authored and Al Viro committed Jun 1, 2012
1 parent 91daee9 commit 50ee93a
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions fs/open.c
Original file line number Diff line number Diff line change
Expand Up @@ -824,10 +824,11 @@ struct file *nameidata_to_filp(struct nameidata *nd)

/* Pick up the filp from the open intent */
filp = nd->intent.open.file;
nd->intent.open.file = NULL;

/* Has the filesystem initialised the file for us? */
if (filp->f_path.dentry == NULL) {
if (filp->f_path.dentry != NULL) {
nd->intent.open.file = NULL;
} else {
struct file *res;

path_get(&nd->path);
Expand All @@ -836,6 +837,7 @@ struct file *nameidata_to_filp(struct nameidata *nd)
if (!IS_ERR(res)) {
int error;

nd->intent.open.file = NULL;
BUG_ON(res != filp);

error = open_check_o_direct(filp);
Expand All @@ -844,7 +846,7 @@ struct file *nameidata_to_filp(struct nameidata *nd)
filp = ERR_PTR(error);
}
} else {
put_filp(filp);
/* Allow nd->intent.open.file to be recycled */
filp = res;
}
}
Expand Down

0 comments on commit 50ee93a

Please sign in to comment.