On 2013-09-18 16:59, Stefan Hajnoczi wrote:
On Thu, Sep 05, 2013 at 02:05:13PM +0200, Max Reitz wrote:
diff --git a/block.c b/block.c
index 26639e8..9fd9f3a 100644
--- a/block.c
+++ b/block.c
@@ -1921,7 +1921,7 @@ void bdrv_round_to_clusters(BlockDriverState *bs,
int64_t *cluster_sector_num,
int *cluster_nb_sectors)
{
- BlockDriverInfo bdi;
+ BlockDriverInfo bdi = { .info_string = NULL };
if (bdrv_get_info(bs, &bdi) < 0 || bdi.cluster_size == 0) {
*cluster_sector_num = sector_num;
@@ -1932,6 +1932,7 @@ void bdrv_round_to_clusters(BlockDriverState *bs,
*cluster_nb_sectors = QEMU_ALIGN_UP(sector_num - *cluster_sector_num +
nb_sectors, c);
}
+ g_free(bdi.info_string);
}
This function is called in the I/O path. It's not appropriate to
generate an options string each time this gets called :).
Together with Eric's comments it seems like this change needs a
different interface that is QMP-friendly and not in the I/O path.
Stefan
I've already sent a v2, v3 and v4 which address Eric's comment. However,
your problem still remains. I think I might either add a new function
for specifically requesting the format specific information (instead of
generally including it in BDI) or introduce a flag parameter for
bdrv_get_info which requests that BDI field to be filled (or, more
generally, which will prevent bdrv_get_info from performing any
relatively expensive operation).
Max