bdev/raid: Refactor helper function check_and_remove_raid_bdev()

Other helper functions raid_bdev_free_base_bdev_resource() and
raid_bdev_cleanup() can be used in check_and_remove_raid_bdev().

Change-Id: I24ce02371f5bb29c3b6111da4475a9ad08e65c21
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/422794
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Kunal Sablok <kunal.sablok@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Shuhei Matsumoto 2018-08-21 11:05:24 +09:00 committed by Ben Walker
parent 485c4b1346
commit b39b6024b5
3 changed files with 6 additions and 15 deletions

View File

@ -159,7 +159,7 @@ raid_bdev_destroy_cb(void *io_device, void *ctx_buf)
* returns: * returns:
* none * none
*/ */
static void void
raid_bdev_cleanup(struct raid_bdev *raid_bdev) raid_bdev_cleanup(struct raid_bdev *raid_bdev)
{ {
SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid_bdev_cleanup, %p name %s, state %u, config %p\n", SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid_bdev_cleanup, %p name %s, state %u, config %p\n",
@ -194,7 +194,7 @@ raid_bdev_cleanup(struct raid_bdev *raid_bdev)
* 0 - success * 0 - success
* non zero - failure * non zero - failure
*/ */
static void void
raid_bdev_free_base_bdev_resource(struct raid_bdev *raid_bdev, uint32_t base_bdev_slot) raid_bdev_free_base_bdev_resource(struct raid_bdev *raid_bdev, uint32_t base_bdev_slot)
{ {
struct raid_base_bdev_info *info; struct raid_base_bdev_info *info;

View File

@ -217,6 +217,8 @@ extern struct raid_config g_spdk_raid_config;
void raid_bdev_remove_base_bdev(void *ctx); void raid_bdev_remove_base_bdev(void *ctx);
int raid_bdev_add_base_device(struct spdk_bdev *bdev); int raid_bdev_add_base_device(struct spdk_bdev *bdev);
void raid_bdev_free_base_bdev_resource(struct raid_bdev *raid_bdev, uint32_t slot);
void raid_bdev_cleanup(struct raid_bdev *raid_bdev);
int raid_bdev_config_add(const char *raid_name, int strip_size, int num_base_bdevs, int raid_bdev_config_add(const char *raid_name, int strip_size, int num_base_bdevs,
int raid_level, struct raid_bdev_config **_raid_cfg); int raid_level, struct raid_bdev_config **_raid_cfg);
int raid_bdev_config_add_base_bdev(struct raid_bdev_config *raid_cfg, int raid_bdev_config_add_base_bdev(struct raid_bdev_config *raid_cfg,

View File

@ -267,22 +267,11 @@ check_and_remove_raid_bdev(struct raid_bdev_config *raid_cfg)
for (uint32_t i = 0; i < raid_bdev->num_base_bdevs; i++) { for (uint32_t i = 0; i < raid_bdev->num_base_bdevs; i++) {
assert(raid_bdev->base_bdev_info != NULL); assert(raid_bdev->base_bdev_info != NULL);
if (raid_bdev->base_bdev_info[i].bdev) { if (raid_bdev->base_bdev_info[i].bdev) {
/* Release base bdev related resources */ raid_bdev_free_base_bdev_resource(raid_bdev, i);
spdk_bdev_module_release_bdev(raid_bdev->base_bdev_info[i].bdev);
spdk_bdev_close(raid_bdev->base_bdev_info[i].desc);
raid_bdev->base_bdev_info[i].desc = NULL;
raid_bdev->base_bdev_info[i].bdev = NULL;
assert(raid_bdev->num_base_bdevs_discovered);
raid_bdev->num_base_bdevs_discovered--;
} }
} }
/* Free raid */
assert(raid_bdev->num_base_bdevs_discovered == 0); assert(raid_bdev->num_base_bdevs_discovered == 0);
TAILQ_REMOVE(&g_spdk_raid_bdev_configuring_list, raid_bdev, link_specific_list); raid_bdev_cleanup(raid_bdev);
TAILQ_REMOVE(&g_spdk_raid_bdev_list, raid_bdev, link_global_list);
free(raid_bdev->base_bdev_info);
free(raid_bdev);
raid_cfg->raid_bdev = NULL;
} }
/* /*