Message ID | 568BD20F.7020101@sandisk.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On Tue, Jan 05, 2016 at 03:24:15PM +0100, Bart Van Assche wrote: > 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(). Looks good, Reviewed-by: Christoph Hellwig <hch@lst.de> Mote that now most drivers return either always return 0 or 1 from shutdown_session, so it might be worth to investigate if we can get rid of this method in the future. Minor nitpick below: > static int srpt_shutdown_session(struct se_session *se_sess) > { > return true; > } Given that the function returns in this really should be 1 in instead of true, but it's not really worth respinning the patch just for this. -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Reviewed-by: Sagi Grimberg <sagig@mellanox.com>
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c index a27414d..0ff4ed6 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c @@ -1887,19 +1887,6 @@ 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; } @@ -2003,6 +1990,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); diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.h b/drivers/infiniband/ulp/srpt/ib_srpt.h index a98b86b..d0de468 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.h +++ b/drivers/infiniband/ulp/srpt/ib_srpt.h @@ -288,7 +288,6 @@ struct srpt_rdma_ch { u8 sess_name[36]; struct work_struct release_work; struct completion *release_done; - bool in_shutdown; }; /**
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> Cc: Christoph Hellwig <hch@lst.de> --- drivers/infiniband/ulp/srpt/ib_srpt.c | 14 +------------- drivers/infiniband/ulp/srpt/ib_srpt.h | 1 - 2 files changed, 1 insertion(+), 14 deletions(-)