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; }