diff --git a/scst/src/scst_lib.c b/scst/src/scst_lib.c index b9311809e..89cf055ca 100644 --- a/scst/src/scst_lib.c +++ b/scst/src/scst_lib.c @@ -1716,6 +1716,9 @@ static void scst_check_reassign_sess(struct scst_session *sess) TRACE_ENTRY(); + if (tgt_dev->sess->shut_phase != SCST_SESS_SPH_READY) + goto out; + TRACE_MGMT_DBG("Checking reassignment for sess %p (initiator %s)", sess, sess->initiator_name); diff --git a/scst/src/scst_targ.c b/scst/src/scst_targ.c index 61adf4337..9d061dcbd 100644 --- a/scst/src/scst_targ.c +++ b/scst/src/scst_targ.c @@ -6168,6 +6168,10 @@ static int scst_init_session(struct scst_session *sess) if (res != 0) goto failed; + /* + * scst_sess_alloc_tgt_devs() must be called after session added in the + * sess_list to not race with scst_check_reassign_sess()! + */ res = scst_sess_alloc_tgt_devs(sess); failed: