scsi: qla2xxx: Fix unsafe removal from linked list
On NPIV delete, the VPort is taken off a linked list in an unsafe manner.
The check for VPort refcount should be done behind lock before taking off
the element.
[ 2733.016907] general protection fault: 0000 [#1] SMP NOPTI
[ 2733.016908] qla2xxx [0000:22:00.1]-7088:27: VP[4] deleted.
[ 2733.016912] CPU: 22 PID: 23481 Comm: qla2xxx_15_dpc Kdump: loaded Tainted:
G OE KX 5.3.18-47-default #1 SLE15-SP3
[ 2733.016914] Hardware name: Dell Inc. PowerEdge R7525/0PYVT1, BIOS 2.1.4 02/17/2021
[ 2733.016929] RIP: 0010:qla2x00_abort_isp+0x90/0x850 [qla2xxx]
[ 2733.016933] RSP: 0018:
ffffb9cfc91efe98 EFLAGS:
00010087
[ 2733.016935] RAX:
0000000000000292 RBX:
dead000000000100 RCX:
0000000000000000
[ 2733.016936] RDX:
0000000000000001 RSI:
ffff944bfeb99558 RDI:
ffff944bfc4b4488
[ 2733.016937] RBP:
ffff944bfc4b2868 R08:
00000000000187a2 R09:
0000000000000001
[ 2733.016937] R10:
ffffb9cfc91efcc8 R11:
0000000000000001 R12:
ffff944bfc4b4000
[ 2733.016938] R13:
ffff944bfc4b4870 R14:
ffff944bfc4b4488 R15:
ffff944bda895c80
[ 2733.016939] FS:
0000000000000000(0000) GS:
ffff944bfeb80000(0000) knlGS:
0000000000000000
[ 2733.016940] CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
[ 2733.016940] CR2:
00007fc173e74458 CR3:
0000001ff57de000 CR4:
0000000000350ee0
[ 2733.016941] Call Trace:
[ 2733.016951] qla2xxx_pci_error_detected+0x190/0x190 [qla2xxx]
[ 2733.016957] qla2x00_do_dpc+0x560/0xa10 [qla2xxx]
[ 2733.016962] kthread+0x10d/0x130
[ 2733.016963] kthread_park+0xa0/0xa0
[ 2733.016966] ret_from_fork+0x22/0x40
Link: https://lore.kernel.org/r/20210810043720.1137-9-njavali@marvell.com
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Quinn Tran <qutran@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>