From d189b8eedd0324c89c7fdaf2a8f3a2dbcdfaa8ef Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Mon, 23 Oct 2017 10:15:29 -0700 Subject: [PATCH] blob_bdev: add unmap -> write_zeroes fallback If the bdev doesn't support unmap, we should not send unmap I/O. Instead, use spdk_bdev_write_zeroes(), which has a fallback in the bdev layer for devices that don't natively support it. Change-Id: I1bd05d3518716f8e60501dbb4f9da0fee23cf7c2 Signed-off-by: Daniel Verkamp Reviewed-on: https://review.gerrithub.io/383491 Reviewed-by: Seth Howell Reviewed-by: Jim Harris Reviewed-by: Tomasz Zawadzki Reviewed-by: Changpeng Liu Tested-by: SPDK Automated Test System --- lib/blob/bdev/blob_bdev.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/blob/bdev/blob_bdev.c b/lib/blob/bdev/blob_bdev.c index 10c91d62f..005447d55 100644 --- a/lib/blob/bdev/blob_bdev.c +++ b/lib/blob/bdev/blob_bdev.c @@ -227,7 +227,16 @@ spdk_bdev_create_bs_dev(struct spdk_bdev *bdev, spdk_bdev_remove_cb_t remove_cb, b->bs_dev.readv = bdev_blob_readv; b->bs_dev.writev = bdev_blob_writev; b->bs_dev.write_zeroes = bdev_blob_write_zeroes; - b->bs_dev.unmap = bdev_blob_unmap; + if (spdk_bdev_io_type_supported(bdev, SPDK_BDEV_IO_TYPE_UNMAP)) { + b->bs_dev.unmap = bdev_blob_unmap; + } else { + /* + * If bdev doesn't support unmap, use write_zeroes as a fallback. + * This will always work, since bdev implements write_zeroes on top of write + * if the device doesn't natively support write_zeroes. + */ + b->bs_dev.unmap = bdev_blob_write_zeroes; + } return &b->bs_dev; }