From c59f0022c35cf4bf75822bf26744f1ec1c603c64 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Fri, 9 Oct 2020 10:12:25 +0900 Subject: [PATCH] bdev/part: Use spdk_bdev_open_ext() instead of spdk_bdev_open() This is just a drop in replacement of spdk_bdev_open(). Hold the passed remove_cb in struct spdk_bdev_part_base, and use it in the new callback function bdev_part_base_event_cb. The resize event is not supported for now. Signed-off-by: Shuhei Matsumoto Change-Id: I51c251f04bda13bd6712417010648717f7bf793f Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4572 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Aleksey Marchuk Reviewed-by: Paul Luse --- lib/bdev/part.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/bdev/part.c b/lib/bdev/part.c index 1f90ce492..aeb64c03a 100644 --- a/lib/bdev/part.c +++ b/lib/bdev/part.c @@ -56,6 +56,7 @@ struct spdk_bdev_part_base { struct bdev_part_tailq *tailq; spdk_io_channel_create_cb ch_create_cb; spdk_io_channel_destroy_cb ch_destroy_cb; + spdk_bdev_remove_cb_t remove_cb; struct spdk_thread *thread; }; @@ -416,6 +417,22 @@ bdev_part_channel_destroy_cb(void *io_device, void *ctx_buf) spdk_put_io_channel(ch->base_ch); } +static void +bdev_part_base_event_cb(enum spdk_bdev_event_type type, struct spdk_bdev *bdev, + void *event_ctx) +{ + struct spdk_bdev_part_base *base = event_ctx; + + switch (type) { + case SPDK_BDEV_EVENT_REMOVE: + base->remove_cb(base); + break; + default: + SPDK_NOTICELOG("Unsupported bdev event: type %d\n", type); + break; + } +} + struct spdk_bdev_part_base * spdk_bdev_part_base_construct(struct spdk_bdev *bdev, spdk_bdev_remove_cb_t remove_cb, struct spdk_bdev_module *module, @@ -447,8 +464,10 @@ struct spdk_bdev_part_base * base->channel_size = channel_size; base->ch_create_cb = ch_create_cb; base->ch_destroy_cb = ch_destroy_cb; + base->remove_cb = remove_cb; - rc = spdk_bdev_open(bdev, false, remove_cb, base, &base->desc); + rc = spdk_bdev_open_ext(spdk_bdev_get_name(bdev), false, bdev_part_base_event_cb, + base, &base->desc); if (rc) { spdk_bdev_part_base_free(base); SPDK_ERRLOG("could not open bdev %s: %s\n", spdk_bdev_get_name(bdev),