qla2x00t-32gbit: Fix a race condition

This patch fixes the following kernel complaint:

WARNING: CPU: 7 PID: 16514 at kernel/workqueue.c:3031 __flush_work.cold+0x1f/0x29
Workqueue: qla2xxx_wq qla2x00_iocb_work_fn [qla2xxx_scst]
RIP: 0010:__flush_work.cold+0x1f/0x29
Call Trace:
 flush_work+0x14/0x20
 qla24xx_do_nack_work+0x84/0x150 [qla2xxx_scst]
 qla2x00_do_work+0x50b/0x17e0 [qla2xxx_scst]
 qla2x00_iocb_work_fn+0x96/0x100 [qla2xxx_scst]
 process_one_work+0x56d/0xac0
 worker_thread+0x7a/0x5d0
 kthread+0x1bc/0x210
 ret_from_fork+0x24/0x30



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8569 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Bart Van Assche
2019-08-26 00:24:07 +00:00
parent 521c0261ec
commit 7a7f467adc

View File

@@ -1174,7 +1174,6 @@ void qlt_unreg_sess(struct fc_port *sess)
sess->last_rscn_gen = sess->rscn_gen;
sess->last_login_gen = sess->login_gen;
INIT_WORK(&sess->free_work, qlt_free_session_done);
schedule_work(&sess->free_work);
}
EXPORT_SYMBOL(qlt_unreg_sess);
@@ -1279,7 +1278,6 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess)
"Scheduling sess %p for deletion %s\n",
sess, wwn_to_str(sess->port_name));
INIT_WORK(&sess->del_work, qla24xx_delete_sess_fn);
WARN_ON(!queue_work(sess->vha->hw->wq, &sess->del_work));
}
@@ -1400,6 +1398,9 @@ static struct fc_port *qlt_create_sess(
return NULL;
}
INIT_WORK(&sess->del_work, qla24xx_delete_sess_fn);
INIT_WORK(&sess->free_work, qlt_free_session_done);
spin_lock_irqsave(&ha->tgt.sess_lock, flags);
if (!IS_SW_RESV_ADDR(sess->d_id))
vha->vha_tgt.qla_tgt->sess_count++;