diff options
author | Sagi Grimberg <sagi@grimberg.me> | 2017-03-08 15:00:52 -0500 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2017-03-24 16:40:31 -0400 |
commit | 86f46aba8d1ac3ed0904542158a9b9cb9c7a143c (patch) | |
tree | e1eaa11ea1e04336059b0b9cba78389bf7e5f03f | |
parent | 871a8623d3b40221ad1103aff715dfee0aa4dacf (diff) |
IB/core: Protect against self-requeue of a cq work item
We need to make sure that the cq work item does not
run when we are destroying the cq. Unlike flush_work,
cancel_work_sync protects against self-requeue of the
work item (which we can do in ib_cq_poll_work).
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com>--
Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r-- | drivers/infiniband/core/cq.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/infiniband/core/cq.c b/drivers/infiniband/core/cq.c index e95510117a6d..2746d2eb3d52 100644 --- a/drivers/infiniband/core/cq.c +++ b/drivers/infiniband/core/cq.c | |||
@@ -196,7 +196,7 @@ void ib_free_cq(struct ib_cq *cq) | |||
196 | irq_poll_disable(&cq->iop); | 196 | irq_poll_disable(&cq->iop); |
197 | break; | 197 | break; |
198 | case IB_POLL_WORKQUEUE: | 198 | case IB_POLL_WORKQUEUE: |
199 | flush_work(&cq->work); | 199 | cancel_work_sync(&cq->work); |
200 | break; | 200 | break; |
201 | default: | 201 | default: |
202 | WARN_ON_ONCE(1); | 202 | WARN_ON_ONCE(1); |