From 7a7f467adc01e4ea63b53b43cf2535d0b856c6bc Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Mon, 26 Aug 2019 00:24:07 +0000 Subject: [PATCH] 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 --- qla2x00t-32gbit/qla_target.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/qla2x00t-32gbit/qla_target.c b/qla2x00t-32gbit/qla_target.c index b57dfda98..43a68876d 100644 --- a/qla2x00t-32gbit/qla_target.c +++ b/qla2x00t-32gbit/qla_target.c @@ -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++;