From c783caabc7a80f51d80bd67b91f53c038c545868 Mon Sep 17 00:00:00 2001 From: Maciej Szwed Date: Mon, 18 Sep 2017 14:15:34 +0200 Subject: [PATCH] bdev: remove bdev_opened_for_write restriction This restriction causes bdevs examination/discovery to fail when there are asynchronous operations. We should remove this limitation for now. Future plan is to implement approach similar to the one that is present in kernel. Signed-off-by: Maciej Szwed Change-Id: Ibe5572297672022412d25a4a835dc9527ce97f3e Reviewed-on: https://review.gerrithub.io/378758 Tested-by: SPDK Automated Test System Reviewed-by: Tomasz Zawadzki Reviewed-by: Daniel Verkamp Reviewed-by: Jim Harris --- include/spdk_internal/bdev.h | 2 -- lib/bdev/bdev.c | 20 ++------------------ lib/bdev/rpc/bdev_rpc.c | 4 ++-- test/lib/bdev/blockdev.sh | 2 +- 4 files changed, 5 insertions(+), 23 deletions(-) diff --git a/include/spdk_internal/bdev.h b/include/spdk_internal/bdev.h index a621b5f99..8c41cdc54 100644 --- a/include/spdk_internal/bdev.h +++ b/include/spdk_internal/bdev.h @@ -224,8 +224,6 @@ struct spdk_bdev { bool bdev_opened; - bool bdev_opened_for_write; - /** * Pointer to the module that has claimed this bdev for purposes of creating virtual * bdevs on top of it. Set to NULL if the bdev has not been claimed. diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 3ca8e3cb6..2b696fedc 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -1481,7 +1481,6 @@ _spdk_bdev_register(struct spdk_bdev *bdev) TAILQ_INIT(&bdev->open_descs); bdev->bdev_opened = false; - bdev->bdev_opened_for_write = false; TAILQ_INIT(&bdev->vbdevs); TAILQ_INIT(&bdev->base_bdevs); @@ -1605,8 +1604,8 @@ spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_ pthread_mutex_lock(&bdev->mutex); - if (write && (bdev->bdev_opened_for_write || bdev->claim_module)) { - SPDK_ERRLOG("failed, %s already opened for write or claimed\n", bdev->name); + if (write && bdev->claim_module) { + SPDK_ERRLOG("failed, %s already claimed\n", bdev->name); free(desc); pthread_mutex_unlock(&bdev->mutex); return -EPERM; @@ -1614,10 +1613,6 @@ spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_ TAILQ_INSERT_TAIL(&bdev->open_descs, desc, link); - if (write) { - bdev->bdev_opened_for_write = true; - } - bdev->bdev_opened = true; desc->bdev = bdev; @@ -1639,11 +1634,6 @@ spdk_bdev_close(struct spdk_bdev_desc *desc) pthread_mutex_lock(&bdev->mutex); - if (desc->write) { - assert(bdev->bdev_opened_for_write); - bdev->bdev_opened_for_write = false; - } - bdev->bdev_opened = false; TAILQ_REMOVE(&bdev->open_descs, desc, link); @@ -1669,13 +1659,7 @@ spdk_bdev_module_claim_bdev(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc, return -EPERM; } - if ((!desc || !desc->write) && bdev->bdev_opened_for_write) { - SPDK_ERRLOG("bdev %s already opened with write access\n", bdev->name); - return -EPERM; - } - if (desc && !desc->write) { - bdev->bdev_opened_for_write = true; desc->write = true; } diff --git a/lib/bdev/rpc/bdev_rpc.c b/lib/bdev/rpc/bdev_rpc.c index 8ff9b8eff..4232785e5 100644 --- a/lib/bdev/rpc/bdev_rpc.c +++ b/lib/bdev/rpc/bdev_rpc.c @@ -54,8 +54,8 @@ spdk_rpc_dump_bdev_info(struct spdk_json_write_ctx *w, spdk_json_write_name(w, "num_blocks"); spdk_json_write_uint64(w, spdk_bdev_get_num_blocks(bdev)); - spdk_json_write_name(w, "bdev_opened_for_write"); - spdk_json_write_bool(w, bdev->bdev_opened_for_write); + spdk_json_write_name(w, "claimed"); + spdk_json_write_bool(w, (bdev->claim_module != NULL)); spdk_json_write_name(w, "supported_io_types"); spdk_json_write_object_begin(w); diff --git a/test/lib/bdev/blockdev.sh b/test/lib/bdev/blockdev.sh index 67a2f8553..480975a93 100755 --- a/test/lib/bdev/blockdev.sh +++ b/test/lib/bdev/blockdev.sh @@ -38,7 +38,7 @@ fi timing_exit nbd timing_enter bdev_svc -bdevs=$(discover_bdevs $rootdir $testdir/bdev.conf | jq -r '.[] | select(.bdev_opened_for_write == false)') +bdevs=$(discover_bdevs $rootdir $testdir/bdev.conf | jq -r '.[] | select(.claimed == false)') timing_exit bdev_svc if [ -d /usr/src/fio ] && [ $SPDK_RUN_ASAN -eq 0 ]; then