From 5885a8ab43ef065399e63a5a4d5d8f4ab5903735 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Thu, 15 Oct 2020 07:54:33 +0900 Subject: [PATCH] lib/nbd: Use spdk_bdev_open_ext() instead of spdk_bdev_open() This is a drop-in replacement. Signed-off-by: Shuhei Matsumoto Change-Id: I3c297b6676b53bae8a308d5732800ac05c4cebc7 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4724 Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: Tomasz Zawadzki --- lib/nbd/nbd.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/lib/nbd/nbd.c b/lib/nbd/nbd.c index 74538d187..cc417de8a 100644 --- a/lib/nbd/nbd.c +++ b/lib/nbd/nbd.c @@ -850,13 +850,25 @@ nbd_start_kernel(void *arg) } static void -nbd_bdev_hot_remove(void *remove_ctx) +nbd_bdev_hot_remove(struct spdk_nbd_disk *nbd) { - struct spdk_nbd_disk *nbd = remove_ctx; - spdk_nbd_stop(nbd); } +static void +nbd_bdev_event_cb(enum spdk_bdev_event_type type, struct spdk_bdev *bdev, + void *event_ctx) +{ + switch (type) { + case SPDK_BDEV_EVENT_REMOVE: + nbd_bdev_hot_remove(event_ctx); + break; + default: + SPDK_NOTICELOG("Unsupported bdev event: type %d\n", type); + break; + } +} + struct spdk_nbd_start_ctx { struct spdk_nbd_disk *nbd; spdk_nbd_start_cb cb_fn; @@ -994,13 +1006,6 @@ spdk_nbd_start(const char *bdev_name, const char *nbd_path, int rc; int sp[2]; - bdev = spdk_bdev_get_by_name(bdev_name); - if (bdev == NULL) { - SPDK_ERRLOG("no bdev %s exists\n", bdev_name); - rc = -EINVAL; - goto err; - } - nbd = calloc(1, sizeof(*nbd)); if (nbd == NULL) { rc = -ENOMEM; @@ -1022,12 +1027,13 @@ spdk_nbd_start(const char *bdev_name, const char *nbd_path, ctx->cb_arg = cb_arg; ctx->polling_count = NBD_BUSY_WAITING_MS * 1000ULL / NBD_BUSY_POLLING_INTERVAL_US; - rc = spdk_bdev_open(bdev, true, nbd_bdev_hot_remove, nbd, &nbd->bdev_desc); + rc = spdk_bdev_open_ext(bdev_name, true, nbd_bdev_event_cb, nbd, &nbd->bdev_desc); if (rc != 0) { - SPDK_ERRLOG("could not open bdev %s, error=%d\n", spdk_bdev_get_name(bdev), rc); + SPDK_ERRLOG("could not open bdev %s, error=%d\n", bdev_name, rc); goto err; } + bdev = spdk_bdev_desc_get_bdev(nbd->bdev_desc); nbd->bdev = bdev; nbd->ch = spdk_bdev_get_io_channel(nbd->bdev_desc); @@ -1067,7 +1073,7 @@ spdk_nbd_start(const char *bdev_name, const char *nbd_path, } SPDK_INFOLOG(nbd, "Enabling kernel access to bdev %s via %s\n", - spdk_bdev_get_name(bdev), nbd_path); + bdev_name, nbd_path); nbd_enable_kernel(ctx); return;