diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-03-14 21:54:32 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-03-20 21:29:41 -0400 |
commit | 40ffe67d2e89c7a475421d007becc11a2f88ea3d (patch) | |
tree | 5373e71b18895b9ffd8370a88aec6c54438240a0 | |
parent | 38eff2892628fa5c4fc8962a17b7296f42833ebe (diff) |
switch unix_sock to struct path
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | include/net/af_unix.h | 3 | ||||
-rw-r--r-- | net/unix/af_unix.c | 35 | ||||
-rw-r--r-- | net/unix/diag.c | 2 | ||||
-rw-r--r-- | security/lsm_audit.c | 8 |
4 files changed, 19 insertions, 29 deletions
diff --git a/include/net/af_unix.h b/include/net/af_unix.h index 5a4e29b168c9..ca68e2cef230 100644 --- a/include/net/af_unix.h +++ b/include/net/af_unix.h | |||
@@ -49,8 +49,7 @@ struct unix_sock { | |||
49 | /* WARNING: sk has to be the first member */ | 49 | /* WARNING: sk has to be the first member */ |
50 | struct sock sk; | 50 | struct sock sk; |
51 | struct unix_address *addr; | 51 | struct unix_address *addr; |
52 | struct dentry *dentry; | 52 | struct path path; |
53 | struct vfsmount *mnt; | ||
54 | struct mutex readlock; | 53 | struct mutex readlock; |
55 | struct sock *peer; | 54 | struct sock *peer; |
56 | struct sock *other; | 55 | struct sock *other; |
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 85d3bb7490aa..ef4b780ef63d 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -293,7 +293,7 @@ static struct sock *unix_find_socket_byinode(struct inode *i) | |||
293 | spin_lock(&unix_table_lock); | 293 | spin_lock(&unix_table_lock); |
294 | sk_for_each(s, node, | 294 | sk_for_each(s, node, |
295 | &unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) { | 295 | &unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) { |
296 | struct dentry *dentry = unix_sk(s)->dentry; | 296 | struct dentry *dentry = unix_sk(s)->path.dentry; |
297 | 297 | ||
298 | if (dentry && dentry->d_inode == i) { | 298 | if (dentry && dentry->d_inode == i) { |
299 | sock_hold(s); | 299 | sock_hold(s); |
@@ -377,8 +377,7 @@ static void unix_sock_destructor(struct sock *sk) | |||
377 | static int unix_release_sock(struct sock *sk, int embrion) | 377 | static int unix_release_sock(struct sock *sk, int embrion) |
378 | { | 378 | { |
379 | struct unix_sock *u = unix_sk(sk); | 379 | struct unix_sock *u = unix_sk(sk); |
380 | struct dentry *dentry; | 380 | struct path path; |
381 | struct vfsmount *mnt; | ||
382 | struct sock *skpair; | 381 | struct sock *skpair; |
383 | struct sk_buff *skb; | 382 | struct sk_buff *skb; |
384 | int state; | 383 | int state; |
@@ -389,10 +388,9 @@ static int unix_release_sock(struct sock *sk, int embrion) | |||
389 | unix_state_lock(sk); | 388 | unix_state_lock(sk); |
390 | sock_orphan(sk); | 389 | sock_orphan(sk); |
391 | sk->sk_shutdown = SHUTDOWN_MASK; | 390 | sk->sk_shutdown = SHUTDOWN_MASK; |
392 | dentry = u->dentry; | 391 | path = u->path; |
393 | u->dentry = NULL; | 392 | u->path.dentry = NULL; |
394 | mnt = u->mnt; | 393 | u->path.mnt = NULL; |
395 | u->mnt = NULL; | ||
396 | state = sk->sk_state; | 394 | state = sk->sk_state; |
397 | sk->sk_state = TCP_CLOSE; | 395 | sk->sk_state = TCP_CLOSE; |
398 | unix_state_unlock(sk); | 396 | unix_state_unlock(sk); |
@@ -425,10 +423,8 @@ static int unix_release_sock(struct sock *sk, int embrion) | |||
425 | kfree_skb(skb); | 423 | kfree_skb(skb); |
426 | } | 424 | } |
427 | 425 | ||
428 | if (dentry) { | 426 | if (path.dentry) |
429 | dput(dentry); | 427 | path_put(&path); |
430 | mntput(mnt); | ||
431 | } | ||
432 | 428 | ||
433 | sock_put(sk); | 429 | sock_put(sk); |
434 | 430 | ||
@@ -628,8 +624,8 @@ static struct sock *unix_create1(struct net *net, struct socket *sock) | |||
628 | sk->sk_max_ack_backlog = net->unx.sysctl_max_dgram_qlen; | 624 | sk->sk_max_ack_backlog = net->unx.sysctl_max_dgram_qlen; |
629 | sk->sk_destruct = unix_sock_destructor; | 625 | sk->sk_destruct = unix_sock_destructor; |
630 | u = unix_sk(sk); | 626 | u = unix_sk(sk); |
631 | u->dentry = NULL; | 627 | u->path.dentry = NULL; |
632 | u->mnt = NULL; | 628 | u->path.mnt = NULL; |
633 | spin_lock_init(&u->lock); | 629 | spin_lock_init(&u->lock); |
634 | atomic_long_set(&u->inflight, 0); | 630 | atomic_long_set(&u->inflight, 0); |
635 | INIT_LIST_HEAD(&u->link); | 631 | INIT_LIST_HEAD(&u->link); |
@@ -789,9 +785,9 @@ static struct sock *unix_find_other(struct net *net, | |||
789 | u = unix_find_socket_byname(net, sunname, len, type, hash); | 785 | u = unix_find_socket_byname(net, sunname, len, type, hash); |
790 | if (u) { | 786 | if (u) { |
791 | struct dentry *dentry; | 787 | struct dentry *dentry; |
792 | dentry = unix_sk(u)->dentry; | 788 | dentry = unix_sk(u)->path.dentry; |
793 | if (dentry) | 789 | if (dentry) |
794 | touch_atime(unix_sk(u)->mnt, dentry); | 790 | touch_atime(unix_sk(u)->path.mnt, dentry); |
795 | } else | 791 | } else |
796 | goto fail; | 792 | goto fail; |
797 | } | 793 | } |
@@ -897,8 +893,7 @@ out_mknod_drop_write: | |||
897 | list = &unix_socket_table[addr->hash]; | 893 | list = &unix_socket_table[addr->hash]; |
898 | } else { | 894 | } else { |
899 | list = &unix_socket_table[dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1)]; | 895 | list = &unix_socket_table[dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1)]; |
900 | u->dentry = path.dentry; | 896 | u->path = path; |
901 | u->mnt = path.mnt; | ||
902 | } | 897 | } |
903 | 898 | ||
904 | err = 0; | 899 | err = 0; |
@@ -1180,9 +1175,9 @@ restart: | |||
1180 | atomic_inc(&otheru->addr->refcnt); | 1175 | atomic_inc(&otheru->addr->refcnt); |
1181 | newu->addr = otheru->addr; | 1176 | newu->addr = otheru->addr; |
1182 | } | 1177 | } |
1183 | if (otheru->dentry) { | 1178 | if (otheru->path.dentry) { |
1184 | newu->dentry = dget(otheru->dentry); | 1179 | path_get(&otheru->path); |
1185 | newu->mnt = mntget(otheru->mnt); | 1180 | newu->path = otheru->path; |
1186 | } | 1181 | } |
1187 | 1182 | ||
1188 | /* Set credentials */ | 1183 | /* Set credentials */ |
diff --git a/net/unix/diag.c b/net/unix/diag.c index 6b7697fd911b..ffd86518e646 100644 --- a/net/unix/diag.c +++ b/net/unix/diag.c | |||
@@ -29,7 +29,7 @@ rtattr_failure: | |||
29 | 29 | ||
30 | static int sk_diag_dump_vfs(struct sock *sk, struct sk_buff *nlskb) | 30 | static int sk_diag_dump_vfs(struct sock *sk, struct sk_buff *nlskb) |
31 | { | 31 | { |
32 | struct dentry *dentry = unix_sk(sk)->dentry; | 32 | struct dentry *dentry = unix_sk(sk)->path.dentry; |
33 | struct unix_diag_vfs *uv; | 33 | struct unix_diag_vfs *uv; |
34 | 34 | ||
35 | if (dentry) { | 35 | if (dentry) { |
diff --git a/security/lsm_audit.c b/security/lsm_audit.c index 293b8c45b1d1..8b8f0902f6e5 100644 --- a/security/lsm_audit.c +++ b/security/lsm_audit.c | |||
@@ -313,12 +313,8 @@ static void dump_common_audit_data(struct audit_buffer *ab, | |||
313 | } | 313 | } |
314 | case AF_UNIX: | 314 | case AF_UNIX: |
315 | u = unix_sk(sk); | 315 | u = unix_sk(sk); |
316 | if (u->dentry) { | 316 | if (u->path.dentry) { |
317 | struct path path = { | 317 | audit_log_d_path(ab, " path=", &u->path); |
318 | .dentry = u->dentry, | ||
319 | .mnt = u->mnt | ||
320 | }; | ||
321 | audit_log_d_path(ab, " path=", &path); | ||
322 | break; | 318 | break; |
323 | } | 319 | } |
324 | if (!u->addr) | 320 | if (!u->addr) |