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 <james.r.harris@intel.com>
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I3d42fde22087352ce1d5dc80178bd8c5cac8cb7c
Reviewed-on: https://review.gerrithub.io/390843
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Shuhei Matsumoto 2018-01-10 14:55:53 +09:00 committed by Jim Harris
parent c3e890e92b
commit 583e969922
18 changed files with 107 additions and 200 deletions

View File

@ -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,

View File

@ -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

View File

@ -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,

View File

@ -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,

View File

@ -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));
}
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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 *

View File

@ -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);

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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 <name:id> pairs enclosed
in quotes. Format: 'lun_name0:id0 lun_name1:id1' etc
p.add_argument('bdev_name_id_pairs', help="""Whitespace-separated list of <bdev name:LUN ID> 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):

View File

@ -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']))

View File

@ -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)

View File

@ -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);

View File

@ -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",

View File

@ -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);

View File

@ -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);