]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sdp: added lock_sock() to sdp_poll()
authorEldad Zinger <eldadz@mellanox.co.il>
Mon, 14 Jun 2010 09:01:31 +0000 (12:01 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:05:03 +0000 (05:05 -0700)
Signed-off-by: Eldad Zinger <eldadz@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp_main.c

index 4ce51568627c071d5227ea6567285d0698861a05..73db7d0bea7bf96e3d6e2c94f2f1919ec0773459 100644 (file)
@@ -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;
 }