Prior commit 4fa507992f0a ("scsi: libiscsi: Fix locking in
__iscsi_conn_send_pdu") changed back_lock to be taken/released with
spin_(un)lock rather than spin_(un)lock_bh in __iscsi_conn_send_pdu.
The usage of taskqueuelock in __iscsi_conn_send_pdu has the same issue
and the same argument for the safety of using spin_lock applies.

The improper usage of spin_lock_bh/spin_unlock_bh inside of
spin_lock_irq may cause deadlocks involving queue_lock or frwd_lock when
a softirq runs at or after spin_unlock_bh.

Signed-off-by: Christopher Unkel <[email protected]>
---
 drivers/scsi/libiscsi.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index 15a2fef51e38..d43bf1db411b 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -788,9 +788,9 @@ __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct 
iscsi_hdr *hdr,
                if (session->tt->xmit_task(task))
                        goto free_task;
        } else {
-               spin_lock_bh(&conn->taskqueuelock);
+               spin_lock(&conn->taskqueuelock);
                list_add_tail(&task->running, &conn->mgmtqueue);
-               spin_unlock_bh(&conn->taskqueuelock);
+               spin_unlock(&conn->taskqueuelock);
                iscsi_conn_queue_work(conn);
        }
 
-- 
2.14.3

Reply via email to