]> www.infradead.org Git - users/jedix/linux-maple.git/commit
qla2xxx: Fix sess_lock & hardware_lock lock order problem.
authorQuinn Tran <quinn.tran@cavium.com>
Wed, 15 Mar 2017 16:48:47 +0000 (09:48 -0700)
committerBrian Maly <brian.maly@oracle.com>
Thu, 2 Nov 2017 18:14:21 +0000 (14:14 -0400)
commitfb2cc6c1388189c510007b1645680f484d719515
treeba6a9253e105b8fe10811fe15a4b22e92168c3ea
parent3606ba695dc623a9d3da242d9631542536ff88fc
qla2xxx: Fix sess_lock & hardware_lock lock order problem.

Orabug: 2684419726923029

The main lock that needs to be held for CMD or TMR submission
to upper layer is the sess_lock. The sess_lock is used to
serialize cmd submission and session deletion. The addition
of hardware_lock being held is not necessary. This patch removes
hardware_lock dependency from CMD/TMR submission.

Use hardware_lock only for error response in this case.

Path1
       CPU0                    CPU1
       ----                    ----
  lock(&(&ha->tgt.sess_lock)->rlock);
                               lock(&(&ha->hardware_lock)->rlock);
                               lock(&(&ha->tgt.sess_lock)->rlock);
  lock(&(&ha->hardware_lock)->rlock);

Path2/deadlock
*** DEADLOCK ***
Call Trace:
dump_stack+0x85/0xc2
print_circular_bug+0x1e3/0x250
__lock_acquire+0x1425/0x1620
lock_acquire+0xbf/0x210
_raw_spin_lock_irqsave+0x53/0x70
qlt_sess_work_fn+0x21d/0x480 [qla2xxx]
process_one_work+0x1f4/0x6e0

Cc: <stable@vger.kernel.org>
Cc: Bart Van Assche <Bart.VanAssche@sandisk.com>
Reported-by: Bart Van Assche <Bart.VanAssche@sandisk.com>
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Reviewed-by: Jack Vogel <jack.vogel@oracle.com>
drivers/scsi/qla2xxx/qla_target.c