aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2016-05-02 09:45:21 -0400
committerNicholas Bellinger <nab@linux-iscsi.org>2016-05-10 04:19:18 -0400
commit22d11759a4e7018f8cd7914e4e706ca2c96d6c01 (patch)
tree788d1e4e1828d66f60f9d444c298081013e4d7fa
parentfba81f8831b20272a97a990e5d47c332e9b1f65d (diff)
target: make ->shutdown_session optional
Turns out the template and thus many drivers got the return value wrong: 0 means the fabrics driver needs to put a session reference, which no driver except for the iSCSI target drivers did. Fortunately none of these drivers supports explicit Node ACLs, so the bug was harmless. Even without that only qla2xxx and iscsi every did real work in shutdown_session, so get rid of the boilerplate code in all other drivers. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
-rwxr-xr-xDocumentation/target/tcm_mod_builder.py8
-rw-r--r--drivers/infiniband/ulp/srpt/ib_srpt.c9
-rw-r--r--drivers/target/loopback/tcm_loop.c6
-rw-r--r--drivers/target/sbp/sbp_target.c6
-rw-r--r--drivers/target/target_core_configfs.c4
-rw-r--r--drivers/target/target_core_tpg.c5
-rw-r--r--drivers/target/tcm_fc/tcm_fc.h1
-rw-r--r--drivers/target/tcm_fc/tfc_conf.c1
-rw-r--r--drivers/target/tcm_fc/tfc_sess.c12
-rw-r--r--drivers/usb/gadget/function/f_tcm.c6
-rw-r--r--drivers/vhost/scsi.c6
-rw-r--r--drivers/xen/xen-scsiback.c6
12 files changed, 4 insertions, 66 deletions
diff --git a/Documentation/target/tcm_mod_builder.py b/Documentation/target/tcm_mod_builder.py
index 7d370c9b1450..6b8aa4086c5d 100755
--- a/Documentation/target/tcm_mod_builder.py
+++ b/Documentation/target/tcm_mod_builder.py
@@ -294,7 +294,6 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name):
294 buf += " .tpg_check_prod_mode_write_protect = " + fabric_mod_name + "_check_false,\n" 294 buf += " .tpg_check_prod_mode_write_protect = " + fabric_mod_name + "_check_false,\n"
295 buf += " .tpg_get_inst_index = " + fabric_mod_name + "_tpg_get_inst_index,\n" 295 buf += " .tpg_get_inst_index = " + fabric_mod_name + "_tpg_get_inst_index,\n"
296 buf += " .release_cmd = " + fabric_mod_name + "_release_cmd,\n" 296 buf += " .release_cmd = " + fabric_mod_name + "_release_cmd,\n"
297 buf += " .shutdown_session = " + fabric_mod_name + "_shutdown_session,\n"
298 buf += " .close_session = " + fabric_mod_name + "_close_session,\n" 297 buf += " .close_session = " + fabric_mod_name + "_close_session,\n"
299 buf += " .sess_get_index = " + fabric_mod_name + "_sess_get_index,\n" 298 buf += " .sess_get_index = " + fabric_mod_name + "_sess_get_index,\n"
300 buf += " .sess_get_initiator_sid = NULL,\n" 299 buf += " .sess_get_initiator_sid = NULL,\n"
@@ -467,13 +466,6 @@ def tcm_mod_dump_fabric_ops(proto_ident, fabric_mod_dir_var, fabric_mod_name):
467 buf += "}\n\n" 466 buf += "}\n\n"
468 bufi += "void " + fabric_mod_name + "_release_cmd(struct se_cmd *);\n" 467 bufi += "void " + fabric_mod_name + "_release_cmd(struct se_cmd *);\n"
469 468
470 if re.search('shutdown_session\)\(', fo):
471 buf += "int " + fabric_mod_name + "_shutdown_session(struct se_session *se_sess)\n"
472 buf += "{\n"
473 buf += " return 0;\n"
474 buf += "}\n\n"
475 bufi += "int " + fabric_mod_name + "_shutdown_session(struct se_session *);\n"
476
477 if re.search('close_session\)\(', fo): 469 if re.search('close_session\)\(', fo):
478 buf += "void " + fabric_mod_name + "_close_session(struct se_session *se_sess)\n" 470 buf += "void " + fabric_mod_name + "_close_session(struct se_session *se_sess)\n"
479 buf += "{\n" 471 buf += "{\n"
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
index 8b42401d4795..3b425af04572 100644
--- a/drivers/infiniband/ulp/srpt/ib_srpt.c
+++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
@@ -1960,14 +1960,6 @@ static void __srpt_close_all_ch(struct srpt_device *sdev)
1960 } 1960 }
1961} 1961}
1962 1962
1963/**
1964 * srpt_shutdown_session() - Whether or not a session may be shut down.
1965 */
1966static int srpt_shutdown_session(struct se_session *se_sess)
1967{
1968 return 1;
1969}
1970
1971static void srpt_free_ch(struct kref *kref) 1963static void srpt_free_ch(struct kref *kref)
1972{ 1964{
1973 struct srpt_rdma_ch *ch = container_of(kref, struct srpt_rdma_ch, kref); 1965 struct srpt_rdma_ch *ch = container_of(kref, struct srpt_rdma_ch, kref);
@@ -3287,7 +3279,6 @@ static const struct target_core_fabric_ops srpt_template = {
3287 .tpg_get_inst_index = srpt_tpg_get_inst_index, 3279 .tpg_get_inst_index = srpt_tpg_get_inst_index,
3288 .release_cmd = srpt_release_cmd, 3280 .release_cmd = srpt_release_cmd,
3289 .check_stop_free = srpt_check_stop_free, 3281 .check_stop_free = srpt_check_stop_free,
3290 .shutdown_session = srpt_shutdown_session,
3291 .close_session = srpt_close_session, 3282 .close_session = srpt_close_session,
3292 .sess_get_index = srpt_sess_get_index, 3283 .sess_get_index = srpt_sess_get_index,
3293 .sess_get_initiator_sid = NULL, 3284 .sess_get_initiator_sid = NULL,
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
index 0ad5ac541a7f..0941b2c13f5a 100644
--- a/drivers/target/loopback/tcm_loop.c
+++ b/drivers/target/loopback/tcm_loop.c
@@ -601,11 +601,6 @@ static int tcm_loop_get_cmd_state(struct se_cmd *se_cmd)
601 return tl_cmd->sc_cmd_state; 601 return tl_cmd->sc_cmd_state;
602} 602}
603 603
604static int tcm_loop_shutdown_session(struct se_session *se_sess)
605{
606 return 0;
607}
608
609static void tcm_loop_close_session(struct se_session *se_sess) 604static void tcm_loop_close_session(struct se_session *se_sess)
610{ 605{
611 return; 606 return;
@@ -1243,7 +1238,6 @@ static const struct target_core_fabric_ops loop_ops = {
1243 .tpg_get_inst_index = tcm_loop_get_inst_index, 1238 .tpg_get_inst_index = tcm_loop_get_inst_index,
1244 .check_stop_free = tcm_loop_check_stop_free, 1239 .check_stop_free = tcm_loop_check_stop_free,
1245 .release_cmd = tcm_loop_release_cmd, 1240 .release_cmd = tcm_loop_release_cmd,
1246 .shutdown_session = tcm_loop_shutdown_session,
1247 .close_session = tcm_loop_close_session, 1241 .close_session = tcm_loop_close_session,
1248 .sess_get_index = tcm_loop_sess_get_index, 1242 .sess_get_index = tcm_loop_sess_get_index,
1249 .write_pending = tcm_loop_write_pending, 1243 .write_pending = tcm_loop_write_pending,
diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c
index c57e7884973d..6c8b8f84a047 100644
--- a/drivers/target/sbp/sbp_target.c
+++ b/drivers/target/sbp/sbp_target.c
@@ -1726,11 +1726,6 @@ static void sbp_release_cmd(struct se_cmd *se_cmd)
1726 sbp_free_request(req); 1726 sbp_free_request(req);
1727} 1727}
1728 1728
1729static int sbp_shutdown_session(struct se_session *se_sess)
1730{
1731 return 0;
1732}
1733
1734static void sbp_close_session(struct se_session *se_sess) 1729static void sbp_close_session(struct se_session *se_sess)
1735{ 1730{
1736 return; 1731 return;
@@ -2349,7 +2344,6 @@ static const struct target_core_fabric_ops sbp_ops = {
2349 .tpg_check_prod_mode_write_protect = sbp_check_false, 2344 .tpg_check_prod_mode_write_protect = sbp_check_false,
2350 .tpg_get_inst_index = sbp_tpg_get_inst_index, 2345 .tpg_get_inst_index = sbp_tpg_get_inst_index,
2351 .release_cmd = sbp_release_cmd, 2346 .release_cmd = sbp_release_cmd,
2352 .shutdown_session = sbp_shutdown_session,
2353 .close_session = sbp_close_session, 2347 .close_session = sbp_close_session,
2354 .sess_get_index = sbp_sess_get_index, 2348 .sess_get_index = sbp_sess_get_index,
2355 .write_pending = sbp_write_pending, 2349 .write_pending = sbp_write_pending,
diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c
index 73c23c75528a..75c5000ca95e 100644
--- a/drivers/target/target_core_configfs.c
+++ b/drivers/target/target_core_configfs.c
@@ -385,10 +385,6 @@ static int target_fabric_tf_ops_check(const struct target_core_fabric_ops *tfo)
385 pr_err("Missing tfo->release_cmd()\n"); 385 pr_err("Missing tfo->release_cmd()\n");
386 return -EINVAL; 386 return -EINVAL;
387 } 387 }
388 if (!tfo->shutdown_session) {
389 pr_err("Missing tfo->shutdown_session()\n");
390 return -EINVAL;
391 }
392 if (!tfo->close_session) { 388 if (!tfo->close_session) {
393 pr_err("Missing tfo->close_session()\n"); 389 pr_err("Missing tfo->close_session()\n");
394 return -EINVAL; 390 return -EINVAL;
diff --git a/drivers/target/target_core_tpg.c b/drivers/target/target_core_tpg.c
index b1ac600f5b45..a81a37045403 100644
--- a/drivers/target/target_core_tpg.c
+++ b/drivers/target/target_core_tpg.c
@@ -353,7 +353,10 @@ restart:
353 list_del_init(&sess->sess_acl_list); 353 list_del_init(&sess->sess_acl_list);
354 354
355 spin_unlock_irqrestore(&acl->nacl_sess_lock, flags); 355 spin_unlock_irqrestore(&acl->nacl_sess_lock, flags);
356 ret = acl->se_tpg->se_tpg_tfo->shutdown_session(sess); 356 if (acl->se_tpg->se_tpg_tfo->shutdown_session)
357 ret = acl->se_tpg->se_tpg_tfo->shutdown_session(sess);
358 else
359 ret = 1;
357 target_put_session(sess); 360 target_put_session(sess);
358 if (ret) 361 if (ret)
359 target_put_session(sess); 362 target_put_session(sess);
diff --git a/drivers/target/tcm_fc/tcm_fc.h b/drivers/target/tcm_fc/tcm_fc.h
index c30003bd4ff0..e28209b99b59 100644
--- a/drivers/target/tcm_fc/tcm_fc.h
+++ b/drivers/target/tcm_fc/tcm_fc.h
@@ -139,7 +139,6 @@ extern unsigned int ft_debug_logging;
139 * Session ops. 139 * Session ops.
140 */ 140 */
141void ft_sess_put(struct ft_sess *); 141void ft_sess_put(struct ft_sess *);
142int ft_sess_shutdown(struct se_session *);
143void ft_sess_close(struct se_session *); 142void ft_sess_close(struct se_session *);
144u32 ft_sess_get_index(struct se_session *); 143u32 ft_sess_get_index(struct se_session *);
145u32 ft_sess_get_port_name(struct se_session *, unsigned char *, u32); 144u32 ft_sess_get_port_name(struct se_session *, unsigned char *, u32);
diff --git a/drivers/target/tcm_fc/tfc_conf.c b/drivers/target/tcm_fc/tfc_conf.c
index 4d375e95841b..42ee91123dca 100644
--- a/drivers/target/tcm_fc/tfc_conf.c
+++ b/drivers/target/tcm_fc/tfc_conf.c
@@ -442,7 +442,6 @@ static const struct target_core_fabric_ops ft_fabric_ops = {
442 .tpg_get_inst_index = ft_tpg_get_inst_index, 442 .tpg_get_inst_index = ft_tpg_get_inst_index,
443 .check_stop_free = ft_check_stop_free, 443 .check_stop_free = ft_check_stop_free,
444 .release_cmd = ft_release_cmd, 444 .release_cmd = ft_release_cmd,
445 .shutdown_session = ft_sess_shutdown,
446 .close_session = ft_sess_close, 445 .close_session = ft_sess_close,
447 .sess_get_index = ft_sess_get_index, 446 .sess_get_index = ft_sess_get_index,
448 .sess_get_initiator_sid = NULL, 447 .sess_get_initiator_sid = NULL,
diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c
index d0c3e1894c61..f5186a744399 100644
--- a/drivers/target/tcm_fc/tfc_sess.c
+++ b/drivers/target/tcm_fc/tfc_sess.c
@@ -303,18 +303,6 @@ static void ft_sess_delete_all(struct ft_tport *tport)
303 */ 303 */
304 304
305/* 305/*
306 * Determine whether session is allowed to be shutdown in the current context.
307 * Returns non-zero if the session should be shutdown.
308 */
309int ft_sess_shutdown(struct se_session *se_sess)
310{
311 struct ft_sess *sess = se_sess->fabric_sess_ptr;
312
313 pr_debug("port_id %x\n", sess->port_id);
314 return 1;
315}
316
317/*
318 * Remove session and send PRLO. 306 * Remove session and send PRLO.
319 * This is called when the ACL is being deleted or queue depth is changing. 307 * This is called when the ACL is being deleted or queue depth is changing.
320 */ 308 */
diff --git a/drivers/usb/gadget/function/f_tcm.c b/drivers/usb/gadget/function/f_tcm.c
index 2ace0295408e..f4ed427e04ce 100644
--- a/drivers/usb/gadget/function/f_tcm.c
+++ b/drivers/usb/gadget/function/f_tcm.c
@@ -1290,11 +1290,6 @@ static void usbg_release_cmd(struct se_cmd *se_cmd)
1290 percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag); 1290 percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag);
1291} 1291}
1292 1292
1293static int usbg_shutdown_session(struct se_session *se_sess)
1294{
1295 return 0;
1296}
1297
1298static void usbg_close_session(struct se_session *se_sess) 1293static void usbg_close_session(struct se_session *se_sess)
1299{ 1294{
1300} 1295}
@@ -1735,7 +1730,6 @@ static const struct target_core_fabric_ops usbg_ops = {
1735 .tpg_check_prod_mode_write_protect = usbg_check_false, 1730 .tpg_check_prod_mode_write_protect = usbg_check_false,
1736 .tpg_get_inst_index = usbg_tpg_get_inst_index, 1731 .tpg_get_inst_index = usbg_tpg_get_inst_index,
1737 .release_cmd = usbg_release_cmd, 1732 .release_cmd = usbg_release_cmd,
1738 .shutdown_session = usbg_shutdown_session,
1739 .close_session = usbg_close_session, 1733 .close_session = usbg_close_session,
1740 .sess_get_index = usbg_sess_get_index, 1734 .sess_get_index = usbg_sess_get_index,
1741 .sess_get_initiator_sid = NULL, 1735 .sess_get_initiator_sid = NULL,
diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
index 0e6fd556c982..d2c60e5c48b3 100644
--- a/drivers/vhost/scsi.c
+++ b/drivers/vhost/scsi.c
@@ -333,11 +333,6 @@ static void vhost_scsi_release_cmd(struct se_cmd *se_cmd)
333 percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag); 333 percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag);
334} 334}
335 335
336static int vhost_scsi_shutdown_session(struct se_session *se_sess)
337{
338 return 0;
339}
340
341static void vhost_scsi_close_session(struct se_session *se_sess) 336static void vhost_scsi_close_session(struct se_session *se_sess)
342{ 337{
343 return; 338 return;
@@ -2114,7 +2109,6 @@ static struct target_core_fabric_ops vhost_scsi_ops = {
2114 .tpg_get_inst_index = vhost_scsi_tpg_get_inst_index, 2109 .tpg_get_inst_index = vhost_scsi_tpg_get_inst_index,
2115 .release_cmd = vhost_scsi_release_cmd, 2110 .release_cmd = vhost_scsi_release_cmd,
2116 .check_stop_free = vhost_scsi_check_stop_free, 2111 .check_stop_free = vhost_scsi_check_stop_free,
2117 .shutdown_session = vhost_scsi_shutdown_session,
2118 .close_session = vhost_scsi_close_session, 2112 .close_session = vhost_scsi_close_session,
2119 .sess_get_index = vhost_scsi_sess_get_index, 2113 .sess_get_index = vhost_scsi_sess_get_index,
2120 .sess_get_initiator_sid = NULL, 2114 .sess_get_initiator_sid = NULL,
diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c
index ff932624eaad..783947a272ab 100644
--- a/drivers/xen/xen-scsiback.c
+++ b/drivers/xen/xen-scsiback.c
@@ -1399,11 +1399,6 @@ static void scsiback_release_cmd(struct se_cmd *se_cmd)
1399 percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag); 1399 percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag);
1400} 1400}
1401 1401
1402static int scsiback_shutdown_session(struct se_session *se_sess)
1403{
1404 return 0;
1405}
1406
1407static void scsiback_close_session(struct se_session *se_sess) 1402static void scsiback_close_session(struct se_session *se_sess)
1408{ 1403{
1409} 1404}
@@ -1841,7 +1836,6 @@ static const struct target_core_fabric_ops scsiback_ops = {
1841 .tpg_get_inst_index = scsiback_tpg_get_inst_index, 1836 .tpg_get_inst_index = scsiback_tpg_get_inst_index,
1842 .check_stop_free = scsiback_check_stop_free, 1837 .check_stop_free = scsiback_check_stop_free,
1843 .release_cmd = scsiback_release_cmd, 1838 .release_cmd = scsiback_release_cmd,
1844 .shutdown_session = scsiback_shutdown_session,
1845 .close_session = scsiback_close_session, 1839 .close_session = scsiback_close_session,
1846 .sess_get_index = scsiback_sess_get_index, 1840 .sess_get_index = scsiback_sess_get_index,
1847 .sess_get_initiator_sid = NULL, 1841 .sess_get_initiator_sid = NULL,