mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
block/file: Add file-specific image info
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>
This commit is contained in:
parent
3716470b24
commit
7f36a50ab4
2 changed files with 54 additions and 2 deletions
|
@ -3092,6 +3092,34 @@ raw_co_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static ImageInfoSpecific *raw_get_specific_info(BlockDriverState *bs,
|
||||
Error **errp)
|
||||
{
|
||||
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
|
||||
{
|
||||
BDRVRawState *s = bs->opaque;
|
||||
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;
|
||||
|
@ -3325,6 +3353,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,
|
||||
|
@ -3696,6 +3725,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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue