[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 28/38] block/file: Add file-specific image info
From: |
Kevin Wolf |
Subject: |
[PULL 28/38] block/file: Add file-specific image info |
Date: |
Fri, 20 Jan 2023 13:26:23 +0100 |
From: Hanna Reitz <hreitz@redhat.com>
Add some (optional) information that the file driver can provide for
image files, namely the extent size hint.
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
Message-Id: <20220620162704.80987-3-hreitz@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
qapi/block-core.json | 26 ++++++++++++++++++++++++--
block/file-posix.c | 30 ++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 2 deletions(-)
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 95ac4fa634..f5d822cbd6 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -139,16 +139,29 @@
'*encryption-format': 'RbdImageEncryptionFormat'
} }
+##
+# @ImageInfoSpecificFile:
+#
+# @extent-size-hint: Extent size hint (if available)
+#
+# Since: 8.0
+##
+{ 'struct': 'ImageInfoSpecificFile',
+ 'data': {
+ '*extent-size-hint': 'size'
+ } }
+
##
# @ImageInfoSpecificKind:
#
# @luks: Since 2.7
# @rbd: Since 6.1
+# @file: Since 8.0
#
# Since: 1.7
##
{ 'enum': 'ImageInfoSpecificKind',
- 'data': [ 'qcow2', 'vmdk', 'luks', 'rbd' ] }
+ 'data': [ 'qcow2', 'vmdk', 'luks', 'rbd', 'file' ] }
##
# @ImageInfoSpecificQCow2Wrapper:
@@ -185,6 +198,14 @@
{ 'struct': 'ImageInfoSpecificRbdWrapper',
'data': { 'data': 'ImageInfoSpecificRbd' } }
+##
+# @ImageInfoSpecificFileWrapper:
+#
+# Since: 8.0
+##
+{ 'struct': 'ImageInfoSpecificFileWrapper',
+ 'data': { 'data': 'ImageInfoSpecificFile' } }
+
##
# @ImageInfoSpecific:
#
@@ -199,7 +220,8 @@
'qcow2': 'ImageInfoSpecificQCow2Wrapper',
'vmdk': 'ImageInfoSpecificVmdkWrapper',
'luks': 'ImageInfoSpecificLUKSWrapper',
- 'rbd': 'ImageInfoSpecificRbdWrapper'
+ 'rbd': 'ImageInfoSpecificRbdWrapper',
+ 'file': 'ImageInfoSpecificFileWrapper'
} }
##
diff --git a/block/file-posix.c b/block/file-posix.c
index 0370b550aa..98a743e519 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -3091,6 +3091,34 @@ raw_co_get_info(BlockDriverState *bs, BlockDriverInfo
*bdi)
return 0;
}
+static ImageInfoSpecific *raw_get_specific_info(BlockDriverState *bs,
+ Error **errp)
+{
+ BDRVRawState *s = bs->opaque;
+ ImageInfoSpecificFile *file_info = g_new0(ImageInfoSpecificFile, 1);
+ ImageInfoSpecific *spec_info = g_new(ImageInfoSpecific, 1);
+
+ *spec_info = (ImageInfoSpecific){
+ .type = IMAGE_INFO_SPECIFIC_KIND_FILE,
+ .u.file.data = file_info,
+ };
+
+#ifdef FS_IOC_FSGETXATTR
+ {
+ struct fsxattr attr;
+ int ret;
+
+ ret = ioctl(s->fd, FS_IOC_FSGETXATTR, &attr);
+ if (!ret && attr.fsx_extsize != 0) {
+ file_info->has_extent_size_hint = true;
+ file_info->extent_size_hint = attr.fsx_extsize;
+ }
+ }
+#endif
+
+ return spec_info;
+}
+
static BlockStatsSpecificFile get_blockstats_specific_file(BlockDriverState
*bs)
{
BDRVRawState *s = bs->opaque;
@@ -3324,6 +3352,7 @@ BlockDriver bdrv_file = {
.bdrv_co_truncate = raw_co_truncate,
.bdrv_co_getlength = raw_co_getlength,
.bdrv_co_get_info = raw_co_get_info,
+ .bdrv_get_specific_info = raw_get_specific_info,
.bdrv_co_get_allocated_file_size = raw_co_get_allocated_file_size,
.bdrv_get_specific_stats = raw_get_specific_stats,
.bdrv_check_perm = raw_check_perm,
@@ -3695,6 +3724,7 @@ static BlockDriver bdrv_host_device = {
.bdrv_co_truncate = raw_co_truncate,
.bdrv_co_getlength = raw_co_getlength,
.bdrv_co_get_info = raw_co_get_info,
+ .bdrv_get_specific_info = raw_get_specific_info,
.bdrv_co_get_allocated_file_size = raw_co_get_allocated_file_size,
.bdrv_get_specific_stats = hdev_get_specific_stats,
.bdrv_check_perm = raw_check_perm,
--
2.38.1
- [PULL 18/38] block-backend: use bdrv_getlength instead of blk_getlength, (continued)
- [PULL 18/38] block-backend: use bdrv_getlength instead of blk_getlength, Kevin Wolf, 2023/01/20
- [PULL 21/38] block: Convert bdrv_get_info() to co_wrapper_mixed, Kevin Wolf, 2023/01/20
- [PULL 17/38] block: Convert bdrv_refresh_total_sectors() to co_wrapper_mixed, Kevin Wolf, 2023/01/20
- [PULL 25/38] block: Rename bdrv_load/save_vmstate() to bdrv_co_load/save_vmstate(), Kevin Wolf, 2023/01/20
- [PULL 27/38] block: Improve empty format-specific info dump, Kevin Wolf, 2023/01/20
- [PULL 29/38] block/vmdk: Change extent info type, Kevin Wolf, 2023/01/20
- [PULL 24/38] block: Convert bdrv_debug_event() to co_wrapper_mixed, Kevin Wolf, 2023/01/20
- [PULL 23/38] block: Convert bdrv_lock_medium() to co_wrapper, Kevin Wolf, 2023/01/20
- [PULL 20/38] block: Convert bdrv_get_allocated_file_size() to co_wrapper, Kevin Wolf, 2023/01/20
- [PULL 22/38] block: Convert bdrv_eject() to co_wrapper, Kevin Wolf, 2023/01/20
- [PULL 28/38] block/file: Add file-specific image info,
Kevin Wolf <=
- [PULL 30/38] block: Split BlockNodeInfo off of ImageInfo, Kevin Wolf, 2023/01/20
- [PULL 26/38] block/nbd: Add missing <qemu/bswap.h> include, Kevin Wolf, 2023/01/20
- [PULL 31/38] qemu-img: Use BlockNodeInfo, Kevin Wolf, 2023/01/20
- [PULL 34/38] block/qapi: Add indentation to bdrv_node_info_dump(), Kevin Wolf, 2023/01/20
- [PULL 33/38] block/qapi: Introduce BlockGraphInfo, Kevin Wolf, 2023/01/20
- [PULL 37/38] qemu-img: Let info print block graph, Kevin Wolf, 2023/01/20
- [PULL 32/38] block/qapi: Let bdrv_query_image_info() recurse, Kevin Wolf, 2023/01/20
- [PULL 36/38] iotests/106, 214, 308: Read only one size line, Kevin Wolf, 2023/01/20
- [PULL 35/38] iotests: Filter child node information, Kevin Wolf, 2023/01/20
- [PULL 38/38] qemu-img: Change info key names for protocol nodes, Kevin Wolf, 2023/01/20