diff --git a/lib/nbd/nbd.c b/lib/nbd/nbd.c index 3440b6f2b..bac4f8fa3 100644 --- a/lib/nbd/nbd.c +++ b/lib/nbd/nbd.c @@ -935,11 +935,16 @@ nbd_start_complete(struct spdk_nbd_start_ctx *ctx) #endif #ifdef NBD_FLAG_SEND_FLUSH - nbd_flags |= NBD_FLAG_SEND_FLUSH; + if (spdk_bdev_io_type_supported(ctx->nbd->bdev, SPDK_BDEV_IO_TYPE_FLUSH)) { + nbd_flags |= NBD_FLAG_SEND_FLUSH; + } #endif #ifdef NBD_FLAG_SEND_TRIM - nbd_flags |= NBD_FLAG_SEND_TRIM; + if (spdk_bdev_io_type_supported(ctx->nbd->bdev, SPDK_BDEV_IO_TYPE_UNMAP)) { + nbd_flags |= NBD_FLAG_SEND_TRIM; + } #endif + if (nbd_flags) { rc = ioctl(ctx->nbd->dev_fd, NBD_SET_FLAGS, nbd_flags); if (rc == -1) { diff --git a/test/bdev/blockdev.sh b/test/bdev/blockdev.sh index 6a310172a..669389177 100755 --- a/test/bdev/blockdev.sh +++ b/test/bdev/blockdev.sh @@ -228,6 +228,7 @@ function nbd_function_test() { nbd_rpc_start_stop_verify $rpc_server "${bdev_list[*]}" nbd_rpc_data_verify $rpc_server "${bdev_list[*]}" "${nbd_list[*]}" + nbd_with_lvol_verify $rpc_server "${nbd_list[*]}" killprocess $nbd_pid trap - SIGINT SIGTERM EXIT diff --git a/test/bdev/nbd_common.sh b/test/bdev/nbd_common.sh index 2ea765649..0dffd94aa 100644 --- a/test/bdev/nbd_common.sh +++ b/test/bdev/nbd_common.sh @@ -121,3 +121,21 @@ function nbd_rpc_start_stop_verify() { return 0 } + +function nbd_with_lvol_verify() { + local rpc_server=$1 + local nbd_list=($2) + + $rootdir/scripts/rpc.py -s $rpc_server bdev_malloc_create -b malloc_lvol_verify 16 512 + $rootdir/scripts/rpc.py -s $rpc_server bdev_lvol_create_lvstore malloc_lvol_verify lvs + $rootdir/scripts/rpc.py -s $rpc_server bdev_lvol_create lvol 4 -l lvs + $rootdir/scripts/rpc.py -s $rpc_server nbd_start_disk lvs/lvol "${nbd_list[0]}" + + mkfs_ret=$(mkfs.ext4 ${nbd_list[0]}) + nbd_stop_disks $rpc_server "${nbd_list[0]}" + if [ $mkfs_ret -ne 0 ]; then + return 1 + fi + + return 0 +}