staging/rdma/hfi1: Detect SDMA transmission error early
authorMitko Haralanov <mitko.haralanov@intel.com>
Tue, 8 Dec 2015 22:10:12 +0000 (17:10 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 21 Dec 2015 21:57:55 +0000 (13:57 -0800)
It is possible for an SDMA transmission error to happen
during the processing of an user SDMA transfer. In that
case it is better to detect it early and abort any further
attempts to send more packets.

Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Mitko Haralanov <mitko.haralanov@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rdma/hfi1/user_sdma.c

index d03c810b620676f9151b2ef79ba21475e25dda0d..d3de771a0770860b7cbc678654300cdd2a05e690 100644 (file)
@@ -774,6 +774,12 @@ static int user_sdma_send_pkts(struct user_sdma_request *req, unsigned maxpkts)
 
        pq = req->pq;
 
+       /* If tx completion has reported an error, we are done. */
+       if (test_bit(SDMA_REQ_HAS_ERROR, &req->flags)) {
+               set_bit(SDMA_REQ_DONE_ERROR, &req->flags);
+               return -EFAULT;
+       }
+
        /*
         * Check if we might have sent the entire request already
         */