From: Eldad Zinger Date: Mon, 14 Jun 2010 09:01:31 +0000 (+0300) Subject: sdp: added lock_sock() to sdp_poll() X-Git-Tag: v4.1.12-92~264^2~5^2~169 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=fc93aab7da3377ea7cabbc4509a8c63335a0a2f5;p=users%2Fjedix%2Flinux-maple.git sdp: added lock_sock() to sdp_poll() Signed-off-by: Eldad Zinger --- diff --git a/drivers/infiniband/ulp/sdp/sdp_main.c b/drivers/infiniband/ulp/sdp/sdp_main.c index 4ce51568627c0..73db7d0bea7bf 100644 --- a/drivers/infiniband/ulp/sdp/sdp_main.c +++ b/drivers/infiniband/ulp/sdp/sdp_main.c @@ -2461,7 +2461,7 @@ out: sdp_auto_moderation(ssk); release_sock(sk); - sdp_dbg_data(sk, "recvmsg finished. ret = %d\n", err); + sdp_dbg_data(sk, "recvmsg finished. ret = %d\n", err); return err; recv_urg: @@ -2541,19 +2541,18 @@ static inline unsigned int sdp_listen_poll(const struct sock *sk) static unsigned int sdp_poll(struct file *file, struct socket *socket, struct poll_table_struct *wait) { - unsigned int mask; - struct sock *sk = socket->sk; - struct sdp_sock *ssk = sdp_sk(sk); + unsigned int mask; + struct sock *sk = socket->sk; sdp_dbg_data(sk, "%s\n", __func__); - if (sk->sk_state == TCP_ESTABLISHED) { - sdp_prf(sk, NULL, "polling"); - if (poll_recv_cq(sk)) { - sdp_arm_rx_cq(sk); - } - } + lock_sock(sk); + if (sk->sk_state == TCP_ESTABLISHED) { + sdp_prf(sk, NULL, "polling"); + if (poll_recv_cq(sk)) + sdp_arm_rx_cq(sk); + } mask = datagram_poll(file, socket, wait); /* @@ -2565,11 +2564,15 @@ static unsigned int sdp_poll(struct file *file, struct socket *socket, /* TODO: Slightly ugly: it would be nicer if there was function * like datagram_poll that didn't include poll_wait, * then we could reverse the order. */ - if (sk->sk_state == TCP_LISTEN) - return sdp_listen_poll(sk); + if (sk->sk_state == TCP_LISTEN) { + mask = sdp_listen_poll(sk); + goto out; + } - if (ssk->urg_data & TCP_URG_VALID) + if (sdp_sk(sk)->urg_data & TCP_URG_VALID) mask |= POLLPRI; +out: + release_sock(sk); return mask; }