Patch "qla2xxx: Allow vref count to timeout on vport delete." has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
qla2xxx: Allow vref count to timeout on vport delete.
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
qla2xxx-allow-vref-count-to-timeout-on-vport-delete.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
c4a9b538ab2a109c5f9798bea1f8f4bf93aadfb9Mon Sep 17 00:00:00 2001
From: Joe Carnuccio <[email protected]>
Date: Wed, 15 Mar 2017 09:48:43 -0700
Subject: qla2xxx: Allow vref count to timeout on vport delete.
From: Joe Carnuccio <[email protected]>
commit c4a9b538ab2a109c5f9798bea1f8f4bf93aadfb9 upstream.
--- drivers/scsi/qla2xxx/qla_attr.c | 2 -- drivers/scsi/qla2xxx/qla_def.h | 3 +++ drivers/scsi/qla2xxx/qla_init.c | 1 + drivers/scsi/qla2xxx/qla_mid.c | 14 ++++++++------ drivers/scsi/qla2xxx/qla_os.c | 1 + 5 files changed, 13 insertions(+), 8 deletions(-)
drivers/scsi/qla2xxx/qla_attr.c +0 -2
@@ -2153,8 +2153,6 @@ qla24xx_vport_delete(struct fc_vport *fc "Timer for the VP[%d] has stopped\n", vha->vp_idx); } -BUG_ON (atomic_read (&vha->vref_count)); -qla2x00_free_fcports (vha);mutex_lock (&ha->vport_lock);
drivers/scsi/qla2xxx/qla_def.h +3 -0
@@ -3742,6 +3742,7 @@ typedef struct scsi_qla_host {struct qla8044_reset_template reset_tmplt;struct qla_tgt_counters tgt_counters;uint16_t bbcr; +wait_queue_head_t vref_waitq; } scsi_qla_host_t;struct qla27xx_image_status {
@@ -3780,6 +3781,7 @@ struct qla_tgt_vp_map {mb (); \if (__vha->flags.delete_progress) { \atomic_dec (&__vha->vref_count); \ +wake_up (&__vha->vref_waitq); \ __bail =1 ; \ }else { \ __bail =0 ; \
@@ -3788,6 +3790,7 @@ struct qla_tgt_vp_map {#define QLA_VHA_MARK_NOT_BUSY (__vha) do { \ atomic_dec(&__vha->vref_count); \ + wake_up(&__vha->vref_waitq); \ } while (0)/*
drivers/scsi/qla2xxx/qla_init.c +1 -0
@@ -4356,6 +4356,7 @@ qla2x00_update_fcports(scsi_qla_host_t * } }atomic_dec (&vha->vref_count); +wake_up (&vha->vref_waitq); }spin_unlock_irqrestore (&ha->vport_slock, flags); }
drivers/scsi/qla2xxx/qla_mid.c +8 -6
@@ -74,13 +74,14 @@ qla24xx_deallocate_vp_id(scsi_qla_host_t* ensures no active vp_list traversal while the vport is removed * from the queue) */ -spin_lock_irqsave (&ha->vport_slock, flags); -while (atomic_read (&vha->vref_count)) { -spin_unlock_irqrestore (&ha->vport_slock, flags); - -msleep (500 ); +wait_event_timeout (vha->vref_waitq,atomic_read (&vha->vref_count), +10 *HZ ); -spin_lock_irqsave (&ha->vport_slock, flags); +spin_lock_irqsave (&ha->vport_slock, flags); +if (atomic_read (&vha->vref_count)) { +ql_dbg (ql_dbg_vport, vha,0xfffa , +"vha->vref_count=%u timeout\n" , vha->vref_count.counter); + vha->vref_count = (atomic_t )ATOMIC_INIT (0 ); }list_del (&vha->list);qlt_update_vp_map (vha,RESET_VP_IDX );
@@ -269,6 +270,7 @@ qla2x00_alert_all_vps(struct rsp_que *rsspin_lock_irqsave (&ha->vport_slock, flags);atomic_dec (&vha->vref_count); +wake_up (&vha->vref_waitq); } i++; }
drivers/scsi/qla2xxx/qla_os.c +1 -0
@@ -4045,6 +4045,7 @@ struct scsi_qla_host *qla2x00_create_hosspin_lock_init (&vha->work_lock);spin_lock_init (&vha->cmd_list_lock); +init_waitqueue_head (&vha->vref_waitq);sprintf (vha->host_str,"%s_%ld" ,QLA2XXX_DRIVER_NAME , vha->host_no); ql_dbg(ql_dbg_init, vha, 0x0041,
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/qla2xxx-allow-vref-count-to-timeout-on-vport-delete.patch