bdev/iscsi: save string url rather than struct iscsi_url

iscsi_url is not need after bdev creation. Also implementing get_config
RPC call in next patches is quite problematic as information how bdev is
created using iSCSI URL is lost (eg username).

Change-Id: I8b097617c09bd4636c28531ca20a59919b2b4f84
Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-on: https://review.gerrithub.io/407769
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ziye Yang <optimistyzy@gmail.com>
This commit is contained in:
Pawel Wodkowski 2018-04-16 16:44:28 +02:00 committed by Daniel Verkamp
parent 81866c26d8
commit 5f2ad2620b

View File

@ -73,7 +73,7 @@ struct bdev_iscsi_lun {
struct spdk_bdev bdev;
struct iscsi_context *context;
char *initiator_iqn;
struct iscsi_url *url;
char *url;
pthread_mutex_t mutex;
uint32_t ch_count;
struct bdev_iscsi_io_channel *master_ch;
@ -87,7 +87,7 @@ struct bdev_iscsi_io_channel {
};
struct bdev_iscsi_conn_req {
struct iscsi_url *url;
char *url;
char *bdev_name;
struct iscsi_context *context;
TAILQ_ENTRY(bdev_iscsi_conn_req) link;
@ -125,6 +125,7 @@ static void iscsi_free_lun(struct bdev_iscsi_lun *lun)
{
assert(lun != NULL);
free(lun->bdev.name);
free(lun->url);
free(lun);
}
@ -133,7 +134,6 @@ bdev_iscsi_lun_cleanup(struct bdev_iscsi_lun *lun)
{
TAILQ_REMOVE(&g_iscsi_lun_head, lun, link);
iscsi_destroy_context(lun->context);
iscsi_destroy_url(lun->url);
iscsi_free_lun(lun);
if (TAILQ_EMPTY(&g_iscsi_lun_head)) {
bdev_iscsi_finish_done();
@ -429,8 +429,8 @@ bdev_iscsi_dump_info_json(void *ctx, struct spdk_json_write_ctx *w)
spdk_json_write_object_begin(w);
spdk_json_write_name(w, "initiator_name");
spdk_json_write_string(w, lun->initiator_iqn);
spdk_json_write_name(w, "target");
spdk_json_write_string(w, lun->url->target);
spdk_json_write_name(w, "url");
spdk_json_write_string(w, lun->url);
spdk_json_write_object_end(w);
return 0;
@ -445,7 +445,7 @@ static const struct spdk_bdev_fn_table iscsi_fn_table = {
};
static struct spdk_bdev *
create_iscsi_lun(struct iscsi_context *context, struct iscsi_url *url,
create_iscsi_lun(struct iscsi_context *context, char *url,
const char *name, uint64_t num_blocks, uint32_t block_size)
{
struct bdev_iscsi_lun *lun;
@ -581,6 +581,7 @@ static int
create_iscsi_disk(const char *bdev_name, const char *url, const char *initiator_iqn)
{
struct bdev_iscsi_conn_req *req;
struct iscsi_url *iscsi_url = NULL;
int rc;
if (!bdev_name || !url || !initiator_iqn || strlen(initiator_iqn) == 0) {
@ -594,15 +595,16 @@ create_iscsi_disk(const char *bdev_name, const char *url, const char *initiator_
}
req->bdev_name = strdup(bdev_name);
req->url = strdup(url);
req->context = iscsi_create_context(initiator_iqn);
if (!req->bdev_name || !req->context) {
if (!req->bdev_name || !req->url || !req->context) {
SPDK_ERRLOG("Out of memory\n");
rc = -ENOMEM;
goto err;
}
req->url = iscsi_parse_full_url(req->context, url);
if (url == NULL) {
iscsi_url = iscsi_parse_full_url(req->context, url);
if (iscsi_url == NULL) {
SPDK_ERRLOG("could not parse URL: %s\n", iscsi_get_error(req->context));
rc = -EINVAL;
goto err;
@ -610,20 +612,21 @@ create_iscsi_disk(const char *bdev_name, const char *url, const char *initiator_
rc = iscsi_set_session_type(req->context, ISCSI_SESSION_NORMAL);
rc = rc ? rc : iscsi_set_header_digest(req->context, ISCSI_HEADER_DIGEST_NONE);
rc = rc ? rc : iscsi_full_connect_async(req->context, req->url->portal, req->url->lun,
rc = rc ? rc : iscsi_full_connect_async(req->context, iscsi_url->portal, iscsi_url->lun,
iscsi_connect_cb, req);
if (rc < 0) {
SPDK_ERRLOG("Failed to connect provided URL=%s: %s\n", url, iscsi_get_error(req->context));
goto err;
}
iscsi_destroy_url(iscsi_url);
TAILQ_INSERT_TAIL(&g_iscsi_conn_req, req, link);
return 0;
err:
/* iscsi_destroy_url() is not NULL-proof */
if (req->url) {
iscsi_destroy_url(req->url);
if (iscsi_url) {
iscsi_destroy_url(iscsi_url);
}
if (req->context) {
@ -631,6 +634,7 @@ err:
}
free(req->bdev_name);
free(req->url);
free(req);
return rc;
}