From: Kevin Wolf <kwolf@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com
Subject: [Qemu-devel] [PULL 12/28] block: Eliminate bdrv_iterate(), use bdrv_next()
Date: Mon, 20 Oct 2014 15:35:38 +0200 [thread overview]
Message-ID: <1413812154-11153-13-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1413812154-11153-1-git-send-email-kwolf@redhat.com>
From: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Benoît Canet <benoit.canet@nodalink.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block-migration.c | 30 +++++++++++++++---------------
block.c | 9 ---------
blockdev.c | 27 +++++++++++----------------
include/block/block.h | 2 --
monitor.c | 32 +++++++++-----------------------
5 files changed, 35 insertions(+), 65 deletions(-)
diff --git a/block-migration.c b/block-migration.c
index 3ad31a2..cb3e16c 100644
--- a/block-migration.c
+++ b/block-migration.c
@@ -343,12 +343,25 @@ static void unset_dirty_tracking(void)
}
}
-static void init_blk_migration_it(void *opaque, BlockDriverState *bs)
+static void init_blk_migration(QEMUFile *f)
{
+ BlockDriverState *bs;
BlkMigDevState *bmds;
int64_t sectors;
- if (!bdrv_is_read_only(bs)) {
+ block_mig_state.submitted = 0;
+ block_mig_state.read_done = 0;
+ block_mig_state.transferred = 0;
+ block_mig_state.total_sector_sum = 0;
+ block_mig_state.prev_progress = -1;
+ block_mig_state.bulk_completed = 0;
+ block_mig_state.zero_blocks = migrate_zero_blocks();
+
+ for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
+ if (bdrv_is_read_only(bs)) {
+ continue;
+ }
+
sectors = bdrv_nb_sectors(bs);
if (sectors <= 0) {
return;
@@ -378,19 +391,6 @@ static void init_blk_migration_it(void *opaque, BlockDriverState *bs)
}
}
-static void init_blk_migration(QEMUFile *f)
-{
- block_mig_state.submitted = 0;
- block_mig_state.read_done = 0;
- block_mig_state.transferred = 0;
- block_mig_state.total_sector_sum = 0;
- block_mig_state.prev_progress = -1;
- block_mig_state.bulk_completed = 0;
- block_mig_state.zero_blocks = migrate_zero_blocks();
-
- bdrv_iterate(init_blk_migration_it, NULL);
-}
-
/* Called with no lock taken. */
static int blk_mig_save_bulked_block(QEMUFile *f)
diff --git a/block.c b/block.c
index c210315..d13d29b 100644
--- a/block.c
+++ b/block.c
@@ -3906,15 +3906,6 @@ BlockDriverState *bdrv_next(BlockDriverState *bs)
return QTAILQ_NEXT(bs, device_list);
}
-void bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs), void *opaque)
-{
- BlockDriverState *bs;
-
- QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
- it(opaque, bs);
- }
-}
-
const char *bdrv_get_device_name(BlockDriverState *bs)
{
return bs->device_name;
diff --git a/blockdev.c b/blockdev.c
index 3038203..c99df8f 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2608,26 +2608,21 @@ fail:
qmp_output_visitor_cleanup(ov);
}
-static void do_qmp_query_block_jobs_one(void *opaque, BlockDriverState *bs)
+BlockJobInfoList *qmp_query_block_jobs(Error **errp)
{
- BlockJobInfoList **prev = opaque;
- BlockJob *job = bs->job;
+ BlockJobInfoList *head = NULL, **p_next = &head;
+ BlockDriverState *bs;
- if (job) {
- BlockJobInfoList *elem = g_new0(BlockJobInfoList, 1);
- elem->value = block_job_query(bs->job);
- (*prev)->next = elem;
- *prev = elem;
+ for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
+ if (bs->job) {
+ BlockJobInfoList *elem = g_new0(BlockJobInfoList, 1);
+ elem->value = block_job_query(bs->job);
+ *p_next = elem;
+ p_next = &elem->next;
+ }
}
-}
-BlockJobInfoList *qmp_query_block_jobs(Error **errp)
-{
- /* Dummy is a fake list element for holding the head pointer */
- BlockJobInfoList dummy = {};
- BlockJobInfoList *prev = &dummy;
- bdrv_iterate(do_qmp_query_block_jobs_one, &prev);
- return dummy.next;
+ return head;
}
QemuOptsList qemu_common_drive_opts = {
diff --git a/include/block/block.h b/include/block/block.h
index a3039ce..6c97dd4 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -411,8 +411,6 @@ BlockDriverState *bdrv_lookup_bs(const char *device,
Error **errp);
bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base);
BlockDriverState *bdrv_next(BlockDriverState *bs);
-void bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs),
- void *opaque);
int bdrv_is_encrypted(BlockDriverState *bs);
int bdrv_key_required(BlockDriverState *bs);
int bdrv_set_key(BlockDriverState *bs, const char *key);
diff --git a/monitor.c b/monitor.c
index 2d14f39..412e63f 100644
--- a/monitor.c
+++ b/monitor.c
@@ -4216,24 +4216,6 @@ static void file_completion(Monitor *mon, const char *input)
closedir(ffs);
}
-typedef struct MonitorBlockComplete {
- Monitor *mon;
- const char *input;
-} MonitorBlockComplete;
-
-static void block_completion_it(void *opaque, BlockDriverState *bs)
-{
- const char *name = bdrv_get_device_name(bs);
- MonitorBlockComplete *mbc = opaque;
- Monitor *mon = mbc->mon;
- const char *input = mbc->input;
-
- if (input[0] == '\0' ||
- !strncmp(name, (char *)input, strlen(input))) {
- readline_add_completion(mon->rs, name);
- }
-}
-
static const char *next_arg_type(const char *typestr)
{
const char *p = strchr(typestr, ':');
@@ -4671,9 +4653,9 @@ static void monitor_find_completion_by_table(Monitor *mon,
{
const char *cmdname;
int i;
- const char *ptype, *str;
+ const char *ptype, *str, *name;
const mon_cmd_t *cmd;
- MonitorBlockComplete mbs;
+ BlockDriverState *bs;
if (nb_args <= 1) {
/* command completion */
@@ -4725,10 +4707,14 @@ static void monitor_find_completion_by_table(Monitor *mon,
break;
case 'B':
/* block device name completion */
- mbs.mon = mon;
- mbs.input = str;
readline_set_completion_index(mon->rs, strlen(str));
- bdrv_iterate(block_completion_it, &mbs);
+ for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
+ name = bdrv_get_device_name(bs);
+ if (str[0] == '\0' ||
+ !strncmp(name, str, strlen(str))) {
+ readline_add_completion(mon->rs, name);
+ }
+ }
break;
case 's':
case 'S':
--
1.8.3.1
next prev parent reply other threads:[~2014-10-20 13:36 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-20 13:35 [Qemu-devel] [PULL 00/28] Block patches Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 01/28] qcow2: fix leak of Qcow2DiscardRegion in update_refcount_discard Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 02/28] block/raw-posix: Fix disk corruption in try_fiemap Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 03/28] block/raw-posix: use seek_hole ahead of fiemap Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 04/28] nbd: Fix filename generation Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 05/28] block: Split bdrv_new_root() off bdrv_new() Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 06/28] block: New BlockBackend Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 07/28] block: Connect BlockBackend to BlockDriverState Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 08/28] block: Connect BlockBackend and DriveInfo Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 09/28] block: Code motion to get rid of stubs/blockdev.c Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 10/28] block: Make BlockBackend own its BlockDriverState Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 11/28] blockdev: Eliminate drive_del() Kevin Wolf
2014-10-20 13:35 ` Kevin Wolf [this message]
2014-10-20 13:35 ` [Qemu-devel] [PULL 13/28] block: Eliminate BlockDriverState member device_name[] Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 14/28] block: Merge BlockBackend and BlockDriverState name spaces Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 15/28] block: Eliminate DriveInfo member bdrv, use blk_by_legacy_dinfo() Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 16/28] block: Rename BlockDriverAIOCB* to BlockAIOCB* Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 17/28] block: Rename BlockDriverCompletionFunc to BlockCompletionFunc Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 18/28] virtio-blk: Drop redundant VirtIOBlock member conf Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 19/28] virtio-blk: Rename VirtIOBlkConf variables to conf Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 20/28] hw: Convert from BlockDriverState to BlockBackend, mostly Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 21/28] ide: Complete conversion from BlockDriverState to BlockBackend Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 22/28] pc87312: Drop unused members of PC87312State Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 23/28] blockdev: Drop superfluous DriveInfo member id Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 24/28] blockdev: Fix blockdev-add not to create DriveInfo Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 25/28] block/qapi: Convert qmp_query_block() to BlockBackend Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 26/28] blockdev: Convert qmp_eject(), qmp_change_blockdev() " Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 27/28] block: Lift device model API into BlockBackend Kevin Wolf
2014-10-20 13:35 ` [Qemu-devel] [PULL 28/28] block: Make device model's references to BlockBackend strong Kevin Wolf
2014-10-22 17:30 ` [Qemu-devel] [PULL 00/28] Block patches Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1413812154-11153-13-git-send-email-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).