From d3e394ae3f11fa664dc26b81043b339e96792bd4 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 29 Mar 2022 21:02:58 +0900 Subject: [PATCH] module/bdev: Send not boolean false but error response for deletion RPCs For deletion RPCs, a boolean false response had been sent rather than a error response when they failed. However, boolean false resonse had caused false negative, that is, test code had regarded as success by mistake. For example, the following test code regards as success if JSON RPC returns a boolean false response. if $rpc_py bdev_pmem_delete $pmem_bdev_name; then error "bdev_pmem_delete deleted pmem bdev for second time!" fi This patch fixes such false negative issue by explicitly returning a error response if deletion RPCs fail. Only the bdev_virtio_detach_controller RPC has implemented this. Signed-off-by: Shuhei Matsumoto Change-Id: I5409a070cbd2364dbb63b42421b032534c6f9a0b Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12077 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris Reviewed-by: John Kariuki --- module/bdev/aio/bdev_aio_rpc.c | 6 +++++- module/bdev/crypto/vbdev_crypto_rpc.c | 6 +++++- module/bdev/delay/vbdev_delay_rpc.c | 6 +++++- module/bdev/error/vbdev_error_rpc.c | 6 +++++- module/bdev/ftl/bdev_ftl_rpc.c | 6 +++++- module/bdev/iscsi/bdev_iscsi_rpc.c | 6 +++++- module/bdev/malloc/bdev_malloc_rpc.c | 6 +++++- module/bdev/null/bdev_null_rpc.c | 6 +++++- module/bdev/passthru/vbdev_passthru_rpc.c | 6 +++++- module/bdev/pmem/bdev_pmem_rpc.c | 6 +++++- module/bdev/rbd/bdev_rbd_rpc.c | 6 +++++- module/bdev/uring/bdev_uring_rpc.c | 6 +++++- 12 files changed, 60 insertions(+), 12 deletions(-) diff --git a/module/bdev/aio/bdev_aio_rpc.c b/module/bdev/aio/bdev_aio_rpc.c index 7bab2c0a4..4f78308ea 100644 --- a/module/bdev/aio/bdev_aio_rpc.c +++ b/module/bdev/aio/bdev_aio_rpc.c @@ -168,7 +168,11 @@ _rpc_bdev_aio_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } } static void diff --git a/module/bdev/crypto/vbdev_crypto_rpc.c b/module/bdev/crypto/vbdev_crypto_rpc.c index 3d3fba174..aae7805ca 100644 --- a/module/bdev/crypto/vbdev_crypto_rpc.c +++ b/module/bdev/crypto/vbdev_crypto_rpc.c @@ -309,7 +309,11 @@ rpc_bdev_crypto_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } } static void diff --git a/module/bdev/delay/vbdev_delay_rpc.c b/module/bdev/delay/vbdev_delay_rpc.c index 93c318f01..d04c45b1b 100644 --- a/module/bdev/delay/vbdev_delay_rpc.c +++ b/module/bdev/delay/vbdev_delay_rpc.c @@ -187,7 +187,11 @@ rpc_bdev_delay_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } } static void diff --git a/module/bdev/error/vbdev_error_rpc.c b/module/bdev/error/vbdev_error_rpc.c index 128599b92..a25c592d3 100644 --- a/module/bdev/error/vbdev_error_rpc.c +++ b/module/bdev/error/vbdev_error_rpc.c @@ -135,7 +135,11 @@ rpc_bdev_error_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } } static void diff --git a/module/bdev/ftl/bdev_ftl_rpc.c b/module/bdev/ftl/bdev_ftl_rpc.c index 7abc0fc0a..c13c656f7 100644 --- a/module/bdev/ftl/bdev_ftl_rpc.c +++ b/module/bdev/ftl/bdev_ftl_rpc.c @@ -230,7 +230,11 @@ rpc_bdev_ftl_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } } static void diff --git a/module/bdev/iscsi/bdev_iscsi_rpc.c b/module/bdev/iscsi/bdev_iscsi_rpc.c index c15d36ec0..46051fe85 100644 --- a/module/bdev/iscsi/bdev_iscsi_rpc.c +++ b/module/bdev/iscsi/bdev_iscsi_rpc.c @@ -123,7 +123,11 @@ rpc_bdev_iscsi_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } } static void diff --git a/module/bdev/malloc/bdev_malloc_rpc.c b/module/bdev/malloc/bdev_malloc_rpc.c index bfa1e7d1b..76347fea8 100644 --- a/module/bdev/malloc/bdev_malloc_rpc.c +++ b/module/bdev/malloc/bdev_malloc_rpc.c @@ -136,7 +136,11 @@ rpc_bdev_malloc_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } } static void diff --git a/module/bdev/null/bdev_null_rpc.c b/module/bdev/null/bdev_null_rpc.c index b20469378..a4ba2e1c1 100644 --- a/module/bdev/null/bdev_null_rpc.c +++ b/module/bdev/null/bdev_null_rpc.c @@ -171,7 +171,11 @@ rpc_bdev_null_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } } static void diff --git a/module/bdev/passthru/vbdev_passthru_rpc.c b/module/bdev/passthru/vbdev_passthru_rpc.c index b5ddbc42e..57347d440 100644 --- a/module/bdev/passthru/vbdev_passthru_rpc.c +++ b/module/bdev/passthru/vbdev_passthru_rpc.c @@ -112,7 +112,11 @@ rpc_bdev_passthru_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } } static void diff --git a/module/bdev/pmem/bdev_pmem_rpc.c b/module/bdev/pmem/bdev_pmem_rpc.c index 457ade3e3..cefa1b7ad 100644 --- a/module/bdev/pmem/bdev_pmem_rpc.c +++ b/module/bdev/pmem/bdev_pmem_rpc.c @@ -108,7 +108,11 @@ _rpc_bdev_pmem_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } } static void diff --git a/module/bdev/rbd/bdev_rbd_rpc.c b/module/bdev/rbd/bdev_rbd_rpc.c index 912d5cc82..5baefcfa9 100644 --- a/module/bdev/rbd/bdev_rbd_rpc.c +++ b/module/bdev/rbd/bdev_rbd_rpc.c @@ -180,7 +180,11 @@ _rpc_bdev_rbd_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } } static void diff --git a/module/bdev/uring/bdev_uring_rpc.c b/module/bdev/uring/bdev_uring_rpc.c index 4e772db0c..aa291daca 100644 --- a/module/bdev/uring/bdev_uring_rpc.c +++ b/module/bdev/uring/bdev_uring_rpc.c @@ -115,7 +115,11 @@ _rpc_bdev_uring_delete_cb(void *cb_arg, int bdeverrno) { struct spdk_jsonrpc_request *request = cb_arg; - spdk_jsonrpc_send_bool_response(request, bdeverrno == 0); + if (bdeverrno == 0) { + spdk_jsonrpc_send_bool_response(request, true); + } else { + spdk_jsonrpc_send_error_response(request, bdeverrno, spdk_strerror(-bdeverrno)); + } }