From 54aa3de72ea2aaa2e903e7e879a4f3dda515a00e Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Thu, 12 Nov 2020 19:13:37 -0600 Subject: qapi: Use QAPI_LIST_PREPEND() where possible Anywhere we create a list of just one item or by prepending items (typically because order doesn't matter), we can use QAPI_LIST_PREPEND(). But places where we must keep the list in order by appending remain open-coded until later patches. Note that as a side effect, this also performs a cleanup of two minor issues in qga/commands-posix.c: the old code was performing new = g_malloc0(sizeof(*ret)); which 1) is confusing because you have to verify whether 'new' and 'ret' are variables with the same type, and 2) would conflict with C++ compilation (not an actual problem for this file, but makes copy-and-paste harder). Signed-off-by: Eric Blake Message-Id: <20201113011340.463563-5-eblake@redhat.com> Reviewed-by: Markus Armbruster Acked-by: Stefan Hajnoczi [Straightforward conflicts due to commit a8aa94b5f8 "qga: update schema for guest-get-disks 'dependents' field" and commit a10b453a52 "target/mips: Move mips_cpu_add_definition() from helper.c to cpu.c" resolved. Commit message tweaked.] Signed-off-by: Markus Armbruster --- block/gluster.c | 4 ++-- block/qapi.c | 7 ++----- 2 files changed, 4 insertions(+), 7 deletions(-) (limited to 'block') diff --git a/block/gluster.c b/block/gluster.c index 4f1448e..1f8699b 100644 --- a/block/gluster.c +++ b/block/gluster.c @@ -359,8 +359,8 @@ static int qemu_gluster_parse_uri(BlockdevOptionsGluster *gconf, return -EINVAL; } - gconf->server = g_new0(SocketAddressList, 1); - gconf->server->value = gsconf = g_new0(SocketAddress, 1); + gsconf = g_new0(SocketAddress, 1); + QAPI_LIST_PREPEND(gconf->server, gsconf); /* transport */ if (!uri->scheme || !strcmp(uri->scheme, "gluster")) { diff --git a/block/qapi.c b/block/qapi.c index 036da08..0ca206f 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -486,12 +486,7 @@ static void bdrv_query_blk_stats(BlockDeviceStats *ds, BlockBackend *blk) ds->account_failed = stats->account_failed; while ((ts = block_acct_interval_next(stats, ts))) { - BlockDeviceTimedStatsList *timed_stats = - g_malloc0(sizeof(*timed_stats)); BlockDeviceTimedStats *dev_stats = g_malloc0(sizeof(*dev_stats)); - timed_stats->next = ds->timed_stats; - timed_stats->value = dev_stats; - ds->timed_stats = timed_stats; TimedAverage *rd = &ts->latency[BLOCK_ACCT_READ]; TimedAverage *wr = &ts->latency[BLOCK_ACCT_WRITE]; @@ -515,6 +510,8 @@ static void bdrv_query_blk_stats(BlockDeviceStats *ds, BlockBackend *blk) block_acct_queue_depth(ts, BLOCK_ACCT_READ); dev_stats->avg_wr_queue_depth = block_acct_queue_depth(ts, BLOCK_ACCT_WRITE); + + QAPI_LIST_PREPEND(ds->timed_stats, dev_stats); } bdrv_latency_histogram_stats(&stats->latency_histogram[BLOCK_ACCT_READ], -- cgit v1.1 From eab3a4678b07267c39e7290a6e9e7690b1d2a521 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Fri, 11 Dec 2020 18:11:37 +0100 Subject: qobject: Change qobject_to_json()'s value to GString qobject_to_json() and qobject_to_json_pretty() build a GString, then covert it to QString. Just one of the callers actually needs a QString: qemu_rbd_parse_filename(). A few others need a string they can modify: qmp_send_response(), qga's send_response(), to_json_str(), and qmp_fd_vsend_fds(). The remainder just need a string. Change qobject_to_json() and qobject_to_json_pretty() to return the GString. qemu_rbd_parse_filename() now has to convert to QString. All others save a QString temporary. to_json_str() actually becomes a bit simpler, because GString provides more convenient modification functions. Signed-off-by: Markus Armbruster Message-Id: <20201211171152.146877-6-armbru@redhat.com> --- block/rbd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'block') diff --git a/block/rbd.c b/block/rbd.c index 9bd2bce..9071a00 100644 --- a/block/rbd.c +++ b/block/rbd.c @@ -232,7 +232,7 @@ static void qemu_rbd_parse_filename(const char *filename, QDict *options, if (keypairs) { qdict_put(options, "=keyvalue-pairs", - qobject_to_json(QOBJECT(keypairs))); + qstring_from_gstring(qobject_to_json(QOBJECT(keypairs)))); } done: -- cgit v1.1