OSDN Git Service

scsi: target: iscsi: Replace tpg enable attr with ops.enable
authorDmitry Bogdanov <d.bogdanov@yadro.com>
Fri, 10 Sep 2021 08:41:28 +0000 (11:41 +0300)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 5 Oct 2021 03:27:38 +0000 (23:27 -0400)
Remove tpg/enable attribute. Add fabric ops enable_tpg implementation
instead.

Link: https://lore.kernel.org/r/20210910084133.17956-3-d.bogdanov@yadro.com
Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com>
Reviewed-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/iscsi/iscsi_target_configfs.c

index f4a24fa..2a9de24 100644 (file)
@@ -1005,74 +1005,15 @@ static struct configfs_attribute *lio_target_tpg_param_attrs[] = {
 
 /* Start items for lio_target_tpg_cit */
 
-static ssize_t lio_target_tpg_enable_show(struct config_item *item, char *page)
-{
-       struct se_portal_group *se_tpg = to_tpg(item);
-       struct iscsi_portal_group *tpg = container_of(se_tpg,
-                       struct iscsi_portal_group, tpg_se_tpg);
-       ssize_t len;
-
-       spin_lock(&tpg->tpg_state_lock);
-       len = sprintf(page, "%d\n",
-                       (tpg->tpg_state == TPG_STATE_ACTIVE) ? 1 : 0);
-       spin_unlock(&tpg->tpg_state_lock);
-
-       return len;
-}
-
-static ssize_t lio_target_tpg_enable_store(struct config_item *item,
-               const char *page, size_t count)
-{
-       struct se_portal_group *se_tpg = to_tpg(item);
-       struct iscsi_portal_group *tpg = container_of(se_tpg,
-                       struct iscsi_portal_group, tpg_se_tpg);
-       u32 op;
-       int ret;
-
-       ret = kstrtou32(page, 0, &op);
-       if (ret)
-               return ret;
-       if ((op != 1) && (op != 0)) {
-               pr_err("Illegal value for tpg_enable: %u\n", op);
-               return -EINVAL;
-       }
-
-       ret = iscsit_get_tpg(tpg);
-       if (ret < 0)
-               return -EINVAL;
-
-       if (op) {
-               ret = iscsit_tpg_enable_portal_group(tpg);
-               if (ret < 0)
-                       goto out;
-       } else {
-               /*
-                * iscsit_tpg_disable_portal_group() assumes force=1
-                */
-               ret = iscsit_tpg_disable_portal_group(tpg, 1);
-               if (ret < 0)
-                       goto out;
-       }
-
-       iscsit_put_tpg(tpg);
-       return count;
-out:
-       iscsit_put_tpg(tpg);
-       return -EINVAL;
-}
-
-
 static ssize_t lio_target_tpg_dynamic_sessions_show(struct config_item *item,
                char *page)
 {
        return target_show_dynamic_sessions(to_tpg(item), page);
 }
 
-CONFIGFS_ATTR(lio_target_tpg_, enable);
 CONFIGFS_ATTR_RO(lio_target_tpg_, dynamic_sessions);
 
 static struct configfs_attribute *lio_target_tpg_attrs[] = {
-       &lio_target_tpg_attr_enable,
        &lio_target_tpg_attr_dynamic_sessions,
        NULL,
 };
@@ -1129,6 +1070,37 @@ free_out:
        return NULL;
 }
 
+static int lio_target_tiqn_enabletpg(struct se_portal_group *se_tpg,
+                                    bool enable)
+{
+       struct iscsi_portal_group *tpg = container_of(se_tpg,
+                       struct iscsi_portal_group, tpg_se_tpg);
+       int ret;
+
+       ret = iscsit_get_tpg(tpg);
+       if (ret < 0)
+               return -EINVAL;
+
+       if (enable) {
+               ret = iscsit_tpg_enable_portal_group(tpg);
+               if (ret < 0)
+                       goto out;
+       } else {
+               /*
+                * iscsit_tpg_disable_portal_group() assumes force=1
+                */
+               ret = iscsit_tpg_disable_portal_group(tpg, 1);
+               if (ret < 0)
+                       goto out;
+       }
+
+       iscsit_put_tpg(tpg);
+       return 0;
+out:
+       iscsit_put_tpg(tpg);
+       return -EINVAL;
+}
+
 static void lio_target_tiqn_deltpg(struct se_portal_group *se_tpg)
 {
        struct iscsi_portal_group *tpg;
@@ -1556,6 +1528,7 @@ const struct target_core_fabric_ops iscsi_ops = {
        .fabric_drop_wwn                = lio_target_call_coredeltiqn,
        .add_wwn_groups                 = lio_target_add_wwn_groups,
        .fabric_make_tpg                = lio_target_tiqn_addtpg,
+       .fabric_enable_tpg              = lio_target_tiqn_enabletpg,
        .fabric_drop_tpg                = lio_target_tiqn_deltpg,
        .fabric_make_np                 = lio_target_call_addnptotpg,
        .fabric_drop_np                 = lio_target_call_delnpfromtpg,