bdev/raid: Set RAID bdev's name at its creation to prevent unnamed device

Next patch will keep RAID bdev without removal when adding any base
bdev to the RAID bdev fails for some reason for construct_raid_bdev
RPC.

The half-baked RAID bdev will become unnamed and this should be avoided.

Change-Id: I3ad0d58a04a7638b9b286babe0e56e057e7f5d0d
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/423621
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Kunal Sablok <kunal.sablok@intel.com>
This commit is contained in:
Shuhei Matsumoto 2018-08-28 15:04:44 +09:00 committed by Jim Harris
parent 12881ad9bc
commit 1ac058ca08

View File

@ -1127,6 +1127,7 @@ static int
raid_bdev_create(struct raid_bdev_config *raid_cfg, struct raid_bdev **_raid_bdev)
{
struct raid_bdev *raid_bdev;
struct spdk_bdev *raid_bdev_gen;
raid_bdev = calloc(1, sizeof(*raid_bdev));
if (!raid_bdev) {
@ -1146,6 +1147,22 @@ raid_bdev_create(struct raid_bdev_config *raid_cfg, struct raid_bdev **_raid_bde
raid_bdev->strip_size = raid_cfg->strip_size;
raid_bdev->state = RAID_BDEV_STATE_CONFIGURING;
raid_bdev->config = raid_cfg;
raid_bdev_gen = &raid_bdev->bdev;
raid_bdev_gen->name = strdup(raid_cfg->name);
if (!raid_bdev_gen->name) {
SPDK_ERRLOG("Unable to allocate name for raid\n");
free(raid_bdev->base_bdev_info);
free(raid_bdev);
return -ENOMEM;
}
raid_bdev_gen->product_name = "Pooled Device";
raid_bdev_gen->ctxt = raid_bdev;
raid_bdev_gen->fn_table = &g_raid_bdev_fn_table;
raid_bdev_gen->module = &g_raid_if;
TAILQ_INSERT_TAIL(&g_spdk_raid_bdev_configuring_list, raid_bdev, state_link);
TAILQ_INSERT_TAIL(&g_spdk_raid_bdev_list, raid_bdev, global_link);
@ -1238,19 +1255,10 @@ raid_bdev_configure(struct raid_bdev *raid_bdev)
}
raid_bdev_gen = &raid_bdev->bdev;
raid_bdev_gen->name = strdup(raid_bdev->config->name);
if (!raid_bdev_gen->name) {
SPDK_ERRLOG("Unable to allocate name for raid\n");
rc = -ENOMEM;
goto offline;
}
raid_bdev_gen->product_name = "Pooled Device";
raid_bdev_gen->write_cache = 0;
raid_bdev_gen->blocklen = blocklen;
raid_bdev_gen->optimal_io_boundary = 0;
raid_bdev_gen->ctxt = raid_bdev;
raid_bdev_gen->fn_table = &g_raid_bdev_fn_table;
raid_bdev_gen->module = &g_raid_if;
raid_bdev->strip_size = (raid_bdev->strip_size * 1024) / blocklen;
raid_bdev->strip_size_shift = spdk_u32log2(raid_bdev->strip_size);
raid_bdev->blocklen_shift = spdk_u32log2(blocklen);