diff --git a/lib/bdev/raid/bdev_raid.c b/lib/bdev/raid/bdev_raid.c index 5b09db10a..ffd9a614b 100644 --- a/lib/bdev/raid/bdev_raid.c +++ b/lib/bdev/raid/bdev_raid.c @@ -647,6 +647,14 @@ raid_bdev_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_i { switch (bdev_io->type) { case SPDK_BDEV_IO_TYPE_READ: + if (bdev_io->u.bdev.iovs[0].iov_base == NULL) { + spdk_bdev_io_get_buf(bdev_io, _raid_bdev_submit_rw_request, + bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen); + } else { + /* Just call it directly if iov_base is already populated. */ + _raid_bdev_submit_rw_request(ch, bdev_io); + } + break; case SPDK_BDEV_IO_TYPE_WRITE: _raid_bdev_submit_rw_request(ch, bdev_io); break; 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 02b73c52d..489f4c2b9 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 @@ -165,6 +165,13 @@ reset_globals(void) rpc_req_size = 0; } +void +spdk_bdev_io_get_buf(struct spdk_bdev_io *bdev_io, spdk_bdev_io_get_buf_cb cb, + uint64_t len) +{ + CU_ASSERT(false); +} + /* Store the IO completion status in global variable to verify by various tests */ void spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status status)