All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Benoît Canet" <benoit.canet@irqsave.net>
To: Markus Armbruster <armbru@redhat.com>
Cc: kwolf@redhat.com, benoit.canet@irqsave.net, famz@redhat.com,
	qemu-devel@nongnu.org, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH 07/23] block: Eliminate bdrv_iterate(), use bdrv_next()
Date: Thu, 11 Sep 2014 12:46:02 +0200	[thread overview]
Message-ID: <20140911104602.GB8522@irqsave.net> (raw)
In-Reply-To: <1410336832-22160-8-git-send-email-armbru@redhat.com>

The Wednesday 10 Sep 2014 à 10:13:36 (+0200), Markus Armbruster wrote :
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  block-migration.c     | 30 +++++++++++++++---------------
>  block.c               |  9 ---------
>  blockdev.c            | 31 +++++++++++++------------------
>  include/block/block.h |  2 --
>  monitor.c             | 33 +++++++++------------------------
>  5 files changed, 37 insertions(+), 68 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 89f9cf0..593d89b 100644
> --- a/block.c
> +++ b/block.c
> @@ -3889,15 +3889,6 @@ BlockDriverState *bdrv_next(BlockDriverState *bs)
>      return blk ? blk_bs(blk) : NULL;
>  }
>  
> -void bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs), void *opaque)
> -{
> -    BlockDriverState *bs;
> -
> -    for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
> -        it(opaque, bs);
> -    }
> -}
> -
>  const char *bdrv_get_device_name(BlockDriverState *bs)
>  {
>      return bs->device_name;
> diff --git a/blockdev.c b/blockdev.c
> index 791f6d9..353563e 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -2520,26 +2520,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 95139c0..8cf9ea3 100644
> --- a/include/block/block.h
> +++ b/include/block/block.h
> @@ -409,8 +409,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 34cee74..4ae66df 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,13 @@ 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));

Why is this line removed ?
In monitor readline_set_completion_index seems to work in pair with readline_add_completion.
Either this line should be removed and readline_add_completion too or the oposite.

> -            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
> 
> 

  reply	other threads:[~2014-09-11 10:47 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-10  8:13 [Qemu-devel] [PATCH 00/23] Split BlockBackend off BDS with an axe Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 01/23] block: Split bdrv_new_named() off bdrv_new() Markus Armbruster
2014-09-10 11:03   ` Benoît Canet
2014-09-10 15:05     ` Eric Blake
2014-09-11  8:20       ` Markus Armbruster
2014-09-11  8:29     ` Markus Armbruster
2014-09-10 15:07   ` Eric Blake
2014-09-10 15:27   ` Benoît Canet
2014-09-10 21:22   ` Benoît Canet
2014-09-11  6:33   ` Fam Zheng
2014-09-10  8:13 ` [Qemu-devel] [PATCH 02/23] block: New BlockBackend Markus Armbruster
2014-09-10  9:56   ` Kevin Wolf
2014-09-11 10:03     ` Markus Armbruster
2014-09-11 11:45       ` Markus Armbruster
2014-09-11 14:38       ` Markus Armbruster
2014-09-10 11:34   ` Benoît Canet
2014-09-10 11:44     ` Kevin Wolf
2014-09-10 11:51       ` Benoît Canet
2014-09-11 10:11     ` Markus Armbruster
2014-09-10 12:40   ` Benoît Canet
2014-09-10 12:46     ` Benoît Canet
2014-09-11 10:22       ` Markus Armbruster
2014-09-11 10:21     ` Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 03/23] block: Connect BlockBackend to BlockDriverState Markus Armbruster
2014-09-10 11:55   ` Benoît Canet
2014-09-11 10:52     ` Markus Armbruster
2014-09-10 12:24   ` Kevin Wolf
2014-09-11 15:27     ` Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 04/23] block: Connect BlockBackend and DriveInfo Markus Armbruster
2014-09-10 13:08   ` Benoît Canet
2014-09-11 18:03     ` Markus Armbruster
2014-09-11 20:43       ` Eric Blake
2014-09-10 13:30   ` Kevin Wolf
2014-09-11 17:41     ` Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 05/23] block: Make BlockBackend own its BlockDriverState Markus Armbruster
2014-09-10 10:14   ` Kevin Wolf
2014-09-11 18:38     ` Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 06/23] block: Eliminate bdrv_states, use block_next() instead Markus Armbruster
2014-09-11 10:25   ` Benoît Canet
2014-09-10  8:13 ` [Qemu-devel] [PATCH 07/23] block: Eliminate bdrv_iterate(), use bdrv_next() Markus Armbruster
2014-09-11 10:46   ` Benoît Canet [this message]
2014-09-11 18:44     ` Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 08/23] block: Eliminate BlockDriverState member device_name[] Markus Armbruster
2014-09-10 16:09   ` Eric Blake
2014-09-11 18:45     ` Markus Armbruster
2014-09-11 11:34   ` Benoît Canet
2014-09-11 11:43     ` Benoît Canet
2014-09-11 13:00     ` Eric Blake
2014-09-11 13:18       ` Benoît Canet
2014-09-11 19:11         ` Markus Armbruster
2014-09-11 19:01     ` Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 09/23] block: Merge BlockBackend and BlockDriverState name spaces Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 10/23] block: Eliminate DriveInfo member bdrv, use blk_by_legacy_dinfo() Markus Armbruster
2014-09-11 12:07   ` Benoît Canet
2014-09-11 19:20     ` Markus Armbruster
2014-09-11 17:06   ` Benoît Canet
2014-09-11 19:12     ` Markus Armbruster
2014-09-11 19:34       ` Benoît Canet
2014-09-11 19:40         ` Eric Blake
2014-09-12  6:38           ` Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 11/23] block: Rename BlockDriverAIOCB* to BlockAIOCB* Markus Armbruster
2014-09-11 12:15   ` Benoît Canet
2014-09-11 19:23     ` Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 12/23] virtio-blk: Drop redundant VirtIOBlock member conf Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 13/23] virtio-blk: Rename VirtIOBlkConf variables to conf Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 14/23] hw: Convert from BlockDriverState to BlockBackend, mostly Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 15/23] ide: Complete conversion from BlockDriverState to BlockBackend Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 16/23] pc87312: Drop unused members of PC87312State Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 17/23] blockdev: Drop superfluous DriveInfo member id Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 18/23] blockdev: Fix blockdev-add not to create IDE drive (0, 0) Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 19/23] blockdev: Drop DriveInfo member enable_auto_del Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 20/23] block/qapi: Convert qmp_query_block() to BlockBackend Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 21/23] blockdev: Convert qmp_eject(), qmp_change_blockdev() " Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 22/23] block: Lift device model API into BlockBackend Markus Armbruster
2014-09-10  8:13 ` [Qemu-devel] [PATCH 23/23] block: Make device model's references to BlockBackend strong Markus Armbruster
2014-09-11 19:24 ` [Qemu-devel] [PATCH 00/23] Split BlockBackend off BDS with an axe 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=20140911104602.GB8522@irqsave.net \
    --to=benoit.canet@irqsave.net \
    --cc=armbru@redhat.com \
    --cc=famz@redhat.com \
    --cc=kwolf@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.