]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sdp: if can't recv or send, and the qp is not active, return -EPIPE instead of 0
authorEldad Zinger <eldadz@mellanox.co.il>
Wed, 7 Jul 2010 15:48:27 +0000 (18:48 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:05:09 +0000 (05:05 -0700)
This fixes an endles loop problem where userspace programs are looping on recv
or send until all required bytes processed or until an error returned.

Signed-off-by: Eldad Zinger <eldadz@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp_main.c

index f1d148aff5338449b7ab9a8fb56df33662745a6d..d8bfe308e13efaee79774ac0c12962b25463e036 100644 (file)
@@ -2120,6 +2120,12 @@ out_err:
 fin:
        posts_handler_put(ssk);
 
+       if (!err && !ssk->qp_active) {
+               err = -EPIPE;
+               sdp_set_error(sk, err);
+               sdp_dbg(sk, "can't send anymore\n");
+       }
+
        release_sock(sk);
 
        return err;
@@ -2507,6 +2513,12 @@ out:
        posts_handler_put(ssk);
 
        sdp_auto_moderation(ssk);
+       
+       if (!err && !ssk->qp_active) {
+               err = -EPIPE;
+               sdp_set_error(sk, err);
+               sdp_dbg(sk, "data won't be available anymore\n");
+       }
 
        release_sock(sk);
        sdp_dbg_data(sk, "recvmsg finished. ret = %d\n", err);