mirror of
https://github.com/torvalds/linux
synced 2024-10-26 13:19:27 +00:00
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)
|
static int srpt_shutdown_session(struct se_session *se_sess)
|
||||||
{
|
{
|
||||||
struct srpt_rdma_ch *ch = se_sess->fabric_sess_ptr;
|
return 1;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2008,6 +1995,7 @@ static void srpt_release_channel_work(struct work_struct *w)
|
||||||
se_sess = ch->sess;
|
se_sess = ch->sess;
|
||||||
BUG_ON(!se_sess);
|
BUG_ON(!se_sess);
|
||||||
|
|
||||||
|
target_sess_cmd_list_set_waiting(se_sess);
|
||||||
target_wait_for_sess_cmds(se_sess);
|
target_wait_for_sess_cmds(se_sess);
|
||||||
|
|
||||||
transport_deregister_session_configfs(se_sess);
|
transport_deregister_session_configfs(se_sess);
|
||||||
|
|
|
@ -286,7 +286,6 @@ struct srpt_rdma_ch {
|
||||||
u8 sess_name[36];
|
u8 sess_name[36];
|
||||||
struct work_struct release_work;
|
struct work_struct release_work;
|
||||||
struct completion *release_done;
|
struct completion *release_done;
|
||||||
bool in_shutdown;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue