diff mbox series

[v2,07/11] qla2xxx: During vport delete send async logout explicitly

Message ID 20240710171057.35066-8-njavali@marvell.com (mailing list archive)
State Accepted
Headers show
Series qla2xxx misc. bug fixes | expand

Commit Message

Nilesh Javali July 10, 2024, 5:10 p.m. UTC
From: Manish Rangankar <mrangankar@marvell.com>

During vport delete, it is observed that during unload we hit a
crash because of stale entries in outstanding command array.
For all these stale I/O entries, eh_abort was issued and aborted
(fast_fail_io = 2009h) but I/Os could not complete while vport delete
is in process of deleting.

  BUG: kernel NULL pointer dereference, address: 000000000000001c
  #PF: supervisor read access in kernel mode
  #PF: error_code(0x0000) - not-present page
  PGD 0 P4D 0
  Oops: 0000 [#1] PREEMPT SMP NOPTI
  Workqueue: qla2xxx_wq qla_do_work [qla2xxx]
  RIP: 0010:dma_direct_unmap_sg+0x51/0x1e0
  RSP: 0018:ffffa1e1e150fc68 EFLAGS: 00010046
  RAX: 0000000000000000 RBX: 0000000000000021 RCX: 0000000000000001
  RDX: 0000000000000021 RSI: 0000000000000000 RDI: ffff8ce208a7a0d0
  RBP: ffff8ce208a7a0d0 R08: 0000000000000000 R09: ffff8ce378aac9c8
  R10: ffff8ce378aac8a0 R11: ffffa1e1e150f9d8 R12: 0000000000000000
  R13: 0000000000000000 R14: ffff8ce378aac9c8 R15: 0000000000000000
  FS:  0000000000000000(0000) GS:ffff8d217f000000(0000) knlGS:0000000000000000
  CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
  CR2: 000000000000001c CR3: 0000002089acc000 CR4: 0000000000350ee0
  Call Trace:
  <TASK>
  qla2xxx_qpair_sp_free_dma+0x417/0x4e0
  ? qla2xxx_qpair_sp_compl+0x10d/0x1a0
  ? qla2x00_status_entry+0x768/0x2830
  ? newidle_balance+0x2f0/0x430
  ? dequeue_entity+0x100/0x3c0
  ? qla24xx_process_response_queue+0x6a1/0x19e0
  ? __schedule+0x2d5/0x1140
  ? qla_do_work+0x47/0x60
  ? process_one_work+0x267/0x440
  ? process_one_work+0x440/0x440
  ? worker_thread+0x2d/0x3d0
  ? process_one_work+0x440/0x440
  ? kthread+0x156/0x180
  ? set_kthread_struct+0x50/0x50
  ? ret_from_fork+0x22/0x30
  </TASK>

Send out async logout explicitly for all the ports during
vport delete.

Cc: stable@vger.kernel.org
Signed-off-by: Manish Rangankar <mrangankar@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
---
 drivers/scsi/qla2xxx/qla_mid.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Himanshu Madhani July 10, 2024, 7:55 p.m. UTC | #1
On 7/10/24 10:10 AM, Nilesh Javali wrote:
> From: Manish Rangankar <mrangankar@marvell.com>
> 
> During vport delete, it is observed that during unload we hit a
> crash because of stale entries in outstanding command array.
> For all these stale I/O entries, eh_abort was issued and aborted
> (fast_fail_io = 2009h) but I/Os could not complete while vport delete
> is in process of deleting.
> 
>    BUG: kernel NULL pointer dereference, address: 000000000000001c
>    #PF: supervisor read access in kernel mode
>    #PF: error_code(0x0000) - not-present page
>    PGD 0 P4D 0
>    Oops: 0000 [#1] PREEMPT SMP NOPTI
>    Workqueue: qla2xxx_wq qla_do_work [qla2xxx]
>    RIP: 0010:dma_direct_unmap_sg+0x51/0x1e0
>    RSP: 0018:ffffa1e1e150fc68 EFLAGS: 00010046
>    RAX: 0000000000000000 RBX: 0000000000000021 RCX: 0000000000000001
>    RDX: 0000000000000021 RSI: 0000000000000000 RDI: ffff8ce208a7a0d0
>    RBP: ffff8ce208a7a0d0 R08: 0000000000000000 R09: ffff8ce378aac9c8
>    R10: ffff8ce378aac8a0 R11: ffffa1e1e150f9d8 R12: 0000000000000000
>    R13: 0000000000000000 R14: ffff8ce378aac9c8 R15: 0000000000000000
>    FS:  0000000000000000(0000) GS:ffff8d217f000000(0000) knlGS:0000000000000000
>    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>    CR2: 000000000000001c CR3: 0000002089acc000 CR4: 0000000000350ee0
>    Call Trace:
>    <TASK>
>    qla2xxx_qpair_sp_free_dma+0x417/0x4e0
>    ? qla2xxx_qpair_sp_compl+0x10d/0x1a0
>    ? qla2x00_status_entry+0x768/0x2830
>    ? newidle_balance+0x2f0/0x430
>    ? dequeue_entity+0x100/0x3c0
>    ? qla24xx_process_response_queue+0x6a1/0x19e0
>    ? __schedule+0x2d5/0x1140
>    ? qla_do_work+0x47/0x60
>    ? process_one_work+0x267/0x440
>    ? process_one_work+0x440/0x440
>    ? worker_thread+0x2d/0x3d0
>    ? process_one_work+0x440/0x440
>    ? kthread+0x156/0x180
>    ? set_kthread_struct+0x50/0x50
>    ? ret_from_fork+0x22/0x30
>    </TASK>
> 
> Send out async logout explicitly for all the ports during
> vport delete.
> 
> Cc: stable@vger.kernel.org
> Signed-off-by: Manish Rangankar <mrangankar@marvell.com>
> Signed-off-by: Nilesh Javali <njavali@marvell.com>
> ---
>   drivers/scsi/qla2xxx/qla_mid.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
> index b67416951a5f..76703f2706b8 100644
> --- a/drivers/scsi/qla2xxx/qla_mid.c
> +++ b/drivers/scsi/qla2xxx/qla_mid.c
> @@ -180,7 +180,7 @@ qla24xx_disable_vp(scsi_qla_host_t *vha)
>   	atomic_set(&vha->loop_state, LOOP_DOWN);
>   	atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME);
>   	list_for_each_entry(fcport, &vha->vp_fcports, list)
> -		fcport->logout_on_delete = 0;
> +		fcport->logout_on_delete = 1;
>   
>   	if (!vha->hw->flags.edif_enabled)
>   		qla2x00_wait_for_sess_deletion(vha);

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
diff mbox series

Patch

diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
index b67416951a5f..76703f2706b8 100644
--- a/drivers/scsi/qla2xxx/qla_mid.c
+++ b/drivers/scsi/qla2xxx/qla_mid.c
@@ -180,7 +180,7 @@  qla24xx_disable_vp(scsi_qla_host_t *vha)
 	atomic_set(&vha->loop_state, LOOP_DOWN);
 	atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME);
 	list_for_each_entry(fcport, &vha->vp_fcports, list)
-		fcport->logout_on_delete = 0;
+		fcport->logout_on_delete = 1;
 
 	if (!vha->hw->flags.edif_enabled)
 		qla2x00_wait_for_sess_deletion(vha);