bdevperf: Factor out constructing multiple targets for a bdev into a function

Factor out constructing multiple targets for a single bdev from
bdevperf_construct_targets() into an new helper function
_bdevperf_construct_targets().

Then change the return type of bdevperf_construct_targets() to void
and continue creating targets for subsequent bdevs even if failing
for any bdev. Additionally, remove a couple of comments in the source
code to avoid misunderstanding.

These changes will make us easier to use spdk_for_each_channel()
in bdevperf_construct_targets().

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I3363931749b863c8de619939939d401f14e43d15
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/638
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Shuhei Matsumoto 2020-02-09 17:26:31 -05:00 committed by Tomasz Zawadzki
parent 4579fc9d2c
commit ba9ce36527

View File

@ -1005,7 +1005,6 @@ bdevperf_construct_target(struct spdk_bdev *bdev)
target = malloc(sizeof(struct io_target)); target = malloc(sizeof(struct io_target));
if (!target) { if (!target) {
fprintf(stderr, "Unable to allocate memory for new target.\n"); fprintf(stderr, "Unable to allocate memory for new target.\n");
/* Return immediately because all mallocs will presumably fail after this */
return -ENOMEM; return -ENOMEM;
} }
@ -1013,7 +1012,6 @@ bdevperf_construct_target(struct spdk_bdev *bdev)
if (!target->name) { if (!target->name) {
fprintf(stderr, "Unable to allocate memory for target name.\n"); fprintf(stderr, "Unable to allocate memory for target name.\n");
free(target); free(target);
/* Return immediately because all mallocs will presumably fail after this */
return -ENOMEM; return -ENOMEM;
} }
@ -1074,11 +1072,10 @@ bdevperf_construct_target(struct spdk_bdev *bdev)
} }
static void static void
bdevperf_construct_targets(void) _bdevperf_construct_targets(struct spdk_bdev *bdev)
{ {
struct spdk_bdev *bdev;
int rc;
uint8_t core_idx, core_count_for_each_bdev; uint8_t core_idx, core_count_for_each_bdev;
int rc;
if (g_every_core_for_each_bdev == false) { if (g_every_core_for_each_bdev == false) {
core_count_for_each_bdev = 1; core_count_for_each_bdev = 1;
@ -1086,34 +1083,34 @@ bdevperf_construct_targets(void)
core_count_for_each_bdev = spdk_env_get_core_count(); core_count_for_each_bdev = spdk_env_get_core_count();
} }
for (core_idx = 0; core_idx < core_count_for_each_bdev; core_idx++) {
rc = bdevperf_construct_target(bdev);
if (rc != 0) {
return;
}
}
}
static void
bdevperf_construct_targets(void)
{
struct spdk_bdev *bdev;
if (g_target_bdev_name != NULL) { if (g_target_bdev_name != NULL) {
bdev = spdk_bdev_get_by_name(g_target_bdev_name); bdev = spdk_bdev_get_by_name(g_target_bdev_name);
if (!bdev) { if (bdev) {
_bdevperf_construct_targets(bdev);
} else {
fprintf(stderr, "Unable to find bdev '%s'\n", g_target_bdev_name); fprintf(stderr, "Unable to find bdev '%s'\n", g_target_bdev_name);
goto end;
}
for (core_idx = 0; core_idx < core_count_for_each_bdev; core_idx++) {
rc = bdevperf_construct_target(bdev);
if (rc != 0) {
goto end;
}
} }
} else { } else {
bdev = spdk_bdev_first_leaf(); bdev = spdk_bdev_first_leaf();
while (bdev != NULL) { while (bdev != NULL) {
for (core_idx = 0; core_idx < core_count_for_each_bdev; core_idx++) { _bdevperf_construct_targets(bdev);
rc = bdevperf_construct_target(bdev);
if (rc != 0) {
goto end;
}
}
bdev = spdk_bdev_next_leaf(bdev); bdev = spdk_bdev_next_leaf(bdev);
} }
} }
end:
bdevperf_construct_targets_tasks(); bdevperf_construct_targets_tasks();
} }