diff options
author | Faisal Latif <faisal.latif@intel.com> | 2008-11-21 20:50:55 -0600 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2008-12-05 11:00:24 -0800 |
commit | f3181a10e13ac55e18958d7c48cba6f925c71483 (patch) | |
tree | 675ab6e91c6c5e4fa7e7d479fbdee04038fd75e6 /drivers/infiniband | |
parent | abb77256761bc3ee7a21cc28f6f12a938964e83f (diff) | |
download | kernel_samsung_tuna-f3181a10e13ac55e18958d7c48cba6f925c71483.zip kernel_samsung_tuna-f3181a10e13ac55e18958d7c48cba6f925c71483.tar.gz kernel_samsung_tuna-f3181a10e13ac55e18958d7c48cba6f925c71483.tar.bz2 |
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
still not empty.
Signed-off-by: Faisal Latif <faisal.latif@intel.com>
Signed-off-by: Chien Tung <chien.tin.tung@intel.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/hw/nes/nes_utils.c | 9 |
1 files changed, 6 insertions, 3 deletions
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; |