Lines Matching refs:base_info

162 		struct raid_base_bdev_info *base_info = &raid_bdev->base_bdev_info[i];
164 if (base_info->is_configured &&
165 spdk_bdev_desc_get_bdev(base_info->desc) == base_bdev) {
166 return base_info;
201 struct raid_base_bdev_info *base_info;
227 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
228 uint8_t slot = raid_bdev_base_bdev_slot(base_info);
230 if (base_info != process->target) {
378 struct raid_base_bdev_info *base_info;
385 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
386 assert(base_info->desc == NULL);
387 free(base_info->name);
410 raid_bdev_deconfigure_base_bdev(struct raid_base_bdev_info *base_info)
412 struct raid_bdev *raid_bdev = base_info->raid_bdev;
414 assert(base_info->is_configured);
417 base_info->is_configured = false;
418 base_info->is_process_target = false;
425 * base_info - raid base bdev info
430 raid_bdev_free_base_bdev_resource(struct raid_base_bdev_info *base_info)
432 struct raid_bdev *raid_bdev = base_info->raid_bdev;
435 assert(base_info->configure_cb == NULL);
437 free(base_info->name);
438 base_info->name = NULL;
440 spdk_uuid_set_null(&base_info->uuid);
442 base_info->is_failed = false;
445 base_info->data_offset = 0;
447 if (base_info->desc == NULL) {
451 spdk_bdev_module_release_bdev(spdk_bdev_desc_get_bdev(base_info->desc));
452 spdk_bdev_close(base_info->desc);
453 base_info->desc = NULL;
454 spdk_put_io_channel(base_info->app_thread_ch);
455 base_info->app_thread_ch = NULL;
457 if (base_info->is_configured) {
458 raid_bdev_deconfigure_base_bdev(base_info);
490 struct raid_base_bdev_info *base_info;
496 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
501 if (g_shutdown_started || base_info->remove_scheduled == true) {
502 raid_bdev_free_base_bdev_resource(base_info);
767 struct raid_base_bdev_info *base_info;
777 base_info = &raid_bdev->base_bdev_info[i];
784 ret = spdk_bdev_reset(base_info->desc, base_ch,
789 raid_bdev_queue_io_wait(raid_io, spdk_bdev_desc_get_bdev(base_info->desc),
997 struct raid_base_bdev_info *base_info;
1006 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
1007 if (base_info->desc == NULL) {
1011 if (spdk_bdev_io_type_supported(spdk_bdev_desc_get_bdev(base_info->desc), io_type) == false) {
1071 struct raid_base_bdev_info *base_info;
1101 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
1104 if (base_info->name) {
1105 spdk_json_write_string(w, base_info->name);
1109 spdk_json_write_named_uuid(w, "uuid", &base_info->uuid);
1110 spdk_json_write_named_bool(w, "is_configured", base_info->is_configured);
1111 spdk_json_write_named_uint64(w, "data_offset", base_info->data_offset);
1112 spdk_json_write_named_uint64(w, "data_size", base_info->data_size);
1156 struct raid_base_bdev_info *base_info;
1178 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
1179 if (base_info->name) {
1180 spdk_json_write_string(w, base_info->name);
1184 snprintf(str, sizeof(str), "removed_base_bdev_%u", raid_bdev_base_bdev_slot(base_info));
1198 struct raid_base_bdev_info *base_info;
1206 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
1207 if (base_info->is_configured == false) {
1210 rc = spdk_bdev_get_memory_domains(spdk_bdev_desc_get_bdev(base_info->desc), NULL, 0);
1221 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
1222 if (base_info->is_configured == false) {
1225 rc = spdk_bdev_get_memory_domains(spdk_bdev_desc_get_bdev(base_info->desc), domains, array_size);
1385 struct raid_base_bdev_info *base_info;
1391 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
1392 raid_bdev_free_base_bdev_resource(base_info);
1496 struct raid_base_bdev_info *base_info;
1577 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
1578 base_info->raid_bdev = raid_bdev;
1916 struct raid_base_bdev_info *base_info;
1919 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
1920 if (base_info->desc != NULL &&
1921 spdk_bdev_desc_get_bdev(base_info->desc) == base_bdev) {
1922 return base_info;
1931 raid_bdev_remove_base_bdev_done(struct raid_base_bdev_info *base_info, int status)
1933 struct raid_bdev *raid_bdev = base_info->raid_bdev;
1935 assert(base_info->remove_scheduled);
1936 base_info->remove_scheduled = false;
1942 raid_bdev_deconfigure(raid_bdev, base_info->remove_cb, base_info->remove_cb_ctx);
1947 if (base_info->remove_cb != NULL) {
1948 base_info->remove_cb(base_info->remove_cb_ctx, status);
1955 struct raid_base_bdev_info *base_info = ctx;
1956 struct raid_bdev *raid_bdev = base_info->raid_bdev;
1963 raid_bdev_remove_base_bdev_done(base_info, status);
1969 struct raid_base_bdev_info *base_info = spdk_io_channel_iter_get_ctx(i);
1972 uint8_t idx = raid_bdev_base_bdev_slot(base_info);
1991 struct raid_base_bdev_info *base_info = spdk_io_channel_iter_get_ctx(i);
1992 struct raid_bdev *raid_bdev = base_info->raid_bdev;
1994 raid_bdev_free_base_bdev_resource(base_info);
1997 base_info);
2001 raid_bdev_remove_base_bdev_cont(struct raid_base_bdev_info *base_info)
2003 raid_bdev_deconfigure_base_bdev(base_info);
2005 spdk_for_each_channel(base_info->raid_bdev, raid_bdev_channel_remove_base_bdev, base_info,
2012 struct raid_base_bdev_info *base_info = ctx;
2017 raid_bdev_remove_base_bdev_done(base_info, status);
2021 raid_bdev_remove_base_bdev_cont(base_info);
2027 struct raid_base_bdev_info *base_info = ctx;
2028 struct raid_bdev *raid_bdev = base_info->raid_bdev;
2033 raid_bdev_remove_base_bdev_done(base_info, status);
2039 uint8_t slot = raid_bdev_base_bdev_slot(base_info);
2047 if (base_info->is_failed) {
2053 raid_bdev_write_superblock(raid_bdev, raid_bdev_remove_base_bdev_write_sb_cb, base_info);
2059 raid_bdev_remove_base_bdev_cont(base_info);
2063 raid_bdev_remove_base_bdev_quiesce(struct raid_base_bdev_info *base_info)
2067 return spdk_bdev_quiesce(&base_info->raid_bdev->bdev, &g_raid_if,
2068 raid_bdev_remove_base_bdev_on_quiesced, base_info);
2073 struct raid_base_bdev_info *base_info;
2080 struct raid_base_bdev_info *base_info = ctx;
2083 ret = raid_bdev_remove_base_bdev_quiesce(base_info);
2085 raid_bdev_remove_base_bdev_done(base_info, ret);
2093 struct raid_base_bdev_info *base_info = ctx->base_info;
2098 base_info);
2108 if (ctx->base_info != process->target &&
2120 raid_bdev_remove_base_bdev_done(ctx->base_info, ret);
2134 struct raid_base_bdev_info *base_info)
2151 ctx->base_info = base_info;
2157 RAID_FOR_EACH_BASE_BDEV(process->raid_bdev, base_info) {
2158 if (base_info->is_configured && !base_info->remove_scheduled) {
2169 _raid_bdev_remove_base_bdev(struct raid_base_bdev_info *base_info,
2172 struct raid_bdev *raid_bdev = base_info->raid_bdev;
2175 SPDK_DEBUGLOG(bdev_raid, "%s\n", base_info->name);
2179 if (base_info->remove_scheduled || !base_info->is_configured) {
2183 assert(base_info->desc);
2184 base_info->remove_scheduled = true;
2194 raid_bdev_free_base_bdev_resource(base_info);
2195 base_info->remove_scheduled = false;
2209 base_info->remove_cb = cb_fn;
2210 base_info->remove_cb_ctx = cb_ctx;
2213 ret = raid_bdev_process_base_bdev_remove(raid_bdev->process, base_info);
2215 ret = raid_bdev_remove_base_bdev_quiesce(base_info);
2219 base_info->remove_scheduled = false;
2242 struct raid_base_bdev_info *base_info;
2245 base_info = raid_bdev_find_base_info_by_bdev(base_bdev);
2246 if (!base_info) {
2251 return _raid_bdev_remove_base_bdev(base_info, cb_fn, cb_ctx);
2257 struct raid_base_bdev_info *base_info = ctx;
2260 SPDK_WARNLOG("Failed to remove base bdev %s\n", base_info->name);
2261 base_info->is_failed = false;
2268 struct raid_base_bdev_info *base_info = ctx;
2271 if (base_info->is_failed) {
2274 base_info->is_failed = true;
2277 raid_bdev_base_bdev_slot(base_info), base_info->name, base_info->raid_bdev->bdev.name);
2279 rc = _raid_bdev_remove_base_bdev(base_info, raid_bdev_fail_base_remove_cb, base_info);
2281 raid_bdev_fail_base_remove_cb(base_info, rc);
2286 raid_bdev_fail_base_bdev(struct raid_base_bdev_info *base_info)
2288 spdk_thread_exec_msg(spdk_thread_get_app_thread(), _raid_bdev_fail_base_bdev, base_info);
2314 struct raid_base_bdev_info *base_info;
2319 base_info = raid_bdev_find_base_info_by_bdev(base_bdev);
2322 if (!base_info) {
2326 raid_bdev = base_info->raid_bdev;
2331 base_bdev->name, base_info->blockcnt, base_bdev->blockcnt);
2333 base_info->blockcnt = base_bdev->blockcnt;
2355 base_info = &raid_bdev->base_bdev_info[sb_base_bdev->slot];
2356 sb_base_bdev->data_size = base_info->data_size;
2409 struct raid_base_bdev_info *base_info;
2424 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
2425 base_info->remove_scheduled = true;
2432 raid_bdev_free_base_bdev_resource(base_info);
2462 struct raid_base_bdev_info *base_info;
2470 base_info = &raid_bdev->base_bdev_info[sb_base_bdev->slot];
2471 if (base_info->is_configured) {
2473 sb_base_bdev->data_offset = base_info->data_offset;
2474 spdk_uuid_copy(&sb_base_bdev->uuid, &base_info->uuid);
3140 static void raid_bdev_configure_base_bdev_cont(struct raid_base_bdev_info *base_info);
3145 struct raid_base_bdev_info *base_info = spdk_io_channel_iter_get_ctx(i);
3147 raid_bdev_configure_base_bdev_cont(base_info);
3157 raid_bdev_configure_base_bdev_cont(struct raid_base_bdev_info *base_info)
3159 struct raid_bdev *raid_bdev = base_info->raid_bdev;
3164 base_info->is_process_target == false) {
3168 base_info->is_process_target = true;
3170 spdk_for_each_channel(raid_bdev, raid_bdev_ch_sync, base_info, _raid_bdev_configure_base_bdev_cont);
3174 base_info->is_configured = true;
3181 configure_cb = base_info->configure_cb;
3182 base_info->configure_cb = NULL;
3190 rc = raid_bdev_configure(raid_bdev, configure_cb, base_info->configure_cb_ctx);
3196 } else if (base_info->is_process_target) {
3198 rc = raid_bdev_start_rebuild(base_info);
3201 _raid_bdev_remove_base_bdev(base_info, NULL, NULL);
3208 configure_cb(base_info->configure_cb_ctx, rc);
3219 struct raid_base_bdev_info *base_info = ctx;
3220 raid_base_bdev_cb configure_cb = base_info->configure_cb;
3225 base_info->configure_cb = NULL;
3226 if (spdk_uuid_compare(&base_info->raid_bdev->bdev.uuid, &sb->uuid) == 0) {
3227 struct spdk_bdev *bdev = spdk_bdev_desc_get_bdev(base_info->desc);
3229 raid_bdev_free_base_bdev_resource(base_info);
3230 raid_bdev_examine_sb(sb, bdev, configure_cb, base_info->configure_cb_ctx);
3233 SPDK_ERRLOG("Superblock of a different raid bdev found on bdev %s\n", base_info->name);
3235 raid_bdev_free_base_bdev_resource(base_info);
3239 raid_bdev_configure_base_bdev_cont(base_info);
3243 base_info->name, spdk_strerror(-status));
3248 base_info->configure_cb = NULL;
3249 configure_cb(base_info->configure_cb_ctx, status);
3254 raid_bdev_configure_base_bdev(struct raid_base_bdev_info *base_info, bool existing,
3257 struct raid_bdev *raid_bdev = base_info->raid_bdev;
3264 assert(base_info->desc == NULL);
3271 if (!spdk_uuid_is_null(&base_info->uuid)) {
3275 spdk_uuid_fmt_lower(uuid_str, sizeof(uuid_str), &base_info->uuid);
3285 if (base_info->name == NULL) {
3287 base_info->name = strdup(bdev_name);
3288 if (base_info->name == NULL) {
3291 } else if (strcmp(base_info->name, bdev_name) != 0) {
3293 bdev_name, base_info->name);
3298 assert(base_info->name != NULL);
3300 rc = spdk_bdev_open_ext(base_info->name, true, raid_bdev_event_base_bdev, NULL, &desc);
3303 SPDK_ERRLOG("Unable to create desc on bdev '%s'\n", base_info->name);
3311 if (spdk_uuid_is_null(&base_info->uuid)) {
3312 spdk_uuid_copy(&base_info->uuid, bdev_uuid);
3313 } else if (spdk_uuid_compare(&base_info->uuid, bdev_uuid) != 0) {
3314 SPDK_ERRLOG("UUID mismatch for base bdev '%s'\n", base_info->name);
3328 base_info->app_thread_ch = spdk_bdev_get_io_channel(desc);
3329 if (base_info->app_thread_ch == NULL) {
3336 base_info->desc = desc;
3337 base_info->blockcnt = bdev->blockcnt;
3342 if (base_info->data_offset == 0) {
3346 data_offset = base_info->data_offset;
3352 if (base_info->data_offset != 0 && base_info->data_offset != data_offset) {
3354 base_info->data_offset, base_info->name, data_offset);
3355 data_offset = base_info->data_offset;
3359 base_info->data_offset = data_offset;
3362 if (base_info->data_offset >= bdev->blockcnt) {
3364 base_info->data_offset, bdev->blockcnt, base_info->name);
3369 if (base_info->data_size == 0) {
3370 base_info->data_size = bdev->blockcnt - base_info->data_offset;
3371 } else if (base_info->data_offset + base_info->data_size > bdev->blockcnt) {
3373 bdev->blockcnt, base_info->name);
3419 assert(base_info->configure_cb == NULL);
3420 base_info->configure_cb = cb_fn;
3421 base_info->configure_cb_ctx = cb_ctx;
3424 raid_bdev_configure_base_bdev_cont(base_info);
3427 rc = raid_bdev_load_base_bdev_superblock(desc, base_info->app_thread_ch,
3428 raid_bdev_configure_base_bdev_check_sb_cb, base_info);
3436 base_info->configure_cb = NULL;
3437 raid_bdev_free_base_bdev_resource(base_info);
3446 struct raid_base_bdev_info *base_info = NULL, *iter;
3465 base_info = iter;
3472 if (base_info == NULL || raid_bdev->state == RAID_BDEV_STATE_ONLINE) {
3475 base_info = iter;
3481 if (base_info == NULL) {
3487 assert(base_info->is_configured == false);
3490 assert(base_info->data_size != 0);
3491 assert(base_info->desc == NULL);
3494 base_info->name = strdup(name);
3495 if (base_info->name == NULL) {
3499 rc = raid_bdev_configure_base_bdev(base_info, false, cb_fn, cb_ctx);
3502 free(base_info->name);
3503 base_info->name = NULL;
3533 struct raid_base_bdev_info *base_info = &raid_bdev->base_bdev_info[sb_base_bdev->slot];
3536 spdk_uuid_copy(&base_info->uuid, &sb_base_bdev->uuid);
3540 base_info->data_offset = sb_base_bdev->data_offset;
3541 base_info->data_size = sb_base_bdev->data_size;
3552 struct raid_base_bdev_info *base_info;
3558 RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
3559 if (base_info->desc == NULL &&
3560 ((base_info->name != NULL && strcmp(bdev->name, base_info->name) == 0) ||
3561 spdk_uuid_compare(&base_info->uuid, &bdev->uuid) == 0)) {
3562 raid_bdev_configure_base_bdev(base_info, true, NULL, NULL);
3614 struct raid_base_bdev_info *base_info;
3627 for (base_info = &raid_bdev->base_bdev_info[ctx->current_base_bdev_idx];
3628 base_info < &raid_bdev->base_bdev_info[raid_bdev->num_base_bdevs];
3629 base_info++) {
3630 if (base_info->is_configured || spdk_uuid_is_null(&base_info->uuid)) {
3634 spdk_uuid_fmt_lower(uuid_str, sizeof(uuid_str), &base_info->uuid);
3640 ctx->current_base_bdev_idx = raid_bdev_base_bdev_slot(base_info);
3658 struct raid_base_bdev_info *iter, *base_info;
3752 base_info = &raid_bdev->base_bdev_info[sb_base_bdev->slot];
3753 assert(base_info->is_configured == false);
3756 assert(spdk_uuid_is_null(&base_info->uuid));
3757 spdk_uuid_copy(&base_info->uuid, &sb_base_bdev->uuid);
3759 rc = raid_bdev_configure_base_bdev(base_info, true, cb_fn, cb_ctx);
3774 base_info = NULL;
3777 base_info = iter;
3782 if (base_info == NULL) {
3789 if (base_info->is_configured) {
3794 rc = raid_bdev_configure_base_bdev(base_info, true, cb_fn, cb_ctx);