From 50f8c1432c5c9e761f0276a6420f7a0d46134a61 Mon Sep 17 00:00:00 2001 From: Damiano Cipriani Date: Tue, 29 Aug 2023 16:49:56 +0200 Subject: [PATCH] module/raid: add cb_arg to write superblock raid_bdev_write_superblock takes an addtional cb_arg parameter that will be passed to the callback function after the superblock write operation. Signed-off-by: Damiano Cipriani --- module/bdev/raid/bdev_raid.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/module/bdev/raid/bdev_raid.c b/module/bdev/raid/bdev_raid.c index f02b74799..1ace49c13 100644 --- a/module/bdev/raid/bdev_raid.c +++ b/module/bdev/raid/bdev_raid.c @@ -1204,12 +1204,13 @@ raid_bdev_configure_md(struct raid_bdev *raid_bdev) return 0; } -typedef void (*raid_bdev_write_superblock_cb)(bool success, struct raid_bdev *raid_bdev); +typedef void (*raid_bdev_write_superblock_cb)(bool success, struct raid_bdev *raid_bdev, void *ctx); struct raid_bdev_write_superblock_ctx { bool success; uint8_t remaining; - raid_bdev_write_superblock_cb cb; + raid_bdev_write_superblock_cb cb_fn; + void *cb_arg; }; static void @@ -1225,15 +1226,16 @@ raid_bdev_write_superblock_base_bdev_cb(int status, void *_ctx) } if (--ctx->remaining == 0) { - if (ctx->cb) { - ctx->cb(ctx->success, base_info->raid_bdev); + if (ctx->cb_fn) { + ctx->cb_fn(ctx->success, base_info->raid_bdev, ctx->cb_arg); } free(ctx); } } static int -raid_bdev_write_superblock(struct raid_bdev *raid_bdev, raid_bdev_write_superblock_cb cb) +raid_bdev_write_superblock(struct raid_bdev *raid_bdev, raid_bdev_write_superblock_cb cb_fn, + void *cb_arg) { struct raid_base_bdev_info *base_info; struct raid_bdev_write_superblock_ctx *ctx; @@ -1249,7 +1251,8 @@ raid_bdev_write_superblock(struct raid_bdev *raid_bdev, raid_bdev_write_superblo ctx->success = true; ctx->remaining = raid_bdev->num_base_bdevs; - ctx->cb = cb; + ctx->cb_fn = cb_fn; + ctx->cb_arg = cb_arg; raid_bdev->sb_write_ctx = ctx; @@ -1334,7 +1337,7 @@ raid_bdev_configure_cont(struct raid_bdev *raid_bdev) } static void -raid_bdev_configure_write_sb_cb(bool success, struct raid_bdev *raid_bdev) +raid_bdev_configure_write_sb_cb(bool success, struct raid_bdev *raid_bdev, void *ctx) { if (success) { raid_bdev_configure_cont(raid_bdev); @@ -1420,7 +1423,7 @@ raid_bdev_configure(struct raid_bdev *raid_bdev) } } - return raid_bdev_write_superblock(raid_bdev, raid_bdev_configure_write_sb_cb); + return raid_bdev_write_superblock(raid_bdev, raid_bdev_configure_write_sb_cb, NULL); } raid_bdev_configure_cont(raid_bdev); @@ -1679,7 +1682,7 @@ raid_bdev_channel_remove_base_bdev(struct spdk_io_channel_iter *i) } static void -raid_bdev_remove_base_bdev_write_sb_cb(bool success, struct raid_bdev *raid_bdev) +raid_bdev_remove_base_bdev_write_sb_cb(bool success, struct raid_bdev *raid_bdev, void *ctx) { if (!success) { SPDK_ERRLOG("Failed to write raid bdev '%s' superblock\n", raid_bdev->bdev.name); @@ -1714,9 +1717,9 @@ raid_bdev_remove_base_bdev_done(struct spdk_io_channel_iter *i, int status) sb_base_bdev->state = RAID_SB_BASE_BDEV_REMOVED; - rc = raid_bdev_write_superblock(raid_bdev, raid_bdev_remove_base_bdev_write_sb_cb); + rc = raid_bdev_write_superblock(raid_bdev, raid_bdev_remove_base_bdev_write_sb_cb, NULL); if (rc != 0) { - raid_bdev_remove_base_bdev_write_sb_cb(false, raid_bdev); + raid_bdev_remove_base_bdev_write_sb_cb(false, raid_bdev, NULL); } } else { raid_bdev_resume(raid_bdev, NULL, NULL);