Commit e6476c21 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by David S. Miller

net: remove bogus RCU annotations on socket.wq

We never use RCU protection for it, just a lot of cargo-cult
rcu_deference_protects calls.

Note that we do keep the kfree_rcu call for it, as the references through
struct sock are RCU protected and thus might require a grace period before
freeing.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Acked-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d46eeeaf
...@@ -114,7 +114,7 @@ struct socket { ...@@ -114,7 +114,7 @@ struct socket {
unsigned long flags; unsigned long flags;
struct socket_wq __rcu *wq; struct socket_wq *wq;
struct file *file; struct file *file;
struct sock *sk; struct sock *sk;
......
...@@ -1788,7 +1788,7 @@ static inline void sock_graft(struct sock *sk, struct socket *parent) ...@@ -1788,7 +1788,7 @@ static inline void sock_graft(struct sock *sk, struct socket *parent)
{ {
WARN_ON(parent->sk); WARN_ON(parent->sk);
write_lock_bh(&sk->sk_callback_lock); write_lock_bh(&sk->sk_callback_lock);
sk->sk_wq = parent->wq; rcu_assign_pointer(sk->sk_wq, parent->wq);
parent->sk = sk; parent->sk = sk;
sk_set_socket(sk, parent); sk_set_socket(sk, parent);
sk->sk_uid = SOCK_INODE(parent)->i_uid; sk->sk_uid = SOCK_INODE(parent)->i_uid;
......
...@@ -251,7 +251,7 @@ static struct inode *sock_alloc_inode(struct super_block *sb) ...@@ -251,7 +251,7 @@ static struct inode *sock_alloc_inode(struct super_block *sb)
init_waitqueue_head(&wq->wait); init_waitqueue_head(&wq->wait);
wq->fasync_list = NULL; wq->fasync_list = NULL;
wq->flags = 0; wq->flags = 0;
RCU_INIT_POINTER(ei->socket.wq, wq); ei->socket.wq = wq;
ei->socket.state = SS_UNCONNECTED; ei->socket.state = SS_UNCONNECTED;
ei->socket.flags = 0; ei->socket.flags = 0;
...@@ -265,11 +265,9 @@ static struct inode *sock_alloc_inode(struct super_block *sb) ...@@ -265,11 +265,9 @@ static struct inode *sock_alloc_inode(struct super_block *sb)
static void sock_destroy_inode(struct inode *inode) static void sock_destroy_inode(struct inode *inode)
{ {
struct socket_alloc *ei; struct socket_alloc *ei;
struct socket_wq *wq;
ei = container_of(inode, struct socket_alloc, vfs_inode); ei = container_of(inode, struct socket_alloc, vfs_inode);
wq = rcu_dereference_protected(ei->socket.wq, 1); kfree_rcu(ei->socket.wq, rcu);
kfree_rcu(wq, rcu);
kmem_cache_free(sock_inode_cachep, ei); kmem_cache_free(sock_inode_cachep, ei);
} }
...@@ -603,7 +601,7 @@ static void __sock_release(struct socket *sock, struct inode *inode) ...@@ -603,7 +601,7 @@ static void __sock_release(struct socket *sock, struct inode *inode)
module_put(owner); module_put(owner);
} }
if (rcu_dereference_protected(sock->wq, 1)->fasync_list) if (sock->wq->fasync_list)
pr_err("%s: fasync list not empty!\n", __func__); pr_err("%s: fasync list not empty!\n", __func__);
if (!sock->file) { if (!sock->file) {
...@@ -1181,7 +1179,7 @@ static int sock_fasync(int fd, struct file *filp, int on) ...@@ -1181,7 +1179,7 @@ static int sock_fasync(int fd, struct file *filp, int on)
return -EINVAL; return -EINVAL;
lock_sock(sk); lock_sock(sk);
wq = rcu_dereference_protected(sock->wq, lockdep_sock_is_held(sk)); wq = sock->wq;
fasync_helper(fd, filp, on, &wq->fasync_list); fasync_helper(fd, filp, on, &wq->fasync_list);
if (!wq->fasync_list) if (!wq->fasync_list)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment