Message ID | 20210707053543.2521677-1-oro@il.ibm.com |
---|---|
State | New |
Headers | show |
Series | [v1] block/raw-format: implement .bdrv_get_specific_info handler | expand |
Am 07.07.2021 um 07:35 hat Or Ozeri geschrieben: > When using the raw format, allow exposing specific info by the underlying storage. > In particular, this will enable RBD images using the raw format to indicate > a LUKS2 encrypted image in the output of qemu-img info. > > Signed-off-by: Or Ozeri <oro@il.ibm.com> This doesn't feel right because it would introduce an inconsistency (drivers are supposed to return information about their layer, and all drivers except raw would still do so) and therefore wouldn't even solve the full problem: For non-raw images, the information isn't any less useful, but it still wouldn't be available. I believe the information is already available in QMP, using query-named-block-nodes, because then you get a separate BlockDeviceInfo (which contains ImageInfoSpecific) for each node, including the protocol node. So maybe what we need to do is change qemu-img to iterate the node chain (possibly using bdrv_primary_bs()) and print the ImageInfoSpecific for each layer if it's present, while indicating which part is for which layer. So the output could look like this: ... Driver specific information (qcow2): compat: 0.10 compression type: zlib refcount bits: 16 Driver specific information (rbd): encryption format: luks Kevin
Am 07.07.2021 um 10:50 hat Or Ozeri geschrieben: > Would you suggest to do this child traversal on bdrv_query_image_info, and have > it returned as part of the ImageInfo struct? > In that case, I would add *driver-specific to ImageInfo, in addition to the > existing *format-specific? No, extending ImageInfo with a single additonal field wouldn't be generic either. It's not set in stone that your graph must consist of exactly two block nodes. > Or should I just do the traversal in img_info (qemu-img.c), avoiding > the change to the ImageInfo struct? Yes, img_info() or bdrv_image_info_dump() doing the traversal through the chain is what I had in mind. Maybe let img_info() collect everything and then pass a list of ImageInfos instead of just a single one to bdrv_image_info_dump(). Kevin > -----"Kevin Wolf" <[1]kwolf@redhat.com> wrote: ----- > To: "Or Ozeri" <[2]oro@il.ibm.com> > From: "Kevin Wolf" <[3]kwolf@redhat.com> > Date: 07/07/2021 10:52AM > Cc: [4]qemu-devel@nongnu.org, [5]qemu-block@nongnu.org, [6] > to.my.trociny@gmail.com, [7]dannyh@il.ibm.com, [8]berrange@redhat.com, [9] > idryomov@gmail.com > Subject: [EXTERNAL] Re: [PATCH v1] block/raw-format: implement > .bdrv_get_specific_info handler > > Am 07.07.2021 um 07:35 hat Or Ozeri geschrieben: > > When using the raw format, allow exposing specific info by the underlying > storage. > > In particular, this will enable RBD images using the raw format to indicate > > a LUKS2 encrypted image in the output of qemu-img info. > > > > Signed-off-by: Or Ozeri <[10]oro@il.ibm.com> > > This doesn't feel right because it would introduce an inconsistency > (drivers are supposed to return information about their layer, and all > drivers except raw would still do so) and therefore wouldn't even solve > the full problem: For non-raw images, the information isn't any less > useful, but it still wouldn't be available. > > I believe the information is already available in QMP, using > query-named-block-nodes, because then you get a separate BlockDeviceInfo > (which contains ImageInfoSpecific) for each node, including the protocol > node. > > So maybe what we need to do is change qemu-img to iterate the node chain > (possibly using bdrv_primary_bs()) and print the ImageInfoSpecific for > each layer if it's present, while indicating which part is for which > layer. > > So the output could look like this: > > ... > Driver specific information (qcow2): > compat: 0.10 > compression type: zlib > refcount bits: 16 > Driver specific information (rbd): > encryption format: luks > > Kevin > > > > > References: > > [1] mailto:kwolf@redhat.com > [2] mailto:oro@il.ibm.com > [3] mailto:kwolf@redhat.com > [4] mailto:qemu-devel@nongnu.org > [5] mailto:qemu-block@nongnu.org > [6] mailto:to.my.trociny@gmail.com > [7] mailto:dannyh@il.ibm.com > [8] mailto:berrange@redhat.com > [9] mailto:idryomov@gmail.com > [10] mailto:oro@il.ibm.com
diff --git a/block/raw-format.c b/block/raw-format.c index 7717578ed6..f6e70e2356 100644 --- a/block/raw-format.c +++ b/block/raw-format.c @@ -369,6 +369,12 @@ static int raw_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) return bdrv_get_info(bs->file->bs, bdi); } +static ImageInfoSpecific *raw_get_specific_info(BlockDriverState *bs, + Error **errp) +{ + return bdrv_get_specific_info(bs->file->bs, errp); +} + static void raw_refresh_limits(BlockDriverState *bs, Error **errp) { if (bs->probed) { @@ -603,6 +609,7 @@ BlockDriver bdrv_raw = { .has_variable_length = true, .bdrv_measure = &raw_measure, .bdrv_get_info = &raw_get_info, + .bdrv_get_specific_info = &raw_get_specific_info, .bdrv_refresh_limits = &raw_refresh_limits, .bdrv_probe_blocksizes = &raw_probe_blocksizes, .bdrv_probe_geometry = &raw_probe_geometry,
When using the raw format, allow exposing specific info by the underlying storage. In particular, this will enable RBD images using the raw format to indicate a LUKS2 encrypted image in the output of qemu-img info. Signed-off-by: Or Ozeri <oro@il.ibm.com> --- block/raw-format.c | 7 +++++++ 1 file changed, 7 insertions(+)