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:
Bart Van Assche 2016-02-11 11:05:58 -08:00 committed by Doug Ledford
parent f130c2205d
commit 88936259c6
2 changed files with 2 additions and 15 deletions

View file

@ -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);

View file

@ -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;
}; };
/** /**