mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-28 10:04:14 +00:00
switch unix_sock to struct path
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
38eff28926
commit
40ffe67d2e
4 changed files with 19 additions and 29 deletions
|
@ -49,8 +49,7 @@ struct unix_sock {
|
||||||
/* WARNING: sk has to be the first member */
|
/* WARNING: sk has to be the first member */
|
||||||
struct sock sk;
|
struct sock sk;
|
||||||
struct unix_address *addr;
|
struct unix_address *addr;
|
||||||
struct dentry *dentry;
|
struct path path;
|
||||||
struct vfsmount *mnt;
|
|
||||||
struct mutex readlock;
|
struct mutex readlock;
|
||||||
struct sock *peer;
|
struct sock *peer;
|
||||||
struct sock *other;
|
struct sock *other;
|
||||||
|
|
|
@ -293,7 +293,7 @@ static struct sock *unix_find_socket_byinode(struct inode *i)
|
||||||
spin_lock(&unix_table_lock);
|
spin_lock(&unix_table_lock);
|
||||||
sk_for_each(s, node,
|
sk_for_each(s, node,
|
||||||
&unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) {
|
&unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) {
|
||||||
struct dentry *dentry = unix_sk(s)->dentry;
|
struct dentry *dentry = unix_sk(s)->path.dentry;
|
||||||
|
|
||||||
if (dentry && dentry->d_inode == i) {
|
if (dentry && dentry->d_inode == i) {
|
||||||
sock_hold(s);
|
sock_hold(s);
|
||||||
|
@ -377,8 +377,7 @@ static void unix_sock_destructor(struct sock *sk)
|
||||||
static int unix_release_sock(struct sock *sk, int embrion)
|
static int unix_release_sock(struct sock *sk, int embrion)
|
||||||
{
|
{
|
||||||
struct unix_sock *u = unix_sk(sk);
|
struct unix_sock *u = unix_sk(sk);
|
||||||
struct dentry *dentry;
|
struct path path;
|
||||||
struct vfsmount *mnt;
|
|
||||||
struct sock *skpair;
|
struct sock *skpair;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
int state;
|
int state;
|
||||||
|
@ -389,10 +388,9 @@ static int unix_release_sock(struct sock *sk, int embrion)
|
||||||
unix_state_lock(sk);
|
unix_state_lock(sk);
|
||||||
sock_orphan(sk);
|
sock_orphan(sk);
|
||||||
sk->sk_shutdown = SHUTDOWN_MASK;
|
sk->sk_shutdown = SHUTDOWN_MASK;
|
||||||
dentry = u->dentry;
|
path = u->path;
|
||||||
u->dentry = NULL;
|
u->path.dentry = NULL;
|
||||||
mnt = u->mnt;
|
u->path.mnt = NULL;
|
||||||
u->mnt = NULL;
|
|
||||||
state = sk->sk_state;
|
state = sk->sk_state;
|
||||||
sk->sk_state = TCP_CLOSE;
|
sk->sk_state = TCP_CLOSE;
|
||||||
unix_state_unlock(sk);
|
unix_state_unlock(sk);
|
||||||
|
@ -425,10 +423,8 @@ static int unix_release_sock(struct sock *sk, int embrion)
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dentry) {
|
if (path.dentry)
|
||||||
dput(dentry);
|
path_put(&path);
|
||||||
mntput(mnt);
|
|
||||||
}
|
|
||||||
|
|
||||||
sock_put(sk);
|
sock_put(sk);
|
||||||
|
|
||||||
|
@ -628,8 +624,8 @@ static struct sock *unix_create1(struct net *net, struct socket *sock)
|
||||||
sk->sk_max_ack_backlog = net->unx.sysctl_max_dgram_qlen;
|
sk->sk_max_ack_backlog = net->unx.sysctl_max_dgram_qlen;
|
||||||
sk->sk_destruct = unix_sock_destructor;
|
sk->sk_destruct = unix_sock_destructor;
|
||||||
u = unix_sk(sk);
|
u = unix_sk(sk);
|
||||||
u->dentry = NULL;
|
u->path.dentry = NULL;
|
||||||
u->mnt = NULL;
|
u->path.mnt = NULL;
|
||||||
spin_lock_init(&u->lock);
|
spin_lock_init(&u->lock);
|
||||||
atomic_long_set(&u->inflight, 0);
|
atomic_long_set(&u->inflight, 0);
|
||||||
INIT_LIST_HEAD(&u->link);
|
INIT_LIST_HEAD(&u->link);
|
||||||
|
@ -789,9 +785,9 @@ static struct sock *unix_find_other(struct net *net,
|
||||||
u = unix_find_socket_byname(net, sunname, len, type, hash);
|
u = unix_find_socket_byname(net, sunname, len, type, hash);
|
||||||
if (u) {
|
if (u) {
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
dentry = unix_sk(u)->dentry;
|
dentry = unix_sk(u)->path.dentry;
|
||||||
if (dentry)
|
if (dentry)
|
||||||
touch_atime(unix_sk(u)->mnt, dentry);
|
touch_atime(unix_sk(u)->path.mnt, dentry);
|
||||||
} else
|
} else
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
@ -897,8 +893,7 @@ out_mknod_drop_write:
|
||||||
list = &unix_socket_table[addr->hash];
|
list = &unix_socket_table[addr->hash];
|
||||||
} else {
|
} else {
|
||||||
list = &unix_socket_table[dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1)];
|
list = &unix_socket_table[dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1)];
|
||||||
u->dentry = path.dentry;
|
u->path = path;
|
||||||
u->mnt = path.mnt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = 0;
|
err = 0;
|
||||||
|
@ -1180,9 +1175,9 @@ restart:
|
||||||
atomic_inc(&otheru->addr->refcnt);
|
atomic_inc(&otheru->addr->refcnt);
|
||||||
newu->addr = otheru->addr;
|
newu->addr = otheru->addr;
|
||||||
}
|
}
|
||||||
if (otheru->dentry) {
|
if (otheru->path.dentry) {
|
||||||
newu->dentry = dget(otheru->dentry);
|
path_get(&otheru->path);
|
||||||
newu->mnt = mntget(otheru->mnt);
|
newu->path = otheru->path;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set credentials */
|
/* Set credentials */
|
||||||
|
|
|
@ -29,7 +29,7 @@ rtattr_failure:
|
||||||
|
|
||||||
static int sk_diag_dump_vfs(struct sock *sk, struct sk_buff *nlskb)
|
static int sk_diag_dump_vfs(struct sock *sk, struct sk_buff *nlskb)
|
||||||
{
|
{
|
||||||
struct dentry *dentry = unix_sk(sk)->dentry;
|
struct dentry *dentry = unix_sk(sk)->path.dentry;
|
||||||
struct unix_diag_vfs *uv;
|
struct unix_diag_vfs *uv;
|
||||||
|
|
||||||
if (dentry) {
|
if (dentry) {
|
||||||
|
|
|
@ -313,12 +313,8 @@ static void dump_common_audit_data(struct audit_buffer *ab,
|
||||||
}
|
}
|
||||||
case AF_UNIX:
|
case AF_UNIX:
|
||||||
u = unix_sk(sk);
|
u = unix_sk(sk);
|
||||||
if (u->dentry) {
|
if (u->path.dentry) {
|
||||||
struct path path = {
|
audit_log_d_path(ab, " path=", &u->path);
|
||||||
.dentry = u->dentry,
|
|
||||||
.mnt = u->mnt
|
|
||||||
};
|
|
||||||
audit_log_d_path(ab, " path=", &path);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!u->addr)
|
if (!u->addr)
|
||||||
|
|
Loading…
Add table
Reference in a new issue