mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 15:11:31 +00:00
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>
This commit is contained in:
parent
abb7725676
commit
f3181a10e1
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user