|
@@ -1892,20 +1892,7 @@ static void srpt_close_ch(struct srpt_rdma_ch *ch)
|
|
|
*/
|
|
|
static int srpt_shutdown_session(struct se_session *se_sess)
|
|
|
{
|
|
|
- struct srpt_rdma_ch *ch = se_sess->fabric_sess_ptr;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- spin_lock_irqsave(&ch->spinlock, flags);
|
|
|
- if (ch->in_shutdown) {
|
|
|
- spin_unlock_irqrestore(&ch->spinlock, flags);
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- ch->in_shutdown = true;
|
|
|
- target_sess_cmd_list_set_waiting(se_sess);
|
|
|
- spin_unlock_irqrestore(&ch->spinlock, flags);
|
|
|
-
|
|
|
- return true;
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -2008,6 +1995,7 @@ static void srpt_release_channel_work(struct work_struct *w)
|
|
|
se_sess = ch->sess;
|
|
|
BUG_ON(!se_sess);
|
|
|
|
|
|
+ target_sess_cmd_list_set_waiting(se_sess);
|
|
|
target_wait_for_sess_cmds(se_sess);
|
|
|
|
|
|
transport_deregister_session_configfs(se_sess);
|