mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-04 02:06:43 +07:00
do_last(): reorder and simplify a bit
bugger off on negatives a bit earlier, simplify the tests Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
05ef1c50e7
commit
6583fe22d1
22
fs/namei.c
22
fs/namei.c
@ -3118,6 +3118,7 @@ static int do_last(struct nameidata *nd,
|
|||||||
return error;
|
return error;
|
||||||
|
|
||||||
BUG_ON(nd->inode != dir->d_inode);
|
BUG_ON(nd->inode != dir->d_inode);
|
||||||
|
BUG_ON(nd->flags & LOOKUP_RCU);
|
||||||
} else {
|
} else {
|
||||||
/* create side of things */
|
/* create side of things */
|
||||||
/*
|
/*
|
||||||
@ -3171,12 +3172,6 @@ static int do_last(struct nameidata *nd,
|
|||||||
goto finish_open_created;
|
goto finish_open_created;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* create/update audit record if it already exists.
|
|
||||||
*/
|
|
||||||
if (d_is_positive(path.dentry))
|
|
||||||
audit_inode(nd->name, path.dentry, 0);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If atomic_open() acquired write access it is dropped now due to
|
* If atomic_open() acquired write access it is dropped now due to
|
||||||
* possible mount and symlink following (this might be optimized away if
|
* possible mount and symlink following (this might be optimized away if
|
||||||
@ -3187,6 +3182,16 @@ static int do_last(struct nameidata *nd,
|
|||||||
got_write = false;
|
got_write = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (unlikely(d_is_negative(path.dentry))) {
|
||||||
|
path_to_nameidata(&path, nd);
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* create/update audit record if it already exists.
|
||||||
|
*/
|
||||||
|
audit_inode(nd->name, path.dentry, 0);
|
||||||
|
|
||||||
if (unlikely((open_flag & (O_EXCL | O_CREAT)) == (O_EXCL | O_CREAT))) {
|
if (unlikely((open_flag & (O_EXCL | O_CREAT)) == (O_EXCL | O_CREAT))) {
|
||||||
path_to_nameidata(&path, nd);
|
path_to_nameidata(&path, nd);
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
@ -3196,12 +3201,7 @@ static int do_last(struct nameidata *nd,
|
|||||||
if (unlikely(error < 0))
|
if (unlikely(error < 0))
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
BUG_ON(nd->flags & LOOKUP_RCU);
|
|
||||||
seq = 0; /* out of RCU mode, so the value doesn't matter */
|
seq = 0; /* out of RCU mode, so the value doesn't matter */
|
||||||
if (unlikely(d_is_negative(path.dentry))) {
|
|
||||||
path_to_nameidata(&path, nd);
|
|
||||||
return -ENOENT;
|
|
||||||
}
|
|
||||||
inode = d_backing_inode(path.dentry);
|
inode = d_backing_inode(path.dentry);
|
||||||
finish_lookup:
|
finish_lookup:
|
||||||
if (nd->depth)
|
if (nd->depth)
|
||||||
|
Loading…
Reference in New Issue
Block a user