diff --git a/module/bdev/raid/bdev_raid.c b/module/bdev/raid/bdev_raid.c index 8e9fba00a..a5292dad7 100644 --- a/module/bdev/raid/bdev_raid.c +++ b/module/bdev/raid/bdev_raid.c @@ -415,7 +415,7 @@ raid_bdev_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io, return; } - raid0_submit_rw_request(raid_io); + raid_io->raid_bdev->module->submit_rw_request(raid_io); } /* @@ -446,7 +446,7 @@ raid_bdev_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_i bdev_io->u.bdev.num_blocks * bdev_io->bdev->blocklen); break; case SPDK_BDEV_IO_TYPE_WRITE: - raid0_submit_rw_request(raid_io); + raid_io->raid_bdev->module->submit_rw_request(raid_io); break; case SPDK_BDEV_IO_TYPE_RESET: @@ -455,7 +455,7 @@ raid_bdev_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_i case SPDK_BDEV_IO_TYPE_FLUSH: case SPDK_BDEV_IO_TYPE_UNMAP: - raid0_submit_null_payload_request(raid_io); + raid_io->raid_bdev->module->submit_null_payload_request(raid_io); break; default: diff --git a/module/bdev/raid/bdev_raid.h b/module/bdev/raid/bdev_raid.h index affcbf669..0891ebc30 100644 --- a/module/bdev/raid/bdev_raid.h +++ b/module/bdev/raid/bdev_raid.h @@ -253,6 +253,12 @@ struct raid_bdev_module { /* RAID level implemented by this module */ enum raid_level level; + /* Handler for R/W requests */ + void (*submit_rw_request)(struct raid_bdev_io *raid_io); + + /* Handler for requests without payload (flush, unmap) */ + void (*submit_null_payload_request)(struct raid_bdev_io *raid_io); + TAILQ_ENTRY(raid_bdev_module) link; }; @@ -268,10 +274,6 @@ __RAID_MODULE_REGISTER(__LINE__)(void) \ raid_bdev_module_list_add(_module); \ } -void -raid0_submit_rw_request(struct raid_bdev_io *raid_io); -void -raid0_submit_null_payload_request(struct raid_bdev_io *raid_io); void raid_bdev_base_io_completion(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg); void diff --git a/module/bdev/raid/raid0.c b/module/bdev/raid/raid0.c index 69fc73eeb..ca5334b73 100644 --- a/module/bdev/raid/raid0.c +++ b/module/bdev/raid/raid0.c @@ -65,6 +65,9 @@ raid0_bdev_io_completion(struct spdk_bdev_io *bdev_io, bool success, void *cb_ar } } +static void +raid0_submit_rw_request(struct raid_bdev_io *raid_io); + static void _raid0_submit_rw_request(void *_raid_io) { @@ -82,7 +85,7 @@ _raid0_submit_rw_request(void *_raid_io) * returns: * none */ -void +static void raid0_submit_rw_request(struct raid_bdev_io *raid_io) { struct spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(raid_io); @@ -248,6 +251,9 @@ _raid0_split_io_range(struct raid_bdev_io_range *io_range, uint8_t disk_idx, *_nblocks_in_disk = nblocks_in_disk; } +static void +raid0_submit_null_payload_request(struct raid_bdev_io *raid_io); + static void _raid0_submit_null_payload_request(void *_raid_io) { @@ -267,7 +273,7 @@ _raid0_submit_null_payload_request(void *_raid_io) * returns: * none */ -void +static void raid0_submit_null_payload_request(struct raid_bdev_io *raid_io) { struct spdk_bdev_io *bdev_io; @@ -336,6 +342,8 @@ raid0_submit_null_payload_request(struct raid_bdev_io *raid_io) static struct raid_bdev_module g_raid0_module = { .level = RAID0, + .submit_rw_request = raid0_submit_rw_request, + .submit_null_payload_request = raid0_submit_null_payload_request, }; RAID_MODULE_REGISTER(&g_raid0_module)