diff --git a/lib/bdev/raid/bdev_raid.c b/lib/bdev/raid/bdev_raid.c
index 35e09189d0..4995d462c2 100644
--- a/lib/bdev/raid/bdev_raid.c
+++ b/lib/bdev/raid/bdev_raid.c
@@ -847,6 +847,13 @@ raid_bdev_parse_raid(struct spdk_conf_section *conf_section)
 		return -EINVAL;
 	}
 
+	rc = raid_bdev_create(raid_cfg);
+	if (rc != 0) {
+		raid_bdev_config_cleanup(raid_cfg);
+		SPDK_ERRLOG("Failed to create raid bdev\n");
+		return rc;
+	}
+
 	return 0;
 }
 
@@ -1017,13 +1024,12 @@ raid_bdev_init(void)
  * raid_bdev_create allocates raid bdev based on passed configuration
  * params:
  * raid_cfg - configuration of raid bdev
- * _raid_bdev - pointer to created raid bdev
  * returns:
  * 0 - success
  * non zero - failure
  */
-static int
-raid_bdev_create(struct raid_bdev_config *raid_cfg, struct raid_bdev **_raid_bdev)
+int
+raid_bdev_create(struct raid_bdev_config *raid_cfg)
 {
 	struct raid_bdev *raid_bdev;
 	struct spdk_bdev *raid_bdev_gen;
@@ -1034,6 +1040,7 @@ raid_bdev_create(struct raid_bdev_config *raid_cfg, struct raid_bdev **_raid_bde
 		return -ENOMEM;
 	}
 
+	assert(raid_cfg->num_base_bdevs != 0);
 	raid_bdev->num_base_bdevs = raid_cfg->num_base_bdevs;
 	raid_bdev->base_bdev_info = calloc(raid_bdev->num_base_bdevs,
 					   sizeof(struct raid_base_bdev_info));
@@ -1065,7 +1072,7 @@ raid_bdev_create(struct raid_bdev_config *raid_cfg, struct raid_bdev **_raid_bde
 	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);
 
-	*_raid_bdev = raid_bdev;
+	raid_cfg->raid_bdev = raid_bdev;
 
 	return 0;
 }
@@ -1315,12 +1322,8 @@ raid_bdev_add_base_device(struct raid_bdev_config *raid_cfg, struct spdk_bdev *b
 
 	raid_bdev = raid_cfg->raid_bdev;
 	if (!raid_bdev) {
-		rc = raid_bdev_create(raid_cfg, &raid_bdev);
-		if (rc != 0) {
-			SPDK_ERRLOG("Failed to create raid bdev for bdev '%s'\n", bdev->name);
-			return rc;
-		}
-		raid_cfg->raid_bdev = raid_bdev;
+		SPDK_ERRLOG("Raid bdev is not created yet '%s'\n", bdev->name);
+		return -ENODEV;
 	}
 
 	rc = raid_bdev_alloc_base_bdev_resource(raid_bdev, bdev, base_bdev_slot);
diff --git a/lib/bdev/raid/bdev_raid.h b/lib/bdev/raid/bdev_raid.h
index 99c88f1b10..bc9fad9d33 100644
--- a/lib/bdev/raid/bdev_raid.h
+++ b/lib/bdev/raid/bdev_raid.h
@@ -202,7 +202,7 @@ extern struct spdk_raid_all_tailq           g_spdk_raid_bdev_list;
 extern struct spdk_raid_offline_tailq       g_spdk_raid_bdev_offline_list;
 extern struct raid_config                   g_spdk_raid_config;
 
-
+int raid_bdev_create(struct raid_bdev_config *raid_cfg);
 void raid_bdev_remove_base_bdev(void *ctx);
 int raid_bdev_add_base_device(struct raid_bdev_config *raid_cfg, struct spdk_bdev *bdev,
 			      uint32_t base_bdev_slot);
diff --git a/lib/bdev/raid/bdev_raid_rpc.c b/lib/bdev/raid/bdev_raid_rpc.c
index 60972169c4..c8d84749e6 100644
--- a/lib/bdev/raid/bdev_raid_rpc.c
+++ b/lib/bdev/raid/bdev_raid_rpc.c
@@ -296,6 +296,16 @@ spdk_rpc_construct_raid_bdev(struct spdk_jsonrpc_request *request,
 		}
 	}
 
+	rc = raid_bdev_create(raid_cfg);
+	if (rc != 0) {
+		raid_bdev_config_cleanup(raid_cfg);
+		spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
+						     "Failed to create RAID bdev %s: %s",
+						     req.name, spdk_strerror(-rc));
+		free_rpc_construct_raid_bdev(&req);
+		return;
+	}
+
 	for (size_t i = 0; i < raid_cfg->num_base_bdevs; i++) {
 		/* Check if base_bdev exists already, if not fail the command */
 		base_bdev = spdk_bdev_get_by_name(req.base_bdevs.base_bdevs[i]);
diff --git a/test/unit/lib/bdev/bdev_raid.c/bdev_raid_ut.c b/test/unit/lib/bdev/bdev_raid.c/bdev_raid_ut.c
index 53e9001470..bcd50eb966 100644
--- a/test/unit/lib/bdev/bdev_raid.c/bdev_raid_ut.c
+++ b/test/unit/lib/bdev/bdev_raid.c/bdev_raid_ut.c
@@ -1945,7 +1945,7 @@ test_create_raid_from_config(void)
 	g_config_level_create = 0;
 
 	verify_raid_config_present("raid1", true);
-	verify_raid_bdev_present("raid1", false);
+	verify_raid_bdev_present("raid1", true);
 
 	TAILQ_FOREACH(bdev, &g_bdev_list, internal.link) {
 		raid_bdev_examine(bdev);