module/raid: use macro to iterate over raid base bdevs
Change-Id: Ie3c074e86a3624bcca5b479505efb4380f79cbdd Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/850 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
This commit is contained in:
parent
79bde4d379
commit
a193dcb8f3
@ -219,22 +219,19 @@ raid_bdev_cleanup(struct raid_bdev *raid_bdev)
|
|||||||
* free resource of base bdev for raid bdev
|
* free resource of base bdev for raid bdev
|
||||||
* params:
|
* params:
|
||||||
* raid_bdev - pointer to raid bdev
|
* raid_bdev - pointer to raid bdev
|
||||||
* base_bdev_slot - position to base bdev in raid bdev
|
* base_info - raid base bdev info
|
||||||
* returns:
|
* returns:
|
||||||
* 0 - success
|
* 0 - success
|
||||||
* non zero - failure
|
* non zero - failure
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
raid_bdev_free_base_bdev_resource(struct raid_bdev *raid_bdev, uint8_t base_bdev_slot)
|
raid_bdev_free_base_bdev_resource(struct raid_bdev *raid_bdev,
|
||||||
|
struct raid_base_bdev_info *base_info)
|
||||||
{
|
{
|
||||||
struct raid_base_bdev_info *info;
|
spdk_bdev_module_release_bdev(base_info->bdev);
|
||||||
|
spdk_bdev_close(base_info->desc);
|
||||||
info = &raid_bdev->base_bdev_info[base_bdev_slot];
|
base_info->desc = NULL;
|
||||||
|
base_info->bdev = NULL;
|
||||||
spdk_bdev_module_release_bdev(info->bdev);
|
|
||||||
spdk_bdev_close(info->desc);
|
|
||||||
info->desc = NULL;
|
|
||||||
info->bdev = NULL;
|
|
||||||
|
|
||||||
assert(raid_bdev->num_base_bdevs_discovered);
|
assert(raid_bdev->num_base_bdevs_discovered);
|
||||||
raid_bdev->num_base_bdevs_discovered--;
|
raid_bdev->num_base_bdevs_discovered--;
|
||||||
@ -253,20 +250,20 @@ static int
|
|||||||
raid_bdev_destruct(void *ctxt)
|
raid_bdev_destruct(void *ctxt)
|
||||||
{
|
{
|
||||||
struct raid_bdev *raid_bdev = ctxt;
|
struct raid_bdev *raid_bdev = ctxt;
|
||||||
uint8_t i;
|
struct raid_base_bdev_info *base_info;
|
||||||
|
|
||||||
SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid_bdev_destruct\n");
|
SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid_bdev_destruct\n");
|
||||||
|
|
||||||
raid_bdev->destruct_called = true;
|
raid_bdev->destruct_called = true;
|
||||||
for (i = 0; i < raid_bdev->num_base_bdevs; i++) {
|
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||||
/*
|
/*
|
||||||
* Close all base bdev descriptors for which call has come from below
|
* Close all base bdev descriptors for which call has come from below
|
||||||
* layers. Also close the descriptors if we have started shutdown.
|
* layers. Also close the descriptors if we have started shutdown.
|
||||||
*/
|
*/
|
||||||
if (g_shutdown_started ||
|
if (g_shutdown_started ||
|
||||||
((raid_bdev->base_bdev_info[i].remove_scheduled == true) &&
|
((base_info->remove_scheduled == true) &&
|
||||||
(raid_bdev->base_bdev_info[i].bdev != NULL))) {
|
(base_info->bdev != NULL))) {
|
||||||
raid_bdev_free_base_bdev_resource(raid_bdev, i);
|
raid_bdev_free_base_bdev_resource(raid_bdev, base_info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,16 +486,15 @@ raid_bdev_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_i
|
|||||||
inline static bool
|
inline static bool
|
||||||
_raid_bdev_io_type_supported(struct raid_bdev *raid_bdev, enum spdk_bdev_io_type io_type)
|
_raid_bdev_io_type_supported(struct raid_bdev *raid_bdev, enum spdk_bdev_io_type io_type)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
struct raid_base_bdev_info *base_info;
|
||||||
|
|
||||||
for (i = 0; i < raid_bdev->num_base_bdevs; i++) {
|
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||||
if (raid_bdev->base_bdev_info[i].bdev == NULL) {
|
if (base_info->bdev == NULL) {
|
||||||
assert(false);
|
assert(false);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spdk_bdev_io_type_supported(raid_bdev->base_bdev_info[i].bdev,
|
if (spdk_bdev_io_type_supported(base_info->bdev, io_type) == false) {
|
||||||
io_type) == false) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -569,7 +565,7 @@ static int
|
|||||||
raid_bdev_dump_info_json(void *ctx, struct spdk_json_write_ctx *w)
|
raid_bdev_dump_info_json(void *ctx, struct spdk_json_write_ctx *w)
|
||||||
{
|
{
|
||||||
struct raid_bdev *raid_bdev = ctx;
|
struct raid_bdev *raid_bdev = ctx;
|
||||||
uint8_t i;
|
struct raid_base_bdev_info *base_info;
|
||||||
|
|
||||||
SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid_bdev_dump_config_json\n");
|
SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid_bdev_dump_config_json\n");
|
||||||
assert(raid_bdev != NULL);
|
assert(raid_bdev != NULL);
|
||||||
@ -585,9 +581,9 @@ raid_bdev_dump_info_json(void *ctx, struct spdk_json_write_ctx *w)
|
|||||||
spdk_json_write_named_uint32(w, "num_base_bdevs_discovered", raid_bdev->num_base_bdevs_discovered);
|
spdk_json_write_named_uint32(w, "num_base_bdevs_discovered", raid_bdev->num_base_bdevs_discovered);
|
||||||
spdk_json_write_name(w, "base_bdevs_list");
|
spdk_json_write_name(w, "base_bdevs_list");
|
||||||
spdk_json_write_array_begin(w);
|
spdk_json_write_array_begin(w);
|
||||||
for (i = 0; i < raid_bdev->num_base_bdevs; i++) {
|
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||||
if (raid_bdev->base_bdev_info[i].bdev) {
|
if (base_info->bdev) {
|
||||||
spdk_json_write_string(w, raid_bdev->base_bdev_info[i].bdev->name);
|
spdk_json_write_string(w, base_info->bdev->name);
|
||||||
} else {
|
} else {
|
||||||
spdk_json_write_null(w);
|
spdk_json_write_null(w);
|
||||||
}
|
}
|
||||||
@ -611,8 +607,7 @@ static void
|
|||||||
raid_bdev_write_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w)
|
raid_bdev_write_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w)
|
||||||
{
|
{
|
||||||
struct raid_bdev *raid_bdev = bdev->ctxt;
|
struct raid_bdev *raid_bdev = bdev->ctxt;
|
||||||
struct spdk_bdev *base;
|
struct raid_base_bdev_info *base_info;
|
||||||
uint8_t i;
|
|
||||||
|
|
||||||
spdk_json_write_object_begin(w);
|
spdk_json_write_object_begin(w);
|
||||||
|
|
||||||
@ -624,10 +619,9 @@ raid_bdev_write_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *
|
|||||||
spdk_json_write_named_string(w, "raid_level", raid_bdev_level_to_str(raid_bdev->level));
|
spdk_json_write_named_string(w, "raid_level", raid_bdev_level_to_str(raid_bdev->level));
|
||||||
|
|
||||||
spdk_json_write_named_array_begin(w, "base_bdevs");
|
spdk_json_write_named_array_begin(w, "base_bdevs");
|
||||||
for (i = 0; i < raid_bdev->num_base_bdevs; i++) {
|
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||||
base = raid_bdev->base_bdev_info[i].bdev;
|
if (base_info->bdev) {
|
||||||
if (base) {
|
spdk_json_write_string(w, base_info->bdev->name);
|
||||||
spdk_json_write_string(w, base->name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spdk_json_write_array_end(w);
|
spdk_json_write_array_end(w);
|
||||||
@ -1063,9 +1057,8 @@ static void
|
|||||||
raid_bdev_get_running_config(FILE *fp)
|
raid_bdev_get_running_config(FILE *fp)
|
||||||
{
|
{
|
||||||
struct raid_bdev *raid_bdev;
|
struct raid_bdev *raid_bdev;
|
||||||
struct spdk_bdev *base;
|
struct raid_base_bdev_info *base_info;
|
||||||
int index = 1;
|
int index = 1;
|
||||||
uint8_t i;
|
|
||||||
|
|
||||||
TAILQ_FOREACH(raid_bdev, &g_raid_bdev_configured_list, state_link) {
|
TAILQ_FOREACH(raid_bdev, &g_raid_bdev_configured_list, state_link) {
|
||||||
fprintf(fp,
|
fprintf(fp,
|
||||||
@ -1080,12 +1073,11 @@ raid_bdev_get_running_config(FILE *fp)
|
|||||||
raid_bdev_level_to_str(raid_bdev->level));
|
raid_bdev_level_to_str(raid_bdev->level));
|
||||||
fprintf(fp,
|
fprintf(fp,
|
||||||
" Devices ");
|
" Devices ");
|
||||||
for (i = 0; i < raid_bdev->num_base_bdevs; i++) {
|
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||||
base = raid_bdev->base_bdev_info[i].bdev;
|
if (base_info->bdev) {
|
||||||
if (base) {
|
|
||||||
fprintf(fp,
|
fprintf(fp,
|
||||||
"%s ",
|
"%s ",
|
||||||
base->name);
|
base_info->bdev->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fprintf(fp,
|
fprintf(fp,
|
||||||
@ -1303,18 +1295,19 @@ raid_bdev_alloc_base_bdev_resource(struct raid_bdev *raid_bdev, struct spdk_bdev
|
|||||||
static int
|
static int
|
||||||
raid_bdev_configure(struct raid_bdev *raid_bdev)
|
raid_bdev_configure(struct raid_bdev *raid_bdev)
|
||||||
{
|
{
|
||||||
uint32_t blocklen;
|
uint32_t blocklen = 0;
|
||||||
struct spdk_bdev *raid_bdev_gen;
|
struct spdk_bdev *raid_bdev_gen;
|
||||||
|
struct raid_base_bdev_info *base_info;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
uint8_t i;
|
|
||||||
|
|
||||||
assert(raid_bdev->state == RAID_BDEV_STATE_CONFIGURING);
|
assert(raid_bdev->state == RAID_BDEV_STATE_CONFIGURING);
|
||||||
assert(raid_bdev->num_base_bdevs_discovered == raid_bdev->num_base_bdevs);
|
assert(raid_bdev->num_base_bdevs_discovered == raid_bdev->num_base_bdevs);
|
||||||
|
|
||||||
blocklen = raid_bdev->base_bdev_info[0].bdev->blocklen;
|
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||||
for (i = 1; i < raid_bdev->num_base_bdevs; i++) {
|
|
||||||
/* Check blocklen for all base bdevs that it should be same */
|
/* Check blocklen for all base bdevs that it should be same */
|
||||||
if (blocklen != raid_bdev->base_bdev_info[i].bdev->blocklen) {
|
if (blocklen == 0) {
|
||||||
|
blocklen = base_info->bdev->blocklen;
|
||||||
|
} else if (blocklen != base_info->bdev->blocklen) {
|
||||||
/*
|
/*
|
||||||
* Assumption is that all the base bdevs for any raid bdev should
|
* Assumption is that all the base bdevs for any raid bdev should
|
||||||
* have same blocklen
|
* have same blocklen
|
||||||
@ -1409,23 +1402,23 @@ raid_bdev_deconfigure(struct raid_bdev *raid_bdev, raid_bdev_destruct_cb cb_fn,
|
|||||||
* params:
|
* params:
|
||||||
* base_bdev - pointer to base bdev pointer
|
* base_bdev - pointer to base bdev pointer
|
||||||
* _raid_bdev - Reference to pointer to raid bdev
|
* _raid_bdev - Reference to pointer to raid bdev
|
||||||
* _base_bdev_slot - Reference to the slot of the base bdev.
|
* _base_info - Reference to the raid base bdev info.
|
||||||
* returns:
|
* returns:
|
||||||
* true - if the raid bdev is found.
|
* true - if the raid bdev is found.
|
||||||
* false - if the raid bdev is not found.
|
* false - if the raid bdev is not found.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
raid_bdev_find_by_base_bdev(struct spdk_bdev *base_bdev, struct raid_bdev **_raid_bdev,
|
raid_bdev_find_by_base_bdev(struct spdk_bdev *base_bdev, struct raid_bdev **_raid_bdev,
|
||||||
uint8_t *_base_bdev_slot)
|
struct raid_base_bdev_info **_base_info)
|
||||||
{
|
{
|
||||||
struct raid_bdev *raid_bdev;
|
struct raid_bdev *raid_bdev;
|
||||||
uint8_t i;
|
struct raid_base_bdev_info *base_info;
|
||||||
|
|
||||||
TAILQ_FOREACH(raid_bdev, &g_raid_bdev_list, global_link) {
|
TAILQ_FOREACH(raid_bdev, &g_raid_bdev_list, global_link) {
|
||||||
for (i = 0; i < raid_bdev->num_base_bdevs; i++) {
|
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||||
if (raid_bdev->base_bdev_info[i].bdev == base_bdev) {
|
if (base_info->bdev == base_bdev) {
|
||||||
*_raid_bdev = raid_bdev;
|
*_raid_bdev = raid_bdev;
|
||||||
*_base_bdev_slot = i;
|
*_base_info = base_info;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1449,18 +1442,18 @@ raid_bdev_remove_base_bdev(void *ctx)
|
|||||||
{
|
{
|
||||||
struct spdk_bdev *base_bdev = ctx;
|
struct spdk_bdev *base_bdev = ctx;
|
||||||
struct raid_bdev *raid_bdev = NULL;
|
struct raid_bdev *raid_bdev = NULL;
|
||||||
uint8_t base_bdev_slot = 0;
|
struct raid_base_bdev_info *base_info;
|
||||||
|
|
||||||
SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid_bdev_remove_base_bdev\n");
|
SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid_bdev_remove_base_bdev\n");
|
||||||
|
|
||||||
/* Find the raid_bdev which has claimed this base_bdev */
|
/* Find the raid_bdev which has claimed this base_bdev */
|
||||||
if (!raid_bdev_find_by_base_bdev(base_bdev, &raid_bdev, &base_bdev_slot)) {
|
if (!raid_bdev_find_by_base_bdev(base_bdev, &raid_bdev, &base_info)) {
|
||||||
SPDK_ERRLOG("bdev to remove '%s' not found\n", base_bdev->name);
|
SPDK_ERRLOG("bdev to remove '%s' not found\n", base_bdev->name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(raid_bdev->base_bdev_info[base_bdev_slot].desc);
|
assert(base_info->desc);
|
||||||
raid_bdev->base_bdev_info[base_bdev_slot].remove_scheduled = true;
|
base_info->remove_scheduled = true;
|
||||||
|
|
||||||
if (raid_bdev->destruct_called == true ||
|
if (raid_bdev->destruct_called == true ||
|
||||||
raid_bdev->state == RAID_BDEV_STATE_CONFIGURING) {
|
raid_bdev->state == RAID_BDEV_STATE_CONFIGURING) {
|
||||||
@ -1468,7 +1461,7 @@ raid_bdev_remove_base_bdev(void *ctx)
|
|||||||
* As raid bdev is not registered yet or already unregistered,
|
* As raid bdev is not registered yet or already unregistered,
|
||||||
* so cleanup should be done here itself.
|
* so cleanup should be done here itself.
|
||||||
*/
|
*/
|
||||||
raid_bdev_free_base_bdev_resource(raid_bdev, base_bdev_slot);
|
raid_bdev_free_base_bdev_resource(raid_bdev, base_info);
|
||||||
if (raid_bdev->num_base_bdevs_discovered == 0) {
|
if (raid_bdev->num_base_bdevs_discovered == 0) {
|
||||||
/* There is no base bdev for this raid, so free the raid device. */
|
/* There is no base bdev for this raid, so free the raid device. */
|
||||||
raid_bdev_cleanup(raid_bdev);
|
raid_bdev_cleanup(raid_bdev);
|
||||||
@ -1493,8 +1486,7 @@ raid_bdev_remove_base_devices(struct raid_bdev_config *raid_cfg,
|
|||||||
raid_bdev_destruct_cb cb_fn, void *cb_arg)
|
raid_bdev_destruct_cb cb_fn, void *cb_arg)
|
||||||
{
|
{
|
||||||
struct raid_bdev *raid_bdev;
|
struct raid_bdev *raid_bdev;
|
||||||
struct raid_base_bdev_info *info;
|
struct raid_base_bdev_info *base_info;
|
||||||
uint8_t i;
|
|
||||||
|
|
||||||
SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid_bdev_remove_base_devices\n");
|
SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid_bdev_remove_base_devices\n");
|
||||||
|
|
||||||
@ -1518,15 +1510,13 @@ raid_bdev_remove_base_devices(struct raid_bdev_config *raid_cfg,
|
|||||||
|
|
||||||
raid_bdev->destroy_started = true;
|
raid_bdev->destroy_started = true;
|
||||||
|
|
||||||
for (i = 0; i < raid_bdev->num_base_bdevs; i++) {
|
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||||
info = &raid_bdev->base_bdev_info[i];
|
if (base_info->bdev == NULL) {
|
||||||
|
|
||||||
if (info->bdev == NULL) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(info->desc);
|
assert(base_info->desc);
|
||||||
info->remove_scheduled = true;
|
base_info->remove_scheduled = true;
|
||||||
|
|
||||||
if (raid_bdev->destruct_called == true ||
|
if (raid_bdev->destruct_called == true ||
|
||||||
raid_bdev->state == RAID_BDEV_STATE_CONFIGURING) {
|
raid_bdev->state == RAID_BDEV_STATE_CONFIGURING) {
|
||||||
@ -1534,7 +1524,7 @@ raid_bdev_remove_base_devices(struct raid_bdev_config *raid_cfg,
|
|||||||
* As raid bdev is not registered yet or already unregistered,
|
* As raid bdev is not registered yet or already unregistered,
|
||||||
* so cleanup should be done here itself.
|
* so cleanup should be done here itself.
|
||||||
*/
|
*/
|
||||||
raid_bdev_free_base_bdev_resource(raid_bdev, i);
|
raid_bdev_free_base_bdev_resource(raid_bdev, base_info);
|
||||||
if (raid_bdev->num_base_bdevs_discovered == 0) {
|
if (raid_bdev->num_base_bdevs_discovered == 0) {
|
||||||
/* There is no base bdev for this raid, so free the raid device. */
|
/* There is no base bdev for this raid, so free the raid device. */
|
||||||
raid_bdev_cleanup(raid_bdev);
|
raid_bdev_cleanup(raid_bdev);
|
||||||
|
@ -161,6 +161,9 @@ struct raid_bdev {
|
|||||||
struct raid_bdev_module *module;
|
struct raid_bdev_module *module;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define RAID_FOR_EACH_BASE_BDEV(r, i) \
|
||||||
|
for (i = r->base_bdev_info; i < r->base_bdev_info + r->num_base_bdevs; i++)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* raid_base_bdev_config is the per base bdev data structure which contains
|
* raid_base_bdev_config is the per base bdev data structure which contains
|
||||||
* information w.r.t to per base bdev during parsing config
|
* information w.r.t to per base bdev during parsing config
|
||||||
|
@ -342,15 +342,12 @@ raid0_submit_null_payload_request(struct raid_bdev_io *raid_io)
|
|||||||
|
|
||||||
static int raid0_start(struct raid_bdev *raid_bdev)
|
static int raid0_start(struct raid_bdev *raid_bdev)
|
||||||
{
|
{
|
||||||
uint64_t min_blockcnt;
|
uint64_t min_blockcnt = UINT64_MAX;
|
||||||
uint8_t i;
|
struct raid_base_bdev_info *base_info;
|
||||||
|
|
||||||
min_blockcnt = raid_bdev->base_bdev_info[0].bdev->blockcnt;
|
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||||
for (i = 1; i < raid_bdev->num_base_bdevs; i++) {
|
|
||||||
/* Calculate minimum block count from all base bdevs */
|
/* Calculate minimum block count from all base bdevs */
|
||||||
if (raid_bdev->base_bdev_info[i].bdev->blockcnt < min_blockcnt) {
|
min_blockcnt = spdk_min(min_blockcnt, base_info->bdev->blockcnt);
|
||||||
min_blockcnt = raid_bdev->base_bdev_info[i].bdev->blockcnt;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -208,7 +208,8 @@ base_bdevs_cleanup(void)
|
|||||||
static void
|
static void
|
||||||
check_and_remove_raid_bdev(struct raid_bdev_config *raid_cfg)
|
check_and_remove_raid_bdev(struct raid_bdev_config *raid_cfg)
|
||||||
{
|
{
|
||||||
struct raid_bdev *raid_bdev;
|
struct raid_bdev *raid_bdev;
|
||||||
|
struct raid_base_bdev_info *base_info;
|
||||||
|
|
||||||
/* Get the raid structured allocated if exists */
|
/* Get the raid structured allocated if exists */
|
||||||
raid_bdev = raid_cfg->raid_bdev;
|
raid_bdev = raid_cfg->raid_bdev;
|
||||||
@ -216,10 +217,11 @@ check_and_remove_raid_bdev(struct raid_bdev_config *raid_cfg)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint8_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) {
|
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||||
raid_bdev_free_base_bdev_resource(raid_bdev, i);
|
if (base_info->bdev) {
|
||||||
|
raid_bdev_free_base_bdev_resource(raid_bdev, base_info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(raid_bdev->num_base_bdevs_discovered == 0);
|
assert(raid_bdev->num_base_bdevs_discovered == 0);
|
||||||
@ -923,7 +925,7 @@ static void
|
|||||||
verify_raid_bdev(struct rpc_bdev_raid_create *r, bool presence, uint32_t raid_state)
|
verify_raid_bdev(struct rpc_bdev_raid_create *r, bool presence, uint32_t raid_state)
|
||||||
{
|
{
|
||||||
struct raid_bdev *pbdev;
|
struct raid_bdev *pbdev;
|
||||||
uint8_t i;
|
struct raid_base_bdev_info *base_info;
|
||||||
struct spdk_bdev *bdev = NULL;
|
struct spdk_bdev *bdev = NULL;
|
||||||
bool pbdev_found;
|
bool pbdev_found;
|
||||||
uint64_t min_blockcnt = 0xFFFFFFFFFFFFFFFF;
|
uint64_t min_blockcnt = 0xFFFFFFFFFFFFFFFF;
|
||||||
@ -946,14 +948,12 @@ verify_raid_bdev(struct rpc_bdev_raid_create *r, bool presence, uint32_t raid_st
|
|||||||
CU_ASSERT(pbdev->num_base_bdevs_discovered == r->base_bdevs.num_base_bdevs);
|
CU_ASSERT(pbdev->num_base_bdevs_discovered == r->base_bdevs.num_base_bdevs);
|
||||||
CU_ASSERT(pbdev->level == r->level);
|
CU_ASSERT(pbdev->level == r->level);
|
||||||
CU_ASSERT(pbdev->destruct_called == false);
|
CU_ASSERT(pbdev->destruct_called == false);
|
||||||
for (i = 0; i < pbdev->num_base_bdevs; i++) {
|
CU_ASSERT(pbdev->base_bdev_info != NULL);
|
||||||
if (pbdev->base_bdev_info && pbdev->base_bdev_info[i].bdev) {
|
RAID_FOR_EACH_BASE_BDEV(pbdev, base_info) {
|
||||||
bdev = spdk_bdev_get_by_name(pbdev->base_bdev_info[i].bdev->name);
|
CU_ASSERT(base_info->bdev != NULL);
|
||||||
CU_ASSERT(bdev != NULL);
|
bdev = spdk_bdev_get_by_name(base_info->bdev->name);
|
||||||
CU_ASSERT(pbdev->base_bdev_info[i].remove_scheduled == false);
|
CU_ASSERT(bdev != NULL);
|
||||||
} else {
|
CU_ASSERT(base_info->remove_scheduled == false);
|
||||||
CU_ASSERT(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bdev && bdev->blockcnt < min_blockcnt) {
|
if (bdev && bdev->blockcnt < min_blockcnt) {
|
||||||
min_blockcnt = bdev->blockcnt;
|
min_blockcnt = bdev->blockcnt;
|
||||||
|
Loading…
Reference in New Issue
Block a user