| From 5331fad6d171a564515b2f5e43eef1f1fa63c2a8 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 15 Feb 2022 13:05:11 -0800 |
| Subject: RDMA/ib_srp: Fix a deadlock |
| |
| From: Bart Van Assche <bvanassche@acm.org> |
| |
| [ Upstream commit 081bdc9fe05bb23248f5effb6f811da3da4b8252 ] |
| |
| Remove the flush_workqueue(system_long_wq) call since flushing |
| system_long_wq is deadlock-prone and since that call is redundant with a |
| preceding cancel_work_sync() |
| |
| Link: https://lore.kernel.org/r/20220215210511.28303-3-bvanassche@acm.org |
| Fixes: ef6c49d87c34 ("IB/srp: Eliminate state SRP_TARGET_DEAD") |
| Reported-by: syzbot+831661966588c802aae9@syzkaller.appspotmail.com |
| Signed-off-by: Bart Van Assche <bvanassche@acm.org> |
| Reviewed-by: Leon Romanovsky <leonro@nvidia.com> |
| Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/infiniband/ulp/srp/ib_srp.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c |
| index 03ee53adaacd2..6dcdc42ed0819 100644 |
| --- a/drivers/infiniband/ulp/srp/ib_srp.c |
| +++ b/drivers/infiniband/ulp/srp/ib_srp.c |
| @@ -4154,9 +4154,11 @@ static void srp_remove_one(struct ib_device *device, void *client_data) |
| spin_unlock(&host->target_lock); |
| |
| /* |
| - * Wait for tl_err and target port removal tasks. |
| + * srp_queue_remove_work() queues a call to |
| + * srp_remove_target(). The latter function cancels |
| + * target->tl_err_work so waiting for the remove works to |
| + * finish is sufficient. |
| */ |
| - flush_workqueue(system_long_wq); |
| flush_workqueue(srp_remove_wq); |
| |
| kfree(host); |
| -- |
| 2.34.1 |
| |