From 583e96992243537c375f99f13893642c3666702f Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 10 Jan 2018 14:55:53 +0900 Subject: [PATCH] scsi: remove lun name There is no need to keep a lun name anymore - we always use the bdev name as the lun name so it is not providing any additional value. This also keeps us from associating the same bdev with different LUNs on different iSCSI target nodes or vhost-scsi controllers. Side effect of this change is: 1) Use "bdev_name" across the APIs to make it more clear what these names refer to. Signed-off-by: Jim Harris Signed-off-by: Shuhei Matsumoto Change-Id: I3d42fde22087352ce1d5dc80178bd8c5cac8cb7c Reviewed-on: https://review.gerrithub.io/390843 Tested-by: SPDK Automated Test System Reviewed-by: Ben Walker --- include/spdk/scsi.h | 12 +- include/spdk/vhost.h | 4 +- lib/iscsi/iscsi_rpc.c | 30 ++--- lib/iscsi/iscsi_subsystem.c | 2 +- lib/iscsi/tgt_node.c | 14 +- lib/iscsi/tgt_node.h | 8 +- lib/scsi/dev.c | 13 +- lib/scsi/lun.c | 16 +-- lib/scsi/scsi_internal.h | 5 +- lib/vhost/vhost_rpc.c | 8 +- lib/vhost/vhost_scsi.c | 35 +++-- scripts/rpc.py | 22 ++-- test/iscsi_tgt/rpc_config/rpc_config.py | 4 +- test/unit/lib/iscsi/common.c | 2 +- test/unit/lib/iscsi/tgt_node.c/tgt_node_ut.c | 2 +- test/unit/lib/scsi/dev.c/dev_ut.c | 122 +++--------------- test/unit/lib/scsi/lun.c/lun_ut.c | 4 +- .../lib/vhost/vhost_scsi.c/vhost_scsi_ut.c | 4 +- 18 files changed, 107 insertions(+), 200 deletions(-) diff --git a/include/spdk/scsi.h b/include/spdk/scsi.h index 6725ba1f7..3e34601b7 100644 --- a/include/spdk/scsi.h +++ b/include/spdk/scsi.h @@ -61,8 +61,6 @@ extern "C" { #define SPDK_SCSI_PORT_MAX_NAME_LENGTH 255 -#define SPDK_SCSI_LUN_MAX_NAME_LENGTH 64 - enum spdk_scsi_data_dir { SPDK_SCSI_DIR_NONE = 0, SPDK_SCSI_DIR_TO_DEV = 1, @@ -153,7 +151,7 @@ int spdk_scsi_init(void); void spdk_scsi_fini(void); int spdk_scsi_lun_get_id(const struct spdk_scsi_lun *lun); -const char *spdk_scsi_lun_get_name(const struct spdk_scsi_lun *lun); +const char *spdk_scsi_lun_get_bdev_name(const struct spdk_scsi_lun *lun); const struct spdk_scsi_dev *spdk_scsi_lun_get_dev(const struct spdk_scsi_lun *lun); const char *spdk_scsi_dev_get_name(const struct spdk_scsi_dev *dev); @@ -174,10 +172,8 @@ void spdk_scsi_dev_free_io_channels(struct spdk_scsi_dev *dev); * \brief Constructs a SCSI device object using the given parameters. * * \param name Name for the SCSI device. - * \param queue_depth Queue depth for the SCSI device. This queue depth is - * a combined queue depth for all LUNs in the device. - * \param lun_list List of LUN objects for the SCSI device. Caller is - * responsible for managing the memory containing this list. + * \param bdev_name_list List of bdev names to attach to the LUNs for this SCSI + * device. * \param lun_id_list List of LUN IDs for the LUN in this SCSI device. Caller is * responsible for managing the memory containing this list. * lun_id_list[x] is the LUN ID for lun_list[x]. @@ -188,7 +184,7 @@ void spdk_scsi_dev_free_io_channels(struct spdk_scsi_dev *dev); * \return The constructed spdk_scsi_dev object. */ struct spdk_scsi_dev *spdk_scsi_dev_construct(const char *name, - char *lun_name_list[], + const char *bdev_name_list[], int *lun_id_list, int num_luns, uint8_t protocol_id, diff --git a/include/spdk/vhost.h b/include/spdk/vhost.h index 0ce98f430..b0482d136 100644 --- a/include/spdk/vhost.h +++ b/include/spdk/vhost.h @@ -175,11 +175,11 @@ int spdk_vhost_scsi_dev_remove(struct spdk_vhost_dev *vdev); * * \param vdev vhost SCSI device * \param scsi_tgt_num slot to attach to - * \param lun_name name of the SPDK bdev to associate with SCSI LUN0 + * \param bdev_name name of the SPDK bdev to associate with SCSI LUN0 * \return 0 on success, negative errno on error. */ int spdk_vhost_scsi_dev_add_tgt(struct spdk_vhost_dev *vdev, unsigned scsi_tgt_num, - const char *lun_name); + const char *bdev_name); /** * Get SCSI target from vhost SCSI device on given slot. Max diff --git a/lib/iscsi/iscsi_rpc.c b/lib/iscsi/iscsi_rpc.c index ed85aefd2..71f78fcfe 100644 --- a/lib/iscsi/iscsi_rpc.c +++ b/lib/iscsi/iscsi_rpc.c @@ -305,8 +305,8 @@ spdk_rpc_get_target_nodes(struct spdk_jsonrpc_request *request, if (lun) { spdk_json_write_object_begin(w); - spdk_json_write_name(w, "name"); - spdk_json_write_string(w, spdk_scsi_lun_get_name(lun)); + spdk_json_write_name(w, "bdev_name"); + spdk_json_write_string(w, spdk_scsi_lun_get_bdev_name(lun)); spdk_json_write_name(w, "id"); spdk_json_write_int32(w, spdk_scsi_lun_get_id(lun)); spdk_json_write_object_end(w); @@ -371,23 +371,23 @@ decode_rpc_ig_tags(const struct spdk_json_val *val, void *out) #define RPC_CONSTRUCT_TARGET_NODE_MAX_LUN 64 -struct rpc_lun_names { +struct rpc_bdev_names { size_t num_names; char *names[RPC_CONSTRUCT_TARGET_NODE_MAX_LUN]; }; static int -decode_rpc_lun_names(const struct spdk_json_val *val, void *out) +decode_rpc_bdev_names(const struct spdk_json_val *val, void *out) { - struct rpc_lun_names *lun_names = out; + struct rpc_bdev_names *bdev_names = out; - return spdk_json_decode_array(val, spdk_json_decode_string, lun_names->names, + return spdk_json_decode_array(val, spdk_json_decode_string, bdev_names->names, RPC_CONSTRUCT_TARGET_NODE_MAX_LUN, - &lun_names->num_names, sizeof(char *)); + &bdev_names->num_names, sizeof(char *)); } static void -free_rpc_lun_names(struct rpc_lun_names *r) +free_rpc_bdev_names(struct rpc_bdev_names *r) { size_t i; @@ -418,7 +418,7 @@ struct rpc_target_node { struct rpc_pg_tags pg_tags; struct rpc_ig_tags ig_tags; - struct rpc_lun_names lun_names; + struct rpc_bdev_names bdev_names; struct rpc_lun_ids lun_ids; int32_t queue_depth; @@ -433,7 +433,7 @@ free_rpc_target_node(struct rpc_target_node *req) { free(req->name); free(req->alias_name); - free_rpc_lun_names(&req->lun_names); + free_rpc_bdev_names(&req->bdev_names); } static const struct spdk_json_object_decoder rpc_target_node_decoders[] = { @@ -441,7 +441,7 @@ static const struct spdk_json_object_decoder rpc_target_node_decoders[] = { {"alias_name", offsetof(struct rpc_target_node, alias_name), spdk_json_decode_string}, {"pg_tags", offsetof(struct rpc_target_node, pg_tags), decode_rpc_pg_tags}, {"ig_tags", offsetof(struct rpc_target_node, ig_tags), decode_rpc_ig_tags}, - {"lun_names", offsetof(struct rpc_target_node, lun_names), decode_rpc_lun_names}, + {"bdev_names", offsetof(struct rpc_target_node, bdev_names), decode_rpc_bdev_names}, {"lun_ids", offsetof(struct rpc_target_node, lun_ids), decode_rpc_lun_ids}, {"queue_depth", offsetof(struct rpc_target_node, queue_depth), spdk_json_decode_int32}, {"chap_disabled", offsetof(struct rpc_target_node, chap_disabled), spdk_json_decode_int32}, @@ -470,8 +470,8 @@ spdk_rpc_construct_target_node(struct spdk_jsonrpc_request *request, goto invalid; } - if (req.lun_names.num_names != req.lun_ids.num_ids) { - SPDK_ERRLOG("lun_names/lun_ids count mismatch\n"); + if (req.bdev_names.num_names != req.lun_ids.num_ids) { + SPDK_ERRLOG("bdev_names/lun_ids count mismatch\n"); goto invalid; } @@ -485,9 +485,9 @@ spdk_rpc_construct_target_node(struct spdk_jsonrpc_request *request, req.pg_tags.tags, req.ig_tags.tags, req.pg_tags.num_tags, - req.lun_names.names, + (const char **)req.bdev_names.names, req.lun_ids.ids, - req.lun_names.num_names, + req.bdev_names.num_names, req.queue_depth, req.chap_disabled, req.chap_required, diff --git a/lib/iscsi/iscsi_subsystem.c b/lib/iscsi/iscsi_subsystem.c index 98c3c87e3..b82085276 100644 --- a/lib/iscsi/iscsi_subsystem.c +++ b/lib/iscsi/iscsi_subsystem.c @@ -299,7 +299,7 @@ spdk_iscsi_config_dump_target_nodes(FILE *fp) fprintf(fp, TARGET_NODE_LUN_TMPL, spdk_scsi_lun_get_id(lun), - spdk_scsi_lun_get_name(lun)); + spdk_scsi_lun_get_bdev_name(lun)); } fprintf(fp, TARGET_NODE_QD_TMPL, diff --git a/lib/iscsi/tgt_node.c b/lib/iscsi/tgt_node.c index 4dfaed145..3268df04b 100644 --- a/lib/iscsi/tgt_node.c +++ b/lib/iscsi/tgt_node.c @@ -847,7 +847,7 @@ _spdk_iscsi_tgt_node * spdk_iscsi_tgt_node_construct(int target_index, const char *name, const char *alias, int *pg_tag_list, int *ig_tag_list, uint16_t num_maps, - char *lun_name_list[], int *lun_id_list, int num_luns, + const char *bdev_name_list[], int *lun_id_list, int num_luns, int queue_depth, int auth_chap_disabled, int auth_chap_required, int auth_chap_mutual, int auth_group, int header_digest, int data_digest) @@ -920,7 +920,7 @@ spdk_iscsi_tgt_node_construct(int target_index, } } - target->dev = spdk_scsi_dev_construct(fullname, lun_name_list, lun_id_list, num_luns, + target->dev = spdk_scsi_dev_construct(fullname, bdev_name_list, lun_id_list, num_luns, SPDK_SPC_PROTOCOL_IDENTIFIER_ISCSI, NULL, NULL); if (!target->dev) { SPDK_ERRLOG("Could not construct SCSI device\n"); @@ -976,8 +976,7 @@ spdk_cf_add_iscsi_tgt_node(struct spdk_conf_section *sp) int auth_chap_disabled, auth_chap_required, auth_chap_mutual; int i; int lun_id_list[SPDK_SCSI_DEV_MAX_LUN]; - char lun_name_array[SPDK_SCSI_DEV_MAX_LUN][SPDK_SCSI_LUN_MAX_NAME_LENGTH] = {}; - char *lun_name_list[SPDK_SCSI_DEV_MAX_LUN]; + const char *bdev_name_list[SPDK_SCSI_DEV_MAX_LUN]; int num_luns, queue_depth; target_num = spdk_conf_section_get_num(sp); @@ -1150,8 +1149,7 @@ spdk_cf_add_iscsi_tgt_node(struct spdk_conf_section *sp) continue; } - snprintf(lun_name_array[num_luns], SPDK_SCSI_LUN_MAX_NAME_LENGTH, "%s", val); - lun_name_list[num_luns] = lun_name_array[num_luns]; + bdev_name_list[num_luns] = val; lun_id_list[num_luns] = i; num_luns++; } @@ -1163,7 +1161,7 @@ spdk_cf_add_iscsi_tgt_node(struct spdk_conf_section *sp) target = spdk_iscsi_tgt_node_construct(target_num, name, alias, pg_tag_list, ig_tag_list, num_target_maps, - lun_name_list, lun_id_list, num_luns, queue_depth, + bdev_name_list, lun_id_list, num_luns, queue_depth, auth_chap_disabled, auth_chap_required, auth_chap_mutual, auth_group, header_digest, data_digest); @@ -1180,7 +1178,7 @@ spdk_cf_add_iscsi_tgt_node(struct spdk_conf_section *sp) SPDK_INFOLOG(SPDK_LOG_ISCSI, "device %d: LUN%d %s\n", spdk_scsi_dev_get_id(target->dev), spdk_scsi_lun_get_id(lun), - spdk_scsi_lun_get_name(lun)); + spdk_scsi_lun_get_bdev_name(lun)); } } diff --git a/lib/iscsi/tgt_node.h b/lib/iscsi/tgt_node.h index e3eb20f29..8f94f13bf 100644 --- a/lib/iscsi/tgt_node.h +++ b/lib/iscsi/tgt_node.h @@ -100,11 +100,17 @@ int spdk_iscsi_send_tgts(struct spdk_iscsi_conn *conn, const char *iiqn, */ typedef struct spdk_iscsi_tgt_node _spdk_iscsi_tgt_node; +/* + * bdev_name_list and lun_id_list are equal sized arrays of size num_luns. + * bdev_name_list refers to the names of the bdevs that will be used for the LUNs on the + * new target node. + * lun_id_list refers to the LUN IDs that will be used for the LUNs on the target node. + */ _spdk_iscsi_tgt_node * spdk_iscsi_tgt_node_construct(int target_index, const char *name, const char *alias, int *pg_tag_list, int *ig_tag_list, uint16_t num_maps, - char *lun_name_list[], int *lun_id_list, int num_luns, + const char *bdev_name_list[], int *lun_id_list, int num_luns, int queue_depth, int no_auth_chap, int auth_chap, int auth_chap_mutual, int auth_group, int header_digest, int data_digest); diff --git a/lib/scsi/dev.c b/lib/scsi/dev.c index 12c4daa58..fa0f35288 100644 --- a/lib/scsi/dev.c +++ b/lib/scsi/dev.c @@ -116,8 +116,9 @@ spdk_scsi_dev_delete_lun(struct spdk_scsi_dev *dev, typedef struct spdk_scsi_dev _spdk_scsi_dev; _spdk_scsi_dev * -spdk_scsi_dev_construct(const char *name, char *lun_name_list[], int *lun_id_list, int num_luns, - uint8_t protocol_id, void (*hotremove_cb)(const struct spdk_scsi_lun *, void *), +spdk_scsi_dev_construct(const char *name, const char *bdev_name_list[], + int *lun_id_list, int num_luns, uint8_t protocol_id, + void (*hotremove_cb)(const struct spdk_scsi_lun *, void *), void *hotremove_ctx) { struct spdk_scsi_dev *dev; @@ -145,7 +146,7 @@ spdk_scsi_dev_construct(const char *name, char *lun_name_list[], int *lun_id_lis } for (i = 0; i < num_luns; i++) { - if (lun_name_list[i] == NULL) { + if (bdev_name_list[i] == NULL) { SPDK_ERRLOG("NULL spdk_scsi_lun for LUN %d\n", lun_id_list[i]); return NULL; @@ -163,14 +164,14 @@ spdk_scsi_dev_construct(const char *name, char *lun_name_list[], int *lun_id_lis dev->protocol_id = protocol_id; for (i = 0; i < num_luns; i++) { - bdev = spdk_bdev_get_by_name(lun_name_list[i]); + bdev = spdk_bdev_get_by_name(bdev_name_list[i]); if (bdev == NULL) { SPDK_ERRLOG("device %s: cannot find bdev '%s' (target %d)\n", - name, lun_name_list[i], i); + name, bdev_name_list[i], i); goto error; } - lun = spdk_scsi_lun_construct(spdk_bdev_get_name(bdev), bdev, hotremove_cb, hotremove_ctx); + lun = spdk_scsi_lun_construct(bdev, hotremove_cb, hotremove_ctx); if (lun == NULL) { goto error; } diff --git a/lib/scsi/lun.c b/lib/scsi/lun.c index 9c1a8e787..0f3549893 100644 --- a/lib/scsi/lun.c +++ b/lib/scsi/lun.c @@ -227,15 +227,15 @@ spdk_scsi_lun_hot_remove(void *remove_ctx) /** * \brief Constructs a new spdk_scsi_lun object based on the provided parameters. * - * \param name Name for the SCSI LUN. * \param bdev bdev associated with this LUN * * \return NULL if bdev == NULL * \return pointer to the new spdk_scsi_lun object otherwise */ _spdk_scsi_lun * -spdk_scsi_lun_construct(const char *name, struct spdk_bdev *bdev, - void (*hotremove_cb)(const struct spdk_scsi_lun *, void *), void *hotremove_ctx) +spdk_scsi_lun_construct(struct spdk_bdev *bdev, + void (*hotremove_cb)(const struct spdk_scsi_lun *, void *), + void *hotremove_ctx) { struct spdk_scsi_lun *lun; int rc; @@ -254,7 +254,7 @@ spdk_scsi_lun_construct(const char *name, struct spdk_bdev *bdev, rc = spdk_bdev_open(bdev, true, spdk_scsi_lun_hot_remove, lun, &lun->bdev_desc); if (rc != 0) { - SPDK_ERRLOG("LUN %s: bdev %s cannot be opened, error=%d\n", name, spdk_bdev_get_name(bdev), rc); + SPDK_ERRLOG("bdev %s cannot be opened, error=%d\n", spdk_bdev_get_name(bdev), rc); free(lun); return NULL; } @@ -263,7 +263,6 @@ spdk_scsi_lun_construct(const char *name, struct spdk_bdev *bdev, lun->bdev = bdev; lun->io_channel = NULL; - snprintf(lun->name, sizeof(lun->name), "%s", name); lun->hotremove_cb = hotremove_cb; lun->hotremove_ctx = hotremove_ctx; @@ -308,7 +307,8 @@ int spdk_scsi_lun_allocate_io_channel(struct spdk_scsi_lun *lun) lun->ref++; return 0; } - SPDK_ERRLOG("io_channel already allocated for lun %s\n", lun->name); + SPDK_ERRLOG("io_channel already allocated for lun %s\n", + spdk_bdev_get_name(lun->bdev)); return -1; } @@ -339,9 +339,9 @@ spdk_scsi_lun_get_id(const struct spdk_scsi_lun *lun) } const char * -spdk_scsi_lun_get_name(const struct spdk_scsi_lun *lun) +spdk_scsi_lun_get_bdev_name(const struct spdk_scsi_lun *lun) { - return lun->name; + return spdk_bdev_get_name(lun->bdev); } const struct spdk_scsi_dev * diff --git a/lib/scsi/scsi_internal.h b/lib/scsi/scsi_internal.h index 62e96d8bd..94d1c3d82 100644 --- a/lib/scsi/scsi_internal.h +++ b/lib/scsi/scsi_internal.h @@ -95,9 +95,6 @@ struct spdk_scsi_lun { /** The reference number for this LUN, thus we can correctly free the io_channel */ uint32_t ref; - /** Name for this LUN. */ - char name[SPDK_SCSI_LUN_MAX_NAME_LENGTH]; - /** Poller to release the resource of the lun when it is hot removed */ struct spdk_poller *hotplug_poller; @@ -125,7 +122,7 @@ extern struct spdk_lun_db_entry *spdk_scsi_lun_list_head; */ typedef struct spdk_scsi_lun _spdk_scsi_lun; -_spdk_scsi_lun *spdk_scsi_lun_construct(const char *name, struct spdk_bdev *bdev, +_spdk_scsi_lun *spdk_scsi_lun_construct(struct spdk_bdev *bdev, void (*hotremove_cb)(const struct spdk_scsi_lun *, void *), void *hotremove_ctx); int spdk_scsi_lun_destruct(struct spdk_scsi_lun *lun); diff --git a/lib/vhost/vhost_rpc.c b/lib/vhost/vhost_rpc.c index 36c2b6f03..39a1fef6f 100644 --- a/lib/vhost/vhost_rpc.c +++ b/lib/vhost/vhost_rpc.c @@ -103,7 +103,7 @@ SPDK_RPC_REGISTER("construct_vhost_scsi_controller", spdk_rpc_construct_vhost_sc struct rpc_add_vhost_scsi_ctrlr_lun { char *ctrlr; uint32_t scsi_target_num; - char *lun_name; + char *bdev_name; struct spdk_jsonrpc_request *request; }; @@ -112,14 +112,14 @@ static void free_rpc_add_vhost_scsi_ctrlr_lun(struct rpc_add_vhost_scsi_ctrlr_lun *req) { free(req->ctrlr); - free(req->lun_name); + free(req->bdev_name); free(req); } static const struct spdk_json_object_decoder rpc_vhost_add_lun[] = { {"ctrlr", offsetof(struct rpc_add_vhost_scsi_ctrlr_lun, ctrlr), spdk_json_decode_string }, {"scsi_target_num", offsetof(struct rpc_add_vhost_scsi_ctrlr_lun, scsi_target_num), spdk_json_decode_uint32}, - {"lun_name", offsetof(struct rpc_add_vhost_scsi_ctrlr_lun, lun_name), spdk_json_decode_string }, + {"bdev_name", offsetof(struct rpc_add_vhost_scsi_ctrlr_lun, bdev_name), spdk_json_decode_string }, }; static int @@ -135,7 +135,7 @@ spdk_rpc_add_vhost_scsi_lun_cb(struct spdk_vhost_dev *vdev, void *arg) goto invalid; } - rc = spdk_vhost_scsi_dev_add_tgt(vdev, rpc->scsi_target_num, rpc->lun_name); + rc = spdk_vhost_scsi_dev_add_tgt(vdev, rpc->scsi_target_num, rpc->bdev_name); if (rc < 0) { goto invalid; } diff --git a/lib/vhost/vhost_scsi.c b/lib/vhost/vhost_scsi.c index e160d9d58..47e188a75 100644 --- a/lib/vhost/vhost_scsi.c +++ b/lib/vhost/vhost_scsi.c @@ -780,12 +780,12 @@ spdk_vhost_scsi_lun_hotremove(const struct spdk_scsi_lun *lun, void *arg) int spdk_vhost_scsi_dev_add_tgt(struct spdk_vhost_dev *vdev, unsigned scsi_tgt_num, - const char *lun_name) + const char *bdev_name) { struct spdk_vhost_scsi_dev *svdev; char target_name[SPDK_SCSI_DEV_MAX_NAME]; int lun_id_list[1]; - char *lun_names_list[1]; + const char *bdev_names_list[1]; svdev = to_scsi_dev(vdev); if (svdev == NULL) { @@ -798,12 +798,9 @@ spdk_vhost_scsi_dev_add_tgt(struct spdk_vhost_dev *vdev, unsigned scsi_tgt_num, return -EINVAL; } - if (lun_name == NULL) { + if (bdev_name == NULL) { SPDK_ERRLOG("No lun name specified \n"); return -EINVAL; - } else if (strlen(lun_name) >= SPDK_SCSI_DEV_MAX_NAME) { - SPDK_ERRLOG("LUN name '%s' too long (max %d).\n", lun_name, SPDK_SCSI_DEV_MAX_NAME - 1); - return -1; } if (vdev->lcore != -1 && !spdk_vhost_dev_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) { @@ -821,16 +818,16 @@ spdk_vhost_scsi_dev_add_tgt(struct spdk_vhost_dev *vdev, unsigned scsi_tgt_num, */ snprintf(target_name, sizeof(target_name), "Target %u", scsi_tgt_num); lun_id_list[0] = 0; - lun_names_list[0] = (char *)lun_name; + bdev_names_list[0] = (char *)bdev_name; svdev->scsi_dev_state[scsi_tgt_num].removed = false; - svdev->scsi_dev[scsi_tgt_num] = spdk_scsi_dev_construct(target_name, lun_names_list, lun_id_list, + svdev->scsi_dev[scsi_tgt_num] = spdk_scsi_dev_construct(target_name, bdev_names_list, lun_id_list, 1, SPDK_SPC_PROTOCOL_IDENTIFIER_SAS, spdk_vhost_scsi_lun_hotremove, svdev); if (svdev->scsi_dev[scsi_tgt_num] == NULL) { - SPDK_ERRLOG("Couldn't create spdk SCSI target '%s' using lun device '%s' in controller: %s\n", - target_name, lun_name, vdev->name); + SPDK_ERRLOG("Couldn't create spdk SCSI target '%s' using bdev '%s' in controller: %s\n", + target_name, bdev_name, vdev->name); return -EINVAL; } spdk_scsi_dev_add_port(svdev->scsi_dev[scsi_tgt_num], 0, "vhost"); @@ -840,8 +837,8 @@ spdk_vhost_scsi_dev_add_tgt(struct spdk_vhost_dev *vdev, unsigned scsi_tgt_num, eventq_enqueue(svdev, scsi_tgt_num, VIRTIO_SCSI_T_TRANSPORT_RESET, VIRTIO_SCSI_EVT_RESET_RESCAN); } - SPDK_NOTICELOG("Controller %s: defined target '%s' using lun '%s'\n", - vdev->name, target_name, lun_name); + SPDK_NOTICELOG("Controller %s: defined target '%s' using bdev '%s'\n", + vdev->name, target_name, bdev_name); return 0; } @@ -910,7 +907,7 @@ spdk_vhost_scsi_controller_construct(void) struct spdk_vhost_dev *vdev; int i, dev_num; unsigned ctrlr_num = 0; - char *lun_name, *tgt_num_str; + char *bdev_name, *tgt_num_str; char *cpumask; char *name; char *keyword; @@ -967,16 +964,16 @@ spdk_vhost_scsi_controller_construct(void) } dev_num = (int)strtol(tgt_num_str, NULL, 10); - lun_name = spdk_conf_section_get_nmval(sp, keyword, i, 1); - if (lun_name == NULL) { - SPDK_ERRLOG("%s: Invalid or missing LUN name for target %d\n", name, dev_num); + bdev_name = spdk_conf_section_get_nmval(sp, keyword, i, 1); + if (bdev_name == NULL) { + SPDK_ERRLOG("%s: Invalid or missing bdev name for target %d\n", name, dev_num); return -1; } else if (spdk_conf_section_get_nmval(sp, keyword, i, 2)) { SPDK_ERRLOG("%s: Only one LUN per vhost SCSI device supported\n", name); return -1; } - if (spdk_vhost_scsi_dev_add_tgt(vdev, dev_num, lun_name) < 0) { + if (spdk_vhost_scsi_dev_add_tgt(vdev, dev_num, bdev_name) < 0) { return -1; } } @@ -1199,8 +1196,8 @@ spdk_vhost_scsi_config_json(struct spdk_vhost_dev *vdev, struct spdk_json_write_ spdk_json_write_name(w, "id"); spdk_json_write_int32(w, spdk_scsi_lun_get_id(lun)); - spdk_json_write_name(w, "name"); - spdk_json_write_string(w, spdk_scsi_lun_get_name(lun)); + spdk_json_write_name(w, "bdev_name"); + spdk_json_write_string(w, spdk_scsi_lun_get_bdev_name(lun)); spdk_json_write_object_end(w); } diff --git a/scripts/rpc.py b/scripts/rpc.py index 0a76adf23..eda1e5b7e 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -105,10 +105,10 @@ p.set_defaults(func=get_target_nodes) def construct_target_node(args): - lun_name_id_dict = dict(u.split(":") - for u in args.lun_name_id_pairs.strip().split(" ")) - lun_names = lun_name_id_dict.keys() - lun_ids = list(map(int, lun_name_id_dict.values())) + bdev_name_id_dict = dict(u.split(":") + for u in args.bdev_name_id_pairs.strip().split(" ")) + bdev_names = bdev_name_id_dict.keys() + lun_ids = list(map(int, bdev_name_id_dict.values())) pg_tags = [] ig_tags = [] @@ -122,7 +122,7 @@ def construct_target_node(args): 'alias_name': args.alias_name, 'pg_tags': pg_tags, 'ig_tags': ig_tags, - 'lun_names': lun_names, + 'bdev_names': bdev_names, 'lun_ids': lun_ids, 'queue_depth': args.queue_depth, 'chap_disabled': args.chap_disabled, @@ -135,12 +135,12 @@ def construct_target_node(args): p = subparsers.add_parser('construct_target_node', help='Add a target node') p.add_argument('name', help='Target node name (ASCII)') p.add_argument('alias_name', help='Target node alias name (ASCII)') -p.add_argument('lun_name_id_pairs', help="""Whitespace-separated list of LUN pairs enclosed -in quotes. Format: 'lun_name0:id0 lun_name1:id1' etc +p.add_argument('bdev_name_id_pairs', help="""Whitespace-separated list of pairs enclosed +in quotes. Format: 'bdev_name0:id0 bdev_name1:id1' etc Example: 'Malloc0:0 Malloc1:1 Malloc5:2' -*** The LUNs must pre-exist *** +*** The bdevs must pre-exist *** *** LUN0 (id = 0) is required *** -*** LUN names cannot contain space or colon characters ***""") +*** bdev names cannot contain space or colon characters ***""") p.add_argument('pg_ig_mappings', help="""List of (Portal_Group_Tag:Initiator_Group_Tag) mappings Whitespace separated, quoted, mapping defined with colon separated list of "tags" (int > 0) @@ -759,7 +759,7 @@ p.set_defaults(func=construct_vhost_scsi_controller) def add_vhost_scsi_lun(args): params = { 'ctrlr': args.ctrlr, - 'lun_name': args.lun_name, + 'bdev_name': args.bdev_name, 'scsi_target_num': args.scsi_target_num } @@ -768,7 +768,7 @@ def add_vhost_scsi_lun(args): p = subparsers.add_parser('add_vhost_scsi_lun', help='Add lun to vhost controller') p.add_argument('ctrlr', help='conntroller name where add lun') p.add_argument('scsi_target_num', help='scsi_target_num', type=int) -p.add_argument('lun_name', help='lun name') +p.add_argument('bdev_name', help='bdev name') p.set_defaults(func=add_vhost_scsi_lun) def remove_vhost_scsi_target(args): diff --git a/test/iscsi_tgt/rpc_config/rpc_config.py b/test/iscsi_tgt/rpc_config/rpc_config.py index 2e3dab5f6..e6c5b50cd 100755 --- a/test/iscsi_tgt/rpc_config/rpc_config.py +++ b/test/iscsi_tgt/rpc_config/rpc_config.py @@ -290,8 +290,8 @@ def verify_target_nodes_rpc_methods(rpc_py, rpc_param): jsonvalues = json.loads(output) verify(len(jsonvalues) == 1, 1, "get_target_nodes returned {} nodes, expected 1".format(len(jsonvalues))) - verify(jsonvalues[0]['luns'][0]['name'] == "Malloc" + str(rpc_param['lun_total']), 1, - "lun_name value is {}, expected Malloc{}".format(jsonvalues[0]['luns'][0]['name'], str(rpc_param['lun_total']))) + verify(jsonvalues[0]['luns'][0]['bdev_name'] == "Malloc" + str(rpc_param['lun_total']), 1, + "bdev_name value is {}, expected Malloc{}".format(jsonvalues[0]['luns'][0]['bdev_name'], str(rpc_param['lun_total']))) name = jsonvalues[0]['name'] verify(name == "iqn.2016-06.io.spdk:" + rpc_param['target_name'], 1, "target name value is {}, expected {}".format(name, "iqn.2016-06.io.spdk:" + rpc_param['target_name'])) diff --git a/test/unit/lib/iscsi/common.c b/test/unit/lib/iscsi/common.c index 82ff2a17d..15c0c43f0 100644 --- a/test/unit/lib/iscsi/common.c +++ b/test/unit/lib/iscsi/common.c @@ -113,7 +113,7 @@ spdk_event_allocate(uint32_t core, spdk_event_fn fn, void *arg1, void *arg2) } struct spdk_scsi_dev * - spdk_scsi_dev_construct(const char *name, char **lun_name_list, + spdk_scsi_dev_construct(const char *name, const char **bdev_name_list, int *lun_id_list, int num_luns, uint8_t protocol_id, void (*hotremove_cb)(const struct spdk_scsi_lun *, void *), void *hotremove_ctx) diff --git a/test/unit/lib/iscsi/tgt_node.c/tgt_node_ut.c b/test/unit/lib/iscsi/tgt_node.c/tgt_node_ut.c index 99b8dbb76..050a1d392 100644 --- a/test/unit/lib/iscsi/tgt_node.c/tgt_node_ut.c +++ b/test/unit/lib/iscsi/tgt_node.c/tgt_node_ut.c @@ -51,7 +51,7 @@ DEFINE_STUB(spdk_scsi_dev_get_id, (const struct spdk_scsi_dev *dev), 0); -DEFINE_STUB(spdk_scsi_lun_get_name, +DEFINE_STUB(spdk_scsi_lun_get_bdev_name, const char *, (const struct spdk_scsi_lun *lun), NULL); diff --git a/test/unit/lib/scsi/dev.c/dev_ut.c b/test/unit/lib/scsi/dev.c/dev_ut.c index 0ca6d12f9..af6f3be29 100644 --- a/test/unit/lib/scsi/dev.c/dev_ut.c +++ b/test/unit/lib/scsi/dev.c/dev_ut.c @@ -51,19 +51,6 @@ static struct spdk_bdev g_bdevs[] = { {"malloc1"}, }; -struct lun_entry { - TAILQ_ENTRY(lun_entry) lun_entries; - struct spdk_scsi_lun *lun; -}; -TAILQ_HEAD(, lun_entry) g_lun_head; - -static int -test_setup(void) -{ - TAILQ_INIT(&g_lun_head); - return 0; -} - const char * spdk_bdev_get_name(const struct spdk_bdev *bdev) { @@ -90,49 +77,23 @@ spdk_scsi_task_put(struct spdk_scsi_task *task) } _spdk_scsi_lun * -spdk_scsi_lun_construct(const char *name, struct spdk_bdev *bdev, +spdk_scsi_lun_construct(struct spdk_bdev *bdev, void (*hotremove_cb)(const struct spdk_scsi_lun *, void *), void *hotremove_ctx) { struct spdk_scsi_lun *lun; - struct lun_entry *p; - - TAILQ_FOREACH(p, &g_lun_head, lun_entries) { - CU_ASSERT_FATAL(p->lun != NULL); - if (strcmp(p->lun->name, name) == 0) { - return NULL; - } - } lun = calloc(1, sizeof(struct spdk_scsi_lun)); SPDK_CU_ASSERT_FATAL(lun != NULL); - snprintf(lun->name, sizeof(lun->name), "%s", name); + lun->bdev = bdev; - p = calloc(1, sizeof(struct lun_entry)); - SPDK_CU_ASSERT_FATAL(p != NULL); - - p->lun = lun; - - TAILQ_INSERT_TAIL(&g_lun_head, p, lun_entries); - return lun; } int spdk_scsi_lun_destruct(struct spdk_scsi_lun *lun) { - struct lun_entry *p, *tmp; - - TAILQ_FOREACH_SAFE(p, &g_lun_head, lun_entries, tmp) { - CU_ASSERT_FATAL(p->lun != NULL); - if (strncmp(p->lun->name, lun->name, sizeof(lun->name)) == 0) { - TAILQ_REMOVE(&g_lun_head, p, lun_entries); - free(p); - break; - } - } - free(lun); return 0; } @@ -229,10 +190,10 @@ static void dev_construct_num_luns_zero(void) { struct spdk_scsi_dev *dev; - char *lun_name_list[1] = {}; + const char *bdev_name_list[1] = {}; int lun_id_list[1] = { 0 }; - dev = spdk_scsi_dev_construct("Name", lun_name_list, lun_id_list, 0, + dev = spdk_scsi_dev_construct("Name", bdev_name_list, lun_id_list, 0, SPDK_SPC_PROTOCOL_IDENTIFIER_ISCSI, NULL, NULL); /* dev should be null since we passed num_luns = 0 */ @@ -243,12 +204,12 @@ static void dev_construct_no_lun_zero(void) { struct spdk_scsi_dev *dev; - char *lun_name_list[1] = {}; + const char *bdev_name_list[1] = {}; int lun_id_list[1] = { 0 }; lun_id_list[0] = 1; - dev = spdk_scsi_dev_construct("Name", lun_name_list, lun_id_list, 1, + dev = spdk_scsi_dev_construct("Name", bdev_name_list, lun_id_list, 1, SPDK_SPC_PROTOCOL_IDENTIFIER_ISCSI, NULL, NULL); /* dev should be null since no LUN0 was specified (lun_id_list[0] = 1) */ @@ -259,10 +220,10 @@ static void dev_construct_null_lun(void) { struct spdk_scsi_dev *dev; - char *lun_name_list[1] = {}; + const char *bdev_name_list[1] = {}; int lun_id_list[1] = { 0 }; - dev = spdk_scsi_dev_construct("Name", lun_name_list, lun_id_list, 1, + dev = spdk_scsi_dev_construct("Name", bdev_name_list, lun_id_list, 1, SPDK_SPC_PROTOCOL_IDENTIFIER_ISCSI, NULL, NULL); /* dev should be null since no LUN0 was specified (lun_list[0] = NULL) */ @@ -273,10 +234,10 @@ static void dev_construct_success(void) { struct spdk_scsi_dev *dev; - char *lun_name_list[1] = {"malloc0"}; + const char *bdev_name_list[1] = {"malloc0"}; int lun_id_list[1] = { 0 }; - dev = spdk_scsi_dev_construct("Name", lun_name_list, lun_id_list, 1, + dev = spdk_scsi_dev_construct("Name", bdev_name_list, lun_id_list, 1, SPDK_SPC_PROTOCOL_IDENTIFIER_ISCSI, NULL, NULL); /* Successfully constructs and returns a dev */ @@ -284,18 +245,16 @@ dev_construct_success(void) /* free the dev */ spdk_scsi_dev_destruct(dev); - - CU_ASSERT(TAILQ_EMPTY(&g_lun_head)); } static void dev_construct_success_lun_zero_not_first(void) { struct spdk_scsi_dev *dev; - char *lun_name_list[2] = {"malloc1", "malloc0"}; + const char *bdev_name_list[2] = {"malloc1", "malloc0"}; int lun_id_list[2] = { 1, 0 }; - dev = spdk_scsi_dev_construct("Name", lun_name_list, lun_id_list, 2, + dev = spdk_scsi_dev_construct("Name", bdev_name_list, lun_id_list, 2, SPDK_SPC_PROTOCOL_IDENTIFIER_ISCSI, NULL, NULL); /* Successfully constructs and returns a dev */ @@ -303,60 +262,17 @@ dev_construct_success_lun_zero_not_first(void) /* free the dev */ spdk_scsi_dev_destruct(dev); - - CU_ASSERT(TAILQ_EMPTY(&g_lun_head)); -} - -static void -dev_construct_same_lun_two_devices(void) -{ - struct spdk_scsi_dev *dev, *dev2; - char *lun_name_list[1] = {"malloc0"}; - int lun_id_list[1] = { 0 }; - - dev = spdk_scsi_dev_construct("Name", lun_name_list, lun_id_list, 1, - SPDK_SPC_PROTOCOL_IDENTIFIER_ISCSI, NULL, NULL); - - /* Successfully constructs and returns a dev */ - CU_ASSERT_TRUE(dev != NULL); - - dev2 = spdk_scsi_dev_construct("Name2", lun_name_list, lun_id_list, 1, - SPDK_SPC_PROTOCOL_IDENTIFIER_ISCSI, NULL, NULL); - - /* Fails to construct dev and returns NULL */ - CU_ASSERT_TRUE(dev2 == NULL); - - /* free the dev */ - spdk_scsi_dev_destruct(dev); - - CU_ASSERT(TAILQ_EMPTY(&g_lun_head)); -} - -static void -dev_construct_same_lun_one_device(void) -{ - struct spdk_scsi_dev *dev; - char *lun_name_list[2] = {"malloc0", "malloc0"}; - int lun_id_list[2] = { 0, 1 }; - - dev = spdk_scsi_dev_construct("Name", lun_name_list, lun_id_list, 2, - SPDK_SPC_PROTOCOL_IDENTIFIER_ISCSI, NULL, NULL); - - /* Fails to construct dev and returns NULL */ - CU_ASSERT_TRUE(dev == NULL); - - CU_ASSERT(TAILQ_EMPTY(&g_lun_head)); } static void dev_queue_mgmt_task_success(void) { struct spdk_scsi_dev *dev; - char *lun_name_list[1] = {"malloc0"}; + const char *bdev_name_list[1] = {"malloc0"}; int lun_id_list[1] = { 0 }; struct spdk_scsi_task *task; - dev = spdk_scsi_dev_construct("Name", lun_name_list, lun_id_list, 1, + dev = spdk_scsi_dev_construct("Name", bdev_name_list, lun_id_list, 1, SPDK_SPC_PROTOCOL_IDENTIFIER_ISCSI, NULL, NULL); /* Successfully constructs and returns a dev */ @@ -375,11 +291,11 @@ static void dev_queue_task_success(void) { struct spdk_scsi_dev *dev; - char *lun_name_list[1] = {"malloc0"}; + const char *bdev_name_list[1] = {"malloc0"}; int lun_id_list[1] = { 0 }; struct spdk_scsi_task *task; - dev = spdk_scsi_dev_construct("Name", lun_name_list, lun_id_list, 1, + dev = spdk_scsi_dev_construct("Name", bdev_name_list, lun_id_list, 1, SPDK_SPC_PROTOCOL_IDENTIFIER_ISCSI, NULL, NULL); /* Successfully constructs and returns a dev */ @@ -626,7 +542,7 @@ main(int argc, char **argv) return CU_get_error(); } - suite = CU_add_suite("dev_suite", test_setup, NULL); + suite = CU_add_suite("dev_suite", NULL, NULL); if (suite == NULL) { CU_cleanup_registry(); return CU_get_error(); @@ -647,10 +563,6 @@ main(int argc, char **argv) || CU_add_test(suite, "construct - success", dev_construct_success) == NULL || CU_add_test(suite, "construct - success - LUN zero not first", dev_construct_success_lun_zero_not_first) == NULL - || CU_add_test(suite, "construct - same lun on two devices", - dev_construct_same_lun_two_devices) == NULL - || CU_add_test(suite, "construct - same lun on once device", - dev_construct_same_lun_one_device) == NULL || CU_add_test(suite, "dev queue task mgmt - success", dev_queue_mgmt_task_success) == NULL || CU_add_test(suite, "dev queue task - success", diff --git a/test/unit/lib/scsi/lun.c/lun_ut.c b/test/unit/lib/scsi/lun.c/lun_ut.c index 96cf2de7e..2dc81b68b 100644 --- a/test/unit/lib/scsi/lun.c/lun_ut.c +++ b/test/unit/lib/scsi/lun.c/lun_ut.c @@ -206,7 +206,7 @@ lun_construct(void) struct spdk_scsi_lun *lun; struct spdk_bdev bdev; - lun = spdk_scsi_lun_construct("lun0", &bdev, NULL, NULL); + lun = spdk_scsi_lun_construct(&bdev, NULL, NULL); SPDK_CU_ASSERT_FATAL(lun != NULL); return lun; @@ -568,7 +568,7 @@ lun_construct_null_ctx(void) { struct spdk_scsi_lun *lun; - lun = spdk_scsi_lun_construct("lun0", NULL, NULL, NULL); + lun = spdk_scsi_lun_construct(NULL, NULL, NULL); /* lun should be NULL since we passed NULL for the ctx pointer. */ CU_ASSERT(lun == NULL); diff --git a/test/unit/lib/vhost/vhost_scsi.c/vhost_scsi_ut.c b/test/unit/lib/vhost/vhost_scsi.c/vhost_scsi_ut.c index 9eef75e93..e642cb7e3 100644 --- a/test/unit/lib/vhost/vhost_scsi.c/vhost_scsi_ut.c +++ b/test/unit/lib/vhost/vhost_scsi.c/vhost_scsi_ut.c @@ -47,7 +47,7 @@ DEFINE_STUB_V(spdk_scsi_task_put, (struct spdk_scsi_task *task)); DEFINE_STUB(spdk_scsi_dev_allocate_io_channels, int, (struct spdk_scsi_dev *dev), 0); -DEFINE_STUB_P(spdk_scsi_lun_get_name, const char, (const struct spdk_scsi_lun *lun), {0}); +DEFINE_STUB_P(spdk_scsi_lun_get_bdev_name, const char, (const struct spdk_scsi_lun *lun), {0}); DEFINE_STUB(spdk_scsi_lun_get_id, int, (const struct spdk_scsi_lun *lun), 0); DEFINE_STUB(spdk_scsi_dev_has_pending_tasks, bool, (const struct spdk_scsi_dev *dev), false); DEFINE_STUB_V(spdk_scsi_dev_free_io_channels, (struct spdk_scsi_dev *dev)); @@ -64,7 +64,7 @@ DEFINE_STUB_V(spdk_scsi_task_process_null_lun, (struct spdk_scsi_task *task)); DEFINE_STUB_P(spdk_scsi_lun_get_dev, const struct spdk_scsi_dev, (const struct spdk_scsi_lun *lun), {0}); DEFINE_STUB_P(spdk_scsi_dev_get_name, const char, (const struct spdk_scsi_dev *dev), {0}); DEFINE_STUB_P(spdk_scsi_dev_construct, struct spdk_scsi_dev, (const char *name, - char *lun_name_list[], int *lun_id_list, int num_luns, uint8_t protocol_id, + const char *bdev_name_list[], int *lun_id_list, int num_luns, uint8_t protocol_id, void (*hotremove_cb)(const struct spdk_scsi_lun *, void *), void *hotremove_ctx), {0}); DEFINE_STUB(spdk_scsi_dev_add_port, int, (struct spdk_scsi_dev *dev, uint64_t id, const char *name), 0);