mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
[AF_UNIX]: Use lookup_create().
currently it opencodes it, but that's in the way of chaning the lookup_hash interface. I'd prefer to disallow modular af_unix over exporting lookup_create, but I'll leave that to you. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2fdba6b085
commit
f81a0bffa1
2 changed files with 4 additions and 25 deletions
|
@ -1580,6 +1580,7 @@ enoent:
|
|||
fail:
|
||||
return dentry;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(lookup_create);
|
||||
|
||||
int vfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
|
||||
{
|
||||
|
|
|
@ -770,33 +770,12 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
|||
err = path_lookup(sunaddr->sun_path, LOOKUP_PARENT, &nd);
|
||||
if (err)
|
||||
goto out_mknod_parent;
|
||||
/*
|
||||
* Yucky last component or no last component at all?
|
||||
* (foo/., foo/.., /////)
|
||||
*/
|
||||
err = -EEXIST;
|
||||
if (nd.last_type != LAST_NORM)
|
||||
goto out_mknod;
|
||||
/*
|
||||
* Lock the directory.
|
||||
*/
|
||||
down(&nd.dentry->d_inode->i_sem);
|
||||
/*
|
||||
* Do the final lookup.
|
||||
*/
|
||||
dentry = lookup_hash(&nd.last, nd.dentry);
|
||||
|
||||
dentry = lookup_create(&nd, 0);
|
||||
err = PTR_ERR(dentry);
|
||||
if (IS_ERR(dentry))
|
||||
goto out_mknod_unlock;
|
||||
err = -ENOENT;
|
||||
/*
|
||||
* Special case - lookup gave negative, but... we had foo/bar/
|
||||
* From the vfs_mknod() POV we just have a negative dentry -
|
||||
* all is fine. Let's be bastards - you had / on the end, you've
|
||||
* been asking for (non-existent) directory. -ENOENT for you.
|
||||
*/
|
||||
if (nd.last.name[nd.last.len] && !dentry->d_inode)
|
||||
goto out_mknod_dput;
|
||||
|
||||
/*
|
||||
* All right, let's create it.
|
||||
*/
|
||||
|
@ -845,7 +824,6 @@ out_mknod_dput:
|
|||
dput(dentry);
|
||||
out_mknod_unlock:
|
||||
up(&nd.dentry->d_inode->i_sem);
|
||||
out_mknod:
|
||||
path_release(&nd);
|
||||
out_mknod_parent:
|
||||
if (err==-EEXIST)
|
||||
|
|
Loading…
Reference in a new issue