From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, famz@redhat.com, benoit.canet@nodalink.com,
stefanha@redhat.com, mreitz@redhat.com
Subject: [Qemu-devel] [PATCH v3 07/23] block: Eliminate bdrv_iterate(), use bdrv_next()
Date: Tue, 16 Sep 2014 20:12:12 +0200 [thread overview]
Message-ID: <1410891148-28849-8-git-send-email-armbru@redhat.com> (raw)
In-Reply-To: <1410891148-28849-1-git-send-email-armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Benoît Canet <benoit.canet@nodalink.com>
---
block-migration.c | 30 +++++++++++++++---------------
block.c | 9 ---------
blockdev.c | 31 +++++++++++++------------------
include/block/block.h | 2 --
monitor.c | 32 +++++++++-----------------------
5 files changed, 37 insertions(+), 67 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 5f7dc45..50ccafd 100644
--- a/block.c
+++ b/block.c
@@ -3899,15 +3899,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 3a6fd46..85f574b 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2527,26 +2527,21 @@ fail:
qmp_output_visitor_cleanup(ov);
}
-static void do_qmp_query_block_jobs_one(void *opaque, BlockDriverState *bs)
-{
- BlockJobInfoList **prev = opaque;
- BlockJob *job = bs->job;
-
- if (job) {
- BlockJobInfoList *elem = g_new0(BlockJobInfoList, 1);
- elem->value = block_job_query(bs->job);
- (*prev)->next = elem;
- *prev = elem;
- }
-}
-
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;
+ BlockJobInfoList *head = NULL, **p_next = &head;
+ BlockDriverState *bs;
+
+ 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;
+ }
+ }
+
+ return head;
}
QemuOptsList qemu_common_drive_opts = {
diff --git a/include/block/block.h b/include/block/block.h
index 8cf953a..02cf956 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -410,8 +410,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 667efb7..7e450ec 100644
--- a/monitor.c
+++ b/monitor.c
@@ -4208,24 +4208,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, ':');
@@ -4663,9 +4645,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 */
@@ -4717,10 +4699,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.9.3
next prev parent reply other threads:[~2014-09-16 18:12 UTC|newest]
Thread overview: 110+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-16 18:12 [Qemu-devel] [PATCH v3 00/23] Split BlockBackend off BDS with an axe Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 01/23] block: Split bdrv_new_root() off bdrv_new() Markus Armbruster
2014-09-18 14:44 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 02/23] block: New BlockBackend Markus Armbruster
2014-09-19 16:17 ` Kevin Wolf
2014-09-19 17:13 ` Markus Armbruster
2014-09-20 19:04 ` Max Reitz
2014-09-22 6:56 ` Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 03/23] block: Connect BlockBackend to BlockDriverState Markus Armbruster
2014-09-20 19:08 ` Max Reitz
2014-09-22 14:59 ` Kevin Wolf
2014-09-22 16:34 ` Markus Armbruster
2014-09-23 11:45 ` Kevin Wolf
2014-09-23 12:52 ` Markus Armbruster
2014-09-23 13:36 ` Kevin Wolf
2014-09-23 15:29 ` Markus Armbruster
2014-09-25 21:54 ` Benoît Canet
2014-09-30 10:40 ` Kevin Wolf
2014-09-30 10:56 ` Markus Armbruster
2014-09-30 11:10 ` Kevin Wolf
2014-09-30 12:03 ` Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 04/23] block: Connect BlockBackend and DriveInfo Markus Armbruster
2014-09-20 19:38 ` Max Reitz
2014-09-22 7:33 ` Markus Armbruster
2014-09-22 17:15 ` Kevin Wolf
2014-09-23 10:57 ` Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 05/23] block: Code motion to get rid of stubs/blockdev.c Markus Armbruster
2014-09-20 19:46 ` Max Reitz
2014-09-23 12:15 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 06/23] block: Make BlockBackend own its BlockDriverState Markus Armbruster
2014-09-20 20:10 ` Max Reitz
2014-09-23 13:12 ` Kevin Wolf
2014-09-23 16:24 ` Markus Armbruster
2014-09-16 18:12 ` Markus Armbruster [this message]
2014-09-20 20:29 ` [Qemu-devel] [PATCH v3 07/23] block: Eliminate bdrv_iterate(), use bdrv_next() Max Reitz
2014-09-25 11:25 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 08/23] block: Eliminate BlockDriverState member device_name[] Markus Armbruster
2014-09-20 20:49 ` Max Reitz
2014-09-25 11:37 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 09/23] block: Merge BlockBackend and BlockDriverState name spaces Markus Armbruster
2014-09-20 20:52 ` Max Reitz
2014-09-25 12:57 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 10/23] block: Eliminate DriveInfo member bdrv, use blk_by_legacy_dinfo() Markus Armbruster
2014-09-17 11:24 ` Benoît Canet
2014-09-18 7:11 ` Markus Armbruster
2014-09-20 21:09 ` Max Reitz
2014-09-25 13:06 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 11/23] block: Rename BlockDriverAIOCB* to BlockAIOCB* Markus Armbruster
2014-09-20 21:16 ` Max Reitz
2014-09-25 13:15 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 12/23] virtio-blk: Drop redundant VirtIOBlock member conf Markus Armbruster
2014-09-17 11:31 ` Benoît Canet
2014-09-20 21:22 ` Max Reitz
2014-09-22 7:34 ` Markus Armbruster
2014-09-25 13:18 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 13/23] virtio-blk: Rename VirtIOBlkConf variables to conf Markus Armbruster
2014-09-17 11:35 ` Benoît Canet
2014-09-18 7:17 ` Markus Armbruster
2014-09-20 21:25 ` Max Reitz
2014-09-26 13:22 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 14/23] hw: Convert from BlockDriverState to BlockBackend, mostly Markus Armbruster
2014-09-20 22:01 ` Max Reitz
2014-09-22 7:42 ` Markus Armbruster
2014-09-26 14:26 ` Kevin Wolf
2014-09-26 15:00 ` Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 15/23] ide: Complete conversion from BlockDriverState to BlockBackend Markus Armbruster
2014-09-20 22:05 ` Max Reitz
2014-09-29 12:07 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 16/23] pc87312: Drop unused members of PC87312State Markus Armbruster
2014-09-17 11:44 ` Benoît Canet
2014-09-20 22:07 ` Max Reitz
2014-09-29 12:08 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 17/23] blockdev: Drop superfluous DriveInfo member id Markus Armbruster
2014-09-17 11:43 ` Benoît Canet
2014-09-22 12:58 ` Max Reitz
2014-09-29 12:13 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 18/23] blockdev: Fix blockdev-add not to create IDE drive (0, 0) Markus Armbruster
2014-09-17 12:09 ` Benoît Canet
2014-09-22 13:05 ` Max Reitz
2014-09-29 12:24 ` Kevin Wolf
2014-09-29 13:05 ` Markus Armbruster
2014-09-29 15:34 ` Kevin Wolf
2014-09-30 6:21 ` Markus Armbruster
2014-09-29 13:12 ` Kevin Wolf
2014-09-29 14:04 ` Markus Armbruster
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 19/23] blockdev: Drop DriveInfo member enable_auto_del Markus Armbruster
2014-09-17 12:12 ` Benoît Canet
2014-09-22 13:16 ` Max Reitz
2014-09-22 15:06 ` Markus Armbruster
2014-09-22 15:12 ` Max Reitz
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 20/23] block/qapi: Convert qmp_query_block() to BlockBackend Markus Armbruster
2014-09-22 12:05 ` Benoît Canet
2014-09-22 13:22 ` Max Reitz
2014-09-29 13:26 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 21/23] blockdev: Convert qmp_eject(), qmp_change_blockdev() " Markus Armbruster
2014-09-22 12:08 ` Benoît Canet
2014-09-22 13:26 ` Max Reitz
2014-09-22 15:07 ` Markus Armbruster
2014-09-30 9:55 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 22/23] block: Lift device model API into BlockBackend Markus Armbruster
2014-09-22 12:13 ` Benoît Canet
2014-09-22 12:54 ` Markus Armbruster
2014-09-22 13:58 ` Max Reitz
2014-09-30 10:49 ` Kevin Wolf
2014-09-16 18:12 ` [Qemu-devel] [PATCH v3 23/23] block: Make device model's references to BlockBackend strong Markus Armbruster
2014-09-22 12:06 ` Benoît Canet
2014-09-22 14:06 ` Max Reitz
2014-09-22 15:08 ` Markus Armbruster
2014-09-30 11:01 ` Kevin Wolf
2014-09-30 12:04 ` Markus Armbruster
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=1410891148-28849-8-git-send-email-armbru@redhat.com \
--to=armbru@redhat.com \
--cc=benoit.canet@nodalink.com \
--cc=famz@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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).