From: Faisal Latif <[EMAIL PROTECTED]>

RDMA/nes: Check cqp_avail_reqs is empty after locking the list

Between the first empty list check and locking the list, the list
can change.  Check it again after it is locked to make sure
the list is not empty.

Signed-off-by: Faisal Latif <[EMAIL PROTECTED]>
Signed-off-by: Chien Tung <[EMAIL PROTECTED]>
--
diff --git a/drivers/infiniband/hw/nes/nes_utils.c 
b/drivers/infiniband/hw/nes/nes_utils.c
index fb8cbd7..5611a73 100644
--- a/drivers/infiniband/hw/nes/nes_utils.c
+++ b/drivers/infiniband/hw/nes/nes_utils.c
@@ -540,11 +540,14 @@ struct nes_cqp_request *nes_get_cqp_request(struct 
nes_device *nesdev)
 
        if (!list_empty(&nesdev->cqp_avail_reqs)) {
                spin_lock_irqsave(&nesdev->cqp.lock, flags);
-               cqp_request = list_entry(nesdev->cqp_avail_reqs.next,
+               if (!list_empty(&nesdev->cqp_avail_reqs)) {
+                       cqp_request = list_entry(nesdev->cqp_avail_reqs.next,
                                struct nes_cqp_request, list);
-               list_del_init(&cqp_request->list);
+                       list_del_init(&cqp_request->list);
+               }
                spin_unlock_irqrestore(&nesdev->cqp.lock, flags);
-       } else {
+       }
+       if (cqp_request == NULL) {
                cqp_request = kzalloc(sizeof(struct nes_cqp_request), 
GFP_KERNEL);
                if (cqp_request) {
                        cqp_request->dynamic = 1;
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to