From 4f2f8e8d44672fcbab37196b32c44795f26df470 Mon Sep 17 00:00:00 2001 From: Liu Xiaodong Date: Tue, 23 Feb 2021 05:29:46 -0500 Subject: [PATCH] nbd: set NBD_FLAG_SEND_FLUSH SPDK nbd supports NBD_CMD_FLUSH, so set NBD_FLAG_SEND_FLUSH to inform kernel about this flush ability. Change-Id: Iaccb98da07e6fa184a798d792dd062f3d4013ade Signed-off-by: Liu Xiaodong Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6524 Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Reviewed-by: Jim Harris Reviewed-by: Reviewed-by: Shuhei Matsumoto --- lib/nbd/nbd.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/nbd/nbd.c b/lib/nbd/nbd.c index 5420eab13..690d2d652 100644 --- a/lib/nbd/nbd.c +++ b/lib/nbd/nbd.c @@ -917,6 +917,7 @@ nbd_start_complete(struct spdk_nbd_start_ctx *ctx) int rc; pthread_t tid; int flag; + unsigned long nbd_flags = 0; rc = ioctl(ctx->nbd->dev_fd, NBD_SET_BLKSIZE, spdk_bdev_get_block_size(ctx->nbd->bdev)); if (rc == -1) { @@ -943,14 +944,20 @@ nbd_start_complete(struct spdk_nbd_start_ctx *ctx) SPDK_NOTICELOG("ioctl(NBD_SET_TIMEOUT) is not supported.\n"); #endif -#ifdef NBD_FLAG_SEND_TRIM - rc = ioctl(ctx->nbd->dev_fd, NBD_SET_FLAGS, NBD_FLAG_SEND_TRIM); - if (rc == -1) { - SPDK_ERRLOG("ioctl(NBD_SET_FLAGS) failed: %s\n", spdk_strerror(errno)); - rc = -errno; - goto err; - } +#ifdef NBD_FLAG_SEND_FLUSH + nbd_flags |= NBD_FLAG_SEND_FLUSH; #endif +#ifdef NBD_FLAG_SEND_TRIM + nbd_flags |= NBD_FLAG_SEND_TRIM; +#endif + if (nbd_flags) { + rc = ioctl(ctx->nbd->dev_fd, NBD_SET_FLAGS, nbd_flags); + if (rc == -1) { + SPDK_ERRLOG("ioctl(NBD_SET_FLAGS, 0x%lx) failed: %s\n", nbd_flags, spdk_strerror(errno)); + rc = -errno; + goto err; + } + } rc = pthread_create(&tid, NULL, nbd_start_kernel, (void *)(intptr_t)ctx->nbd->dev_fd); if (rc != 0) {