forked from Minki/linux
do_last(): take fput() on error after opening to out:
make it conditional on *opened & FILE_OPENED; in addition to getting rid of exit_fput: thing, it simplifies atomic_open() cleanup on may_open() failure. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
47f9dbd387
commit
fe9ec8291f
22
fs/namei.c
22
fs/namei.c
@ -2919,9 +2919,6 @@ static int atomic_open(struct nameidata *nd, struct dentry *dentry,
|
|||||||
acc_mode = 0;
|
acc_mode = 0;
|
||||||
}
|
}
|
||||||
error = may_open(&file->f_path, acc_mode, open_flag);
|
error = may_open(&file->f_path, acc_mode, open_flag);
|
||||||
if (error)
|
|
||||||
fput(file);
|
|
||||||
|
|
||||||
out:
|
out:
|
||||||
dput(dentry);
|
dput(dentry);
|
||||||
return error;
|
return error;
|
||||||
@ -3225,18 +3222,13 @@ finish_open_created:
|
|||||||
}
|
}
|
||||||
opened:
|
opened:
|
||||||
error = open_check_o_direct(file);
|
error = open_check_o_direct(file);
|
||||||
if (error)
|
if (!error)
|
||||||
goto exit_fput;
|
error = ima_file_check(file, op->acc_mode, *opened);
|
||||||
error = ima_file_check(file, op->acc_mode, *opened);
|
if (!error && will_truncate)
|
||||||
if (error)
|
|
||||||
goto exit_fput;
|
|
||||||
|
|
||||||
if (will_truncate) {
|
|
||||||
error = handle_truncate(file);
|
error = handle_truncate(file);
|
||||||
if (error)
|
|
||||||
goto exit_fput;
|
|
||||||
}
|
|
||||||
out:
|
out:
|
||||||
|
if (unlikely(error) && (*opened & FILE_OPENED))
|
||||||
|
fput(file);
|
||||||
if (unlikely(error > 0)) {
|
if (unlikely(error > 0)) {
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
error = -EINVAL;
|
error = -EINVAL;
|
||||||
@ -3246,10 +3238,6 @@ out:
|
|||||||
path_put(&save_parent);
|
path_put(&save_parent);
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
exit_fput:
|
|
||||||
fput(file);
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
stale_open:
|
stale_open:
|
||||||
/* If no saved parent or already retried then can't retry */
|
/* If no saved parent or already retried then can't retry */
|
||||||
if (!save_parent.dentry || retried)
|
if (!save_parent.dentry || retried)
|
||||||
|
Loading…
Reference in New Issue
Block a user