diff --git a/lib/bdev/raid/bdev_raid.c b/lib/bdev/raid/bdev_raid.c
index 5fd3b94131..4842bf09bb 100644
--- a/lib/bdev/raid/bdev_raid.c
+++ b/lib/bdev/raid/bdev_raid.c
@@ -494,6 +494,43 @@ raid_bdev_base_io_completion(struct spdk_bdev_io *bdev_io, bool success, void *c
 	}
 }
 
+/*
+ * brief:
+ * raid_bdev_base_io_submit_fail_process processes IO requests for member disk
+ * which failed to submit
+ * params:
+ * raid_bdev_io - pointer to raid bdev_io
+ * pd_idx - base_dev index in raid_bdev
+ * cb_fn - callback when the spdk_bdev_io for base_bdev becomes available
+ * ret - return code
+ * returns:
+ * none
+ */
+static void
+raid_bdev_base_io_submit_fail_process(struct spdk_bdev_io *raid_bdev_io, uint8_t pd_idx,
+				      spdk_bdev_io_wait_cb cb_fn, int ret)
+{
+	struct raid_bdev_io *raid_io = (struct raid_bdev_io *)raid_bdev_io->driver_ctx;
+	struct raid_bdev_io_channel *raid_ch = spdk_io_channel_get_ctx(raid_io->ch);
+	struct raid_bdev *raid_bdev = (struct raid_bdev *)raid_bdev_io->bdev->ctxt;
+
+	assert(ret != 0);
+
+	if (ret == -ENOMEM) {
+		raid_io->waitq_entry.bdev = raid_bdev->base_bdev_info[pd_idx].bdev;
+		raid_io->waitq_entry.cb_fn = cb_fn;
+		raid_io->waitq_entry.cb_arg = raid_bdev_io;
+		spdk_bdev_queue_io_wait(raid_bdev->base_bdev_info[pd_idx].bdev,
+					raid_ch->base_channel[pd_idx],
+					&raid_io->waitq_entry);
+		return;
+	}
+
+	SPDK_ERRLOG("bdev io submit error not due to ENOMEM, it should not happen\n");
+	assert(false);
+	spdk_bdev_io_complete(raid_bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
+}
+
 /*
  * brief:
  * _raid_bdev_submit_reset_request_next function submits the next batch of reset requests
@@ -525,17 +562,9 @@ _raid_bdev_submit_reset_request_next(void *_bdev_io)
 				      raid_bdev_base_io_completion, bdev_io);
 		if (ret == 0) {
 			raid_io->base_bdev_io_submitted++;
-		} else if (ret == -ENOMEM) {
-			raid_io->waitq_entry.bdev = raid_bdev->base_bdev_info[i].bdev;
-			raid_io->waitq_entry.cb_fn = _raid_bdev_submit_reset_request_next;
-			raid_io->waitq_entry.cb_arg = bdev_io;
-			spdk_bdev_queue_io_wait(raid_bdev->base_bdev_info[i].bdev,
-						raid_ch->base_channel[i],
-						&raid_io->waitq_entry);
-			return;
 		} else {
-			assert(false);
-			spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
+			raid_bdev_base_io_submit_fail_process(bdev_io, i,
+							      _raid_bdev_submit_reset_request_next, ret);
 			return;
 		}
 	}