module/raid: add raid_bdev ptr to raid_base_bdev_info
This allows to simplify some code where raid_bdev and base_info are needed. Change-Id: I40395204fdcdd0487bdecec1cd47efb347f1310a Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
This commit is contained in:
parent
79eccac059
commit
f71c255827
@ -209,16 +209,16 @@ raid_bdev_cleanup_and_free(struct raid_bdev *raid_bdev)
|
||||
* brief:
|
||||
* free resource of base bdev for raid bdev
|
||||
* params:
|
||||
* raid_bdev - pointer to raid bdev
|
||||
* base_info - raid base bdev info
|
||||
* returns:
|
||||
* 0 - success
|
||||
* non zero - failure
|
||||
*/
|
||||
static void
|
||||
raid_bdev_free_base_bdev_resource(struct raid_bdev *raid_bdev,
|
||||
struct raid_base_bdev_info *base_info)
|
||||
raid_bdev_free_base_bdev_resource(struct raid_base_bdev_info *base_info)
|
||||
{
|
||||
struct raid_bdev *raid_bdev = base_info->raid_bdev;
|
||||
|
||||
assert(spdk_get_thread() == spdk_thread_get_app_thread());
|
||||
|
||||
free(base_info->name);
|
||||
@ -276,7 +276,7 @@ _raid_bdev_destruct(void *ctxt)
|
||||
* layers. Also close the descriptors if we have started shutdown.
|
||||
*/
|
||||
if (g_shutdown_started || base_info->remove_scheduled == true) {
|
||||
raid_bdev_free_base_bdev_resource(raid_bdev, base_info);
|
||||
raid_bdev_free_base_bdev_resource(base_info);
|
||||
}
|
||||
}
|
||||
|
||||
@ -951,6 +951,7 @@ raid_bdev_create(const char *name, uint32_t strip_size, uint8_t num_base_bdevs,
|
||||
struct raid_bdev *raid_bdev;
|
||||
struct spdk_bdev *raid_bdev_gen;
|
||||
struct raid_bdev_module *module;
|
||||
struct raid_base_bdev_info *base_info;
|
||||
uint8_t min_operational;
|
||||
int rc;
|
||||
|
||||
@ -1027,6 +1028,10 @@ raid_bdev_create(const char *name, uint32_t strip_size, uint8_t num_base_bdevs,
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||
base_info->raid_bdev = raid_bdev;
|
||||
}
|
||||
|
||||
/* strip_size_kb is from the rpc param. strip_size is in blocks and used
|
||||
* internally and set later.
|
||||
*/
|
||||
@ -1234,19 +1239,14 @@ raid_bdev_deconfigure(struct raid_bdev *raid_bdev, raid_bdev_destruct_cb cb_fn,
|
||||
|
||||
/*
|
||||
* brief:
|
||||
* raid_bdev_find_by_base_bdev function finds the raid bdev which has
|
||||
* claimed the base bdev.
|
||||
* raid_bdev_find_base_info_by_bdev function finds the base bdev info by bdev.
|
||||
* params:
|
||||
* base_bdev - pointer to base bdev pointer
|
||||
* _raid_bdev - Reference to pointer to raid bdev
|
||||
* _base_info - Reference to the raid base bdev info.
|
||||
* base_bdev - pointer to base bdev
|
||||
* returns:
|
||||
* true - if the raid bdev is found.
|
||||
* false - if the raid bdev is not found.
|
||||
* base bdev info if found, otherwise NULL.
|
||||
*/
|
||||
static bool
|
||||
raid_bdev_find_by_base_bdev(struct spdk_bdev *base_bdev, struct raid_bdev **_raid_bdev,
|
||||
struct raid_base_bdev_info **_base_info)
|
||||
static struct raid_base_bdev_info *
|
||||
raid_bdev_find_base_info_by_bdev(struct spdk_bdev *base_bdev)
|
||||
{
|
||||
struct raid_bdev *raid_bdev;
|
||||
struct raid_base_bdev_info *base_info;
|
||||
@ -1254,14 +1254,12 @@ raid_bdev_find_by_base_bdev(struct spdk_bdev *base_bdev, struct raid_bdev **_rai
|
||||
TAILQ_FOREACH(raid_bdev, &g_raid_bdev_list, global_link) {
|
||||
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||
if (base_info->bdev == base_bdev) {
|
||||
*_raid_bdev = raid_bdev;
|
||||
*_base_info = base_info;
|
||||
return true;
|
||||
return base_info;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
typedef void (*raid_bdev_suspended_cb)(struct raid_bdev *raid_bdev, void *ctx);
|
||||
@ -1428,16 +1426,18 @@ raid_bdev_resume(struct raid_bdev *raid_bdev)
|
||||
static void
|
||||
raid_bdev_remove_base_bdev(struct spdk_bdev *base_bdev)
|
||||
{
|
||||
struct raid_bdev *raid_bdev = NULL;
|
||||
struct raid_bdev *raid_bdev;
|
||||
struct raid_base_bdev_info *base_info;
|
||||
|
||||
SPDK_DEBUGLOG(bdev_raid, "raid_bdev_remove_base_bdev\n");
|
||||
|
||||
/* Find the raid_bdev which has claimed this base_bdev */
|
||||
if (!raid_bdev_find_by_base_bdev(base_bdev, &raid_bdev, &base_info)) {
|
||||
base_info = raid_bdev_find_base_info_by_bdev(base_bdev);
|
||||
if (!base_info) {
|
||||
SPDK_ERRLOG("bdev to remove '%s' not found\n", base_bdev->name);
|
||||
return;
|
||||
}
|
||||
raid_bdev = base_info->raid_bdev;
|
||||
|
||||
assert(spdk_get_thread() == spdk_thread_get_app_thread());
|
||||
|
||||
@ -1449,7 +1449,7 @@ raid_bdev_remove_base_bdev(struct spdk_bdev *base_bdev)
|
||||
* As raid bdev is not registered yet or already unregistered,
|
||||
* so cleanup should be done here itself.
|
||||
*/
|
||||
raid_bdev_free_base_bdev_resource(raid_bdev, base_info);
|
||||
raid_bdev_free_base_bdev_resource(base_info);
|
||||
if (raid_bdev->num_base_bdevs_discovered == 0) {
|
||||
/* There is no base bdev for this raid, so free the raid device. */
|
||||
raid_bdev_cleanup_and_free(raid_bdev);
|
||||
@ -1473,16 +1473,19 @@ raid_bdev_remove_base_bdev(struct spdk_bdev *base_bdev)
|
||||
static void
|
||||
raid_bdev_resize_base_bdev(struct spdk_bdev *base_bdev)
|
||||
{
|
||||
struct raid_bdev *raid_bdev = NULL;
|
||||
struct raid_bdev *raid_bdev;
|
||||
struct raid_base_bdev_info *base_info;
|
||||
|
||||
SPDK_DEBUGLOG(bdev_raid, "raid_bdev_resize_base_bdev\n");
|
||||
|
||||
base_info = raid_bdev_find_base_info_by_bdev(base_bdev);
|
||||
|
||||
/* Find the raid_bdev which has claimed this base_bdev */
|
||||
if (!raid_bdev_find_by_base_bdev(base_bdev, &raid_bdev, &base_info)) {
|
||||
if (!base_info) {
|
||||
SPDK_ERRLOG("raid_bdev whose base_bdev '%s' not found\n", base_bdev->name);
|
||||
return;
|
||||
}
|
||||
raid_bdev = base_info->raid_bdev;
|
||||
|
||||
assert(spdk_get_thread() == spdk_thread_get_app_thread());
|
||||
|
||||
@ -1556,7 +1559,7 @@ raid_bdev_delete(struct raid_bdev *raid_bdev, raid_bdev_destruct_cb cb_fn, void
|
||||
* As raid bdev is not registered yet or already unregistered,
|
||||
* so cleanup should be done here itself.
|
||||
*/
|
||||
raid_bdev_free_base_bdev_resource(raid_bdev, base_info);
|
||||
raid_bdev_free_base_bdev_resource(base_info);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1572,8 +1575,9 @@ raid_bdev_delete(struct raid_bdev *raid_bdev, raid_bdev_destruct_cb cb_fn, void
|
||||
}
|
||||
|
||||
static int
|
||||
raid_bdev_configure_base_bdev(struct raid_bdev *raid_bdev, struct raid_base_bdev_info *base_info)
|
||||
raid_bdev_configure_base_bdev(struct raid_base_bdev_info *base_info)
|
||||
{
|
||||
struct raid_bdev *raid_bdev = base_info->raid_bdev;
|
||||
struct spdk_bdev_desc *desc;
|
||||
struct spdk_bdev *bdev;
|
||||
int rc;
|
||||
@ -1676,7 +1680,7 @@ raid_bdev_add_base_device(struct raid_bdev *raid_bdev, const char *name, uint8_t
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
rc = raid_bdev_configure_base_bdev(raid_bdev, base_info);
|
||||
rc = raid_bdev_configure_base_bdev(base_info);
|
||||
if (rc != 0) {
|
||||
if (rc != -ENODEV) {
|
||||
SPDK_ERRLOG("Failed to allocate resource for bdev '%s'\n", name);
|
||||
@ -1706,7 +1710,7 @@ raid_bdev_examine(struct spdk_bdev *bdev)
|
||||
TAILQ_FOREACH(raid_bdev, &g_raid_bdev_list, global_link) {
|
||||
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||
if (base_info->bdev == NULL && strcmp(bdev->name, base_info->name) == 0) {
|
||||
raid_bdev_configure_base_bdev(raid_bdev, base_info);
|
||||
raid_bdev_configure_base_bdev(base_info);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -49,6 +49,9 @@ enum raid_bdev_state {
|
||||
* required per base device for raid bdev will be kept here
|
||||
*/
|
||||
struct raid_base_bdev_info {
|
||||
/* The raid bdev that this base bdev belongs to */
|
||||
struct raid_bdev *raid_bdev;
|
||||
|
||||
/* name of the bdev */
|
||||
char *name;
|
||||
|
||||
|
@ -223,7 +223,7 @@ check_and_remove_raid_bdev(struct raid_bdev *raid_bdev)
|
||||
|
||||
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||
if (base_info->bdev) {
|
||||
raid_bdev_free_base_bdev_resource(raid_bdev, base_info);
|
||||
raid_bdev_free_base_bdev_resource(base_info);
|
||||
}
|
||||
}
|
||||
assert(raid_bdev->num_base_bdevs_discovered == 0);
|
||||
|
Loading…
Reference in New Issue
Block a user