From 1ac058ca08719d1c7567c8fc1f9c2c44d9920b7d Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 28 Aug 2018 15:04:44 +0900 Subject: [PATCH] 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 Reviewed-on: https://review.gerrithub.io/423621 Chandler-Test-Pool: SPDK Automated Test System Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker Reviewed-by: Kunal Sablok --- lib/bdev/raid/bdev_raid.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/lib/bdev/raid/bdev_raid.c b/lib/bdev/raid/bdev_raid.c index 2244bce67..cbae9d0a4 100644 --- a/lib/bdev/raid/bdev_raid.c +++ b/lib/bdev/raid/bdev_raid.c @@ -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);