mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 08:02:27 +02:00
simplify nfs_atomic_open_v23()
1) finish_no_open() takes ERR_PTR() as dentry now. 2) caller of ->atomic_open() will call d_lookup_done() itself, no need to do it here. Reviewed-by: NeilBrown <neil@brown.name> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
0b7543126e
commit
aae9db5739
16
fs/nfs/dir.c
16
fs/nfs/dir.c
|
|
@ -2260,7 +2260,7 @@ int nfs_atomic_open_v23(struct inode *dir, struct dentry *dentry,
|
|||
struct file *file, unsigned int open_flags,
|
||||
umode_t mode)
|
||||
{
|
||||
|
||||
struct dentry *res = NULL;
|
||||
/* Same as look+open from lookup_open(), but with different O_TRUNC
|
||||
* handling.
|
||||
*/
|
||||
|
|
@ -2275,21 +2275,15 @@ int nfs_atomic_open_v23(struct inode *dir, struct dentry *dentry,
|
|||
if (error)
|
||||
return error;
|
||||
return finish_open(file, dentry, NULL);
|
||||
} else if (d_in_lookup(dentry)) {
|
||||
}
|
||||
if (d_in_lookup(dentry)) {
|
||||
/* The only flags nfs_lookup considers are
|
||||
* LOOKUP_EXCL and LOOKUP_RENAME_TARGET, and
|
||||
* we want those to be zero so the lookup isn't skipped.
|
||||
*/
|
||||
struct dentry *res = nfs_lookup(dir, dentry, 0);
|
||||
|
||||
d_lookup_done(dentry);
|
||||
if (unlikely(res)) {
|
||||
if (IS_ERR(res))
|
||||
return PTR_ERR(res);
|
||||
return finish_no_open(file, res);
|
||||
}
|
||||
res = nfs_lookup(dir, dentry, 0);
|
||||
}
|
||||
return finish_no_open(file, NULL);
|
||||
return finish_no_open(file, res);
|
||||
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nfs_atomic_open_v23);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user