ncp_lookup(): use d_splice_alias()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
293542d8e5
Коммит
1c5fedbb50
|
@ -823,12 +823,11 @@ static struct dentry *ncp_lookup(struct inode *dir, struct dentry *dentry, unsig
|
|||
struct ncp_server *server = NCP_SERVER(dir);
|
||||
struct inode *inode = NULL;
|
||||
struct ncp_entry_info finfo;
|
||||
int error, res, len;
|
||||
int res, len;
|
||||
__u8 __name[NCP_MAXPATHLEN + 1];
|
||||
|
||||
error = -EIO;
|
||||
if (!ncp_conn_valid(server))
|
||||
goto finished;
|
||||
return ERR_PTR(-EIO);
|
||||
|
||||
ncp_vdbg("server lookup for %pd2\n", dentry);
|
||||
|
||||
|
@ -847,31 +846,20 @@ static struct dentry *ncp_lookup(struct inode *dir, struct dentry *dentry, unsig
|
|||
res = ncp_obtain_info(server, dir, __name, &(finfo.i));
|
||||
}
|
||||
ncp_vdbg("looked for %pd2, res=%d\n", dentry, res);
|
||||
/*
|
||||
* If we didn't find an entry, make a negative dentry.
|
||||
*/
|
||||
if (res)
|
||||
goto add_entry;
|
||||
|
||||
/*
|
||||
* Create an inode for the entry.
|
||||
*/
|
||||
finfo.opened = 0;
|
||||
finfo.ino = iunique(dir->i_sb, 2);
|
||||
finfo.volume = finfo.i.volNumber;
|
||||
error = -EACCES;
|
||||
inode = ncp_iget(dir->i_sb, &finfo);
|
||||
|
||||
if (inode) {
|
||||
ncp_new_dentry(dentry);
|
||||
add_entry:
|
||||
d_add(dentry, inode);
|
||||
error = 0;
|
||||
if (!res) {
|
||||
/*
|
||||
* Entry found; create an inode for it.
|
||||
*/
|
||||
finfo.opened = 0;
|
||||
finfo.ino = iunique(dir->i_sb, 2);
|
||||
finfo.volume = finfo.i.volNumber;
|
||||
inode = ncp_iget(dir->i_sb, &finfo);
|
||||
if (unlikely(!inode))
|
||||
inode = ERR_PTR(-EACCES);
|
||||
else
|
||||
ncp_new_dentry(dentry);
|
||||
}
|
||||
|
||||
finished:
|
||||
ncp_vdbg("result=%d\n", error);
|
||||
return ERR_PTR(error);
|
||||
return d_splice_alias(inode, dentry);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Загрузка…
Ссылка в новой задаче