From 4f1530c9eb62f0391f4134e685a764a919e84e18 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Wed, 21 Apr 2021 20:14:39 +0800 Subject: [PATCH] bdev: add bdev_unmap_should_split() function Change-Id: I2680eef93da13d8378527349cdc5ba36859f89dc Signed-off-by: Changpeng Liu Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7517 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- lib/bdev/bdev.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 5ca53e4e3..835660f92 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -2001,6 +2001,22 @@ bdev_rw_should_split(struct spdk_bdev_io *bdev_io) return false; } +static bool +bdev_unmap_should_split(struct spdk_bdev_io *bdev_io) +{ + uint32_t num_unmap_segments; + + if (!bdev_io->bdev->max_unmap || !bdev_io->bdev->max_unmap_segments) { + return false; + } + num_unmap_segments = spdk_divide_round_up(bdev_io->u.bdev.num_blocks, bdev_io->bdev->max_unmap); + if (num_unmap_segments > bdev_io->bdev->max_unmap_segments) { + return true; + } + + return false; +} + static bool bdev_io_should_split(struct spdk_bdev_io *bdev_io) { @@ -2008,6 +2024,8 @@ bdev_io_should_split(struct spdk_bdev_io *bdev_io) case SPDK_BDEV_IO_TYPE_READ: case SPDK_BDEV_IO_TYPE_WRITE: return bdev_rw_should_split(bdev_io); + case SPDK_BDEV_IO_TYPE_UNMAP: + return bdev_unmap_should_split(bdev_io); default: return false; }