WTF: patch "[PATCH] qla2xxx: cleanup cmd in qla workqueue before processing TMR" was seriously submitted to be applied to the 4.1-stable tree?
Subsystems (3)
[email protected]
maintainerThe patch below was submitted to be applied to the 4.1-stable tree.
I fail to see how this patch meets the stable kernel rules as found at Documentation/stable_kernel_rules.txt.
I could be totally wrong, and if so, please respond to <[email protected]> and let me know why this patch should be applied. Otherwise, it is now dropped from my patch queues, never to be seen again.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
8b2f5ff3d05c2c48b722c3cc67b8226f1601042bMon Sep 17 00:00:00 2001
From: Swapnil Nagle <[email protected]>
Date: Tue, 14 Jul 2015 16:00:43 -0400
Subject: [PATCH] qla2xxx: cleanup cmd in qla workqueue before processing TMR
Since cmds go into qla_tgt_wq and TMRs don't, it's possible that TMR like TASK_ABORT can be queued over the cmd for which it was meant. To avoid this race, use a per-port list to keep track of cmds that are enqueued to qla_tgt_wq but not yet processed. When a TMR arrives, iterate through this list and remove any cmds that match the TMR. This patch supports TASK_ABORT and LUN_RESET.
drivers/scsi/qla2xxx/qla_dbg.c +1 -1
@@ -68,7 +68,7 @@* | | | 0xd101-0xd1fe | * | | | 0xd214-0xd2fe | * | Target Mode | 0xe079 | | -* | Target Mode Management | 0xf080 | 0xf002 | +* | Target Mode Management | 0xf083 | 0xf002 | * | | | 0xf046-0xf049 | * | Target Mode Task Management | 0x1000b | | * ----------------------------------------------------------------------
drivers/scsi/qla2xxx/qla_def.h +5 -0
@@ -3579,6 +3579,11 @@ typedef struct scsi_qla_host {uint16_t fcoe_fcf_idx;uint8_t fcoe_vn_port_mac[6 ]; +/* list of commands waiting on workqueue */ +struct list_head qla_cmd_list; +struct list_head qla_sess_op_cmd_list; +spinlock_t cmd_list_lock; +uint32_t vp_abort_cnt;struct fc_vport *fc_vport;/* holds fc_vport * for each vport */
drivers/scsi/qla2xxx/qla_os.c +3 -0
@@ -3764,8 +3764,11 @@ struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *sht,INIT_LIST_HEAD (&vha->vp_fcports);INIT_LIST_HEAD (&vha->work_list);INIT_LIST_HEAD (&vha->list); +INIT_LIST_HEAD (&vha->qla_cmd_list); +INIT_LIST_HEAD (&vha->qla_sess_op_cmd_list);spin_lock_init (&vha->work_lock); +spin_lock_init (&vha->cmd_list_lock);sprintf (vha->host_str,"%s_%ld" ,QLA2XXX_DRIVER_NAME , vha->host_no); ql_dbg(ql_dbg_init, vha, 0x0041,
drivers/scsi/qla2xxx/qla_target.c +117 -6
181 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_target.h +12 -0
@@ -874,6 +874,8 @@ struct qla_tgt_sess_op {struct scsi_qla_host *vha;struct atio_from_isp atio;struct work_struct work; +struct list_head cmd_list; +bool aborted; };/*
@@ -1076,6 +1078,16 @@ static inline void qla_reverse_ini_mode(struct scsi_qla_host *ha) ha->host->active_mode |=MODE_INITIATOR ; } +static inline uint32_t sid_to_key (const uint8_t *s_id) +{ +uint32_t key; + + key = (((unsigned long )s_id[0 ] <<16 ) | + ((unsigned long )s_id[1 ] <<8 ) | + (unsigned long )s_id[2 ]); +return key; +} +/* * Exported symbols from qla_target.c LLD logic used by qla2xxx code.. */
drivers/scsi/qla2xxx/tcm_qla2xxx.c +2 -6
@@ -1148,9 +1148,7 @@ static struct qla_tgt_sess *tcm_qla2xxx_find_sess_by_s_id(return NULL ; } - key = (((unsigned long )s_id[0 ] <<16 ) | - ((unsigned long )s_id[1 ] <<8 ) | - (unsigned long )s_id[2 ]); + key =sid_to_key (s_id);pr_debug ("find_sess_by_s_id: 0x%06x\n" , key); se_nacl =btree_lookup32 (&lport->lport_fcport_map, key);
@@ -1185,9 +1183,7 @@ static void tcm_qla2xxx_set_sess_by_s_id(void *slot;int rc; - key = (((unsigned long )s_id[0 ] <<16 ) | - ((unsigned long )s_id[1 ] <<8 ) | - (unsigned long )s_id[2 ]); + key =sid_to_key (s_id);pr_debug ("set_sess_by_s_id: %06x\n" , key); slot =btree_lookup32 (&lport->lport_fcport_map, key);