Re: [PATCH 08/15] target: add session removal function

2018-07-19 Thread Christoph Hellwig
On Sun, Jul 15, 2018 at 06:16:24PM -0500, Mike Christie wrote:
> For tcm_fc, it should be ok to call
> transport_deregister_session_configfs later like in the new
> remove function because the transport_deregister_session_configfs call
> was not affecting the target_sess_cmd_list_set_waiting/
> target_wait_for_sess_cmds calls and nothing else was being
> torn down between that time.
> 
> For drivers that only called transport_deregister_session
> the new remove function that calls transport_deregister_session_configfs
> should be ok, because those drivers did not access se_nacl->nacl_sess
> or sess_acl_list so they will see no difference.

It might be worth to split the conversion of the drivers that didn't
exactly call transport_deregister_session_configfs +
transport_deregister_session into a separate per-driver patch to
better document this.

Except for that this looks fine:

Reviewed-by: Christoph Hellwig 


Re: [PATCH 08/15] target: add session removal function

2018-07-18 Thread Bart Van Assche
On Sun, 2018-07-15 at 18:16 -0500, Mike Christie wrote:
> This adds a function to remove a session which should be used by
> drivers that use target_setup_session.
> 
> All the drivers but iscsi and tcm_fc were doing calling
> transport_deregister_session_configfs and then immediately calling
> transport_deregister_session or just calling
> transport_deregisteir_session.
  ^
  transport_deregister_session?

Anyway:

Reviewed-by: Bart Van Assche 


[PATCH 08/15] target: add session removal function

2018-07-15 Thread Mike Christie
This adds a function to remove a session which should be used by
drivers that use target_setup_session.

All the drivers but iscsi and tcm_fc were doing calling
transport_deregister_session_configfs and then immediately calling
transport_deregister_session or just calling
transport_deregisteir_session.

For tcm_fc, it should be ok to call
transport_deregister_session_configfs later like in the new
remove function because the transport_deregister_session_configfs call
was not affecting the target_sess_cmd_list_set_waiting/
target_wait_for_sess_cmds calls and nothing else was being
torn down between that time.

For drivers that only called transport_deregister_session
the new remove function that calls transport_deregister_session_configfs
should be ok, because those drivers did not access se_nacl->nacl_sess
or sess_acl_list so they will see no difference.

iscsi does not use the setup/remove session functions and we
let it to continue to go wild with it calling the lower level
functions directly.

Signed-off-by: Mike Christie 
---
 drivers/infiniband/ulp/srpt/ib_srpt.c| 3 +--
 drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c | 3 +--
 drivers/scsi/qla2xxx/tcm_qla2xxx.c   | 3 +--
 drivers/target/loopback/tcm_loop.c   | 2 +-
 drivers/target/sbp/sbp_target.c  | 3 +--
 drivers/target/target_core_transport.c   | 7 +++
 drivers/target/tcm_fc/tfc_sess.c | 3 +--
 drivers/usb/gadget/function/f_tcm.c  | 2 +-
 drivers/vhost/scsi.c | 2 +-
 drivers/xen/xen-scsiback.c   | 2 +-
 include/target/target_core_fabric.h  | 1 +
 11 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c 
b/drivers/infiniband/ulp/srpt/ib_srpt.c
index 496ee6b..ba53245c 100644
--- a/drivers/infiniband/ulp/srpt/ib_srpt.c
+++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
@@ -2029,8 +2029,7 @@ static void srpt_release_channel_work(struct work_struct 
*w)
target_sess_cmd_list_set_waiting(se_sess);
target_wait_for_sess_cmds(se_sess);
 
-   transport_deregister_session_configfs(se_sess);
-   transport_deregister_session(se_sess);
+   target_remove_session(se_sess);
ch->sess = NULL;
 
if (ch->using_rdma_cm)
diff --git a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c 
b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c
index 7e2d2c0..99df92e 100644
--- a/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c
+++ b/drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c
@@ -2267,8 +2267,7 @@ static int ibmvscsis_drop_nexus(struct ibmvscsis_tport 
*tport)
 * Release the SCSI I_T Nexus to the emulated ibmvscsis Target Port
 */
target_wait_for_sess_cmds(se_sess);
-   transport_deregister_session_configfs(se_sess);
-   transport_deregister_session(se_sess);
+   target_remove_session(se_sess);
tport->ibmv_nexus = NULL;
kfree(nexus);
 
diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c 
b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
index c0e1921..e25c15d 100644
--- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
+++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
@@ -1456,8 +1456,7 @@ static void tcm_qla2xxx_free_session(struct fc_port *sess)
}
target_wait_for_sess_cmds(se_sess);
 
-   transport_deregister_session_configfs(sess->se_sess);
-   transport_deregister_session(sess->se_sess);
+   target_remove_session(se_sess);
 }
 
 static int tcm_qla2xxx_session_cb(struct se_portal_group *se_tpg,
diff --git a/drivers/target/loopback/tcm_loop.c 
b/drivers/target/loopback/tcm_loop.c
index 3bb2236..f3398db 100644
--- a/drivers/target/loopback/tcm_loop.c
+++ b/drivers/target/loopback/tcm_loop.c
@@ -800,7 +800,7 @@ static int tcm_loop_drop_nexus(
/*
 * Release the SCSI I_T Nexus to the emulated Target Port
 */
-   transport_deregister_session(tl_nexus->se_sess);
+   target_remove_session(se_sess);
tpg->tl_nexus = NULL;
kfree(tl_nexus);
return 0;
diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c
index 14244bf..2087d5f 100644
--- a/drivers/target/sbp/sbp_target.c
+++ b/drivers/target/sbp/sbp_target.c
@@ -235,8 +235,7 @@ static void sbp_session_release(struct sbp_session *sess, 
bool cancel_work)
if (cancel_work)
cancel_delayed_work_sync(>maint_work);
 
-   transport_deregister_session_configfs(sess->se_sess);
-   transport_deregister_session(sess->se_sess);
+   target_remove_session(sess->se_sess);
 
if (sess->card)
fw_card_put(sess->card);
diff --git a/drivers/target/target_core_transport.c 
b/drivers/target/target_core_transport.c
index 77c5954..57279fe 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -640,6 +640,13 @@ void transport_deregister_session(struct se_session 
*se_sess)
 }
 EXPORT_SYMBOL(transport_deregister_session);
 
+void target_remove_session(struct se_session *se_sess)
+{
+