bdev: Add spdk_bdev_get_data_block_size API.

iSCSI target will need to get data block size except for metadata.
Other SPDK application may need to get the same information
future. Hence this patch adds an new API spdk_bdev_get_data_block_size
to bdev layer. In the header file, spdk_bdev_get_data_block_size
is located next to spdk_bdev_is_md_interleaved to avoid confusion
by new users.

Change-Id: I0fd2a6d0bcf6a4c18c583f70d96cc5035fc57fe9
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/445082
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: wuzhouhui <wuzhouhui@kingsoft.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Shuhei Matsumoto 2019-03-04 07:28:23 +09:00 committed by Changpeng Liu
parent 672b47119c
commit fb16799191
3 changed files with 28 additions and 0 deletions

View File

@ -26,6 +26,11 @@ any registered pollers to be run on the thread.
Added spdk_thread_is_idle() function to check if there are any scheduled operations
to be performed on the thread at given time.
### bdev
An new API `spdk_bdev_get_data_block_size` has been added to get size of data
block except for metadata.
## v19.01:
### ocf bdev

View File

@ -426,6 +426,19 @@ uint32_t spdk_bdev_get_md_size(const struct spdk_bdev *bdev);
*/
bool spdk_bdev_is_md_interleaved(const struct spdk_bdev *bdev);
/**
* Get block device data block size.
*
* Data block size is equal to block size if there is no metadata or
* metadata is separated with block data, or equal to block size minus
* metadata size if there is metadata and it is interleaved with
* block data.
*
* \param bdev Block device to query.
* \return Size of data block for this bdev in bytes.
*/
uint32_t spdk_bdev_get_data_block_size(const struct spdk_bdev *bdev);
/**
* Get DIF type of the block device.
*

View File

@ -2358,6 +2358,16 @@ spdk_bdev_is_md_interleaved(const struct spdk_bdev *bdev)
return (bdev->md_len != 0) && bdev->md_interleave;
}
uint32_t
spdk_bdev_get_data_block_size(const struct spdk_bdev *bdev)
{
if (spdk_bdev_is_md_interleaved(bdev)) {
return bdev->blocklen - bdev->md_len;
} else {
return bdev->blocklen;
}
}
enum spdk_dif_type spdk_bdev_get_dif_type(const struct spdk_bdev *bdev)
{
if (bdev->md_len != 0) {