IB/srpt: Simplify srpt_shutdown_session()
The target core guarantees that shutdown_session() is only invoked once per session. This means that the ib_srpt target driver doesn't have to track whether or not shutdown_session() has been called. Additionally, ensure that target_sess_cmd_list_set_waiting() is called before target_wait_for_sess_cmds() by moving it into srpt_release_channel_work(). Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Sagi Grimberg <sagig@mellanox.com> Cc: Alex Estrin <alex.estrin@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
f130c2205d
commit
88936259c6
|
@ -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);
|
||||
|
|
|
@ -286,7 +286,6 @@ struct srpt_rdma_ch {
|
|||
u8 sess_name[36];
|
||||
struct work_struct release_work;
|
||||
struct completion *release_done;
|
||||
bool in_shutdown;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue