All of lore.kernel.org
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 07/22] block: Add bdrv_close_all() handlers
Date: Fri, 13 Feb 2015 18:02:39 -0500	[thread overview]
Message-ID: <54DE828F.7040604@redhat.com> (raw)
In-Reply-To: <1423507124-29809-8-git-send-email-mreitz@redhat.com>

On 2015-02-09 at 13:38, Max Reitz wrote:
> Every time a reference to a BlockBackend is taken, a notifier for
> bdrv_close_all() has to be deposited so the reference holder can
> relinquish its reference when bdrv_close_all() is called. That notifier
> should be revoked on a bdrv_unref() call.
>
> Add a Notifier * parameter to all the functions changing the reference
> count of a BlockBackend: blk_new(), blk_new_with_bs(), blk_new_open(),
> blk_ref() and blk_unref().
>
> By dropping the manual reference handling in hw/block/xen_disk.c, the
> blk_unref() in hw/ide/piix.c can be dropped as well.
>
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>   block/block-backend.c          | 69 ++++++++++++++++++++++++++++++++++++------
>   blockdev.c                     | 62 ++++++++++++++++++++++++++++++++++---
>   device-hotplug.c               |  2 +-
>   hw/block/xen_disk.c            | 16 +++++++---
>   hw/ide/piix.c                  |  1 -
>   include/sysemu/block-backend.h | 13 +++++---
>   include/sysemu/blockdev.h      |  3 ++
>   nbd.c                          | 26 ++++++++++++++--
>   qemu-img.c                     | 39 ++++++++++++------------
>   qemu-io.c                      |  6 ++--
>   qemu-nbd.c                     |  6 ++--
>   11 files changed, 189 insertions(+), 54 deletions(-)

[snip]

> diff --git a/qemu-nbd.c b/qemu-nbd.c
> index ac1e5d6..5e6e4b4 100644
> --- a/qemu-nbd.c
> +++ b/qemu-nbd.c
> @@ -694,7 +694,8 @@ int main(int argc, char **argv)
>       }
>   
>       srcpath = argv[optind];
> -    blk = blk_new_open("hda", srcpath, NULL, options, flags, &local_err);
> +    /* the reference will be passed on nbd_export_new() */
> +    blk = blk_new_open("hda", srcpath, NULL, options, flags, NULL, &local_err);
>       if (!blk) {
>           errx(EXIT_FAILURE, "Failed to blk_new_open '%s': %s", argv[optind],
>                error_get_pretty(local_err));
> @@ -728,7 +729,9 @@ int main(int argc, char **argv)
>           }
>       }
>   
> +    /* nbd_export_new() takes the reference to blk */
>       exp = nbd_export_new(blk, dev_offset, fd_size, nbdflags, nbd_export_closed);
> +    blk_unref(blk, NULL);
>   
>       if (sockpath) {
>           fd = unix_socket_incoming(sockpath);
> @@ -773,7 +776,6 @@ int main(int argc, char **argv)
>           }
>       } while (state != TERMINATED);
>   
> -    blk_unref(blk);
>       if (sockpath) {
>           unlink(sockpath);
>       }

Because qemu-nbd does not install a handler for relinquishing its 
reference, it has to make sure it drops that reference before a 
bdrv_close_all() occurs. Therefore, err() and errx() calls after 
blk_new_open() (except for the if (!blk) path) and before blk_unref(blk, 
NULL) need to be preceded by a blk_unref(blk, NULL).

I'll fix it in v3.

Max

  reply	other threads:[~2015-02-13 23:02 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-09 18:38 [Qemu-devel] [PATCH v2 00/22] block: Rework bdrv_close_all() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 01/22] iotests: Move _filter_nbd into common.filter Max Reitz
2015-02-16 19:31   ` Eric Blake
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 02/22] iotests: Do not redirect qemu's stderr Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 03/22] iotests: Add test for eject under NBD server Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 04/22] quorum: Fix close path Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 05/22] block: Move BDS close notifiers into BB Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 06/22] block: Add bdrv_close_all() notifiers Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 07/22] block: Add bdrv_close_all() handlers Max Reitz
2015-02-13 23:02   ` Max Reitz [this message]
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 08/22] block: Use blk_remove_bs() in blk_delete() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 09/22] blockdev: Use blk_remove_bs() in do_drive_del() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 10/22] block: Make bdrv_close() static Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 11/22] block: Add blk_name_taken() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 12/22] block: Add blk_next_inserted() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 13/22] block: Add blk_commit_all() and blk_invalidate_cache_all() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 14/22] block: Use BlockBackend more Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 15/22] blockdev: Add list of monitor-owned BlockBackends Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 16/22] blockdev: Remove blk_hide_on_behalf_of_do_drive_del() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 17/22] block: Make bdrv_drain_one() public Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 18/22] block: Move some bdrv_*_all() functions to BB Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 19/22] block: Remove bdrv_states Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 20/22] blockdev: Keep track of monitor-owned BDS Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 21/22] block: Strip down bdrv_close_all() Max Reitz
2015-02-09 18:38 ` [Qemu-devel] [PATCH v2 22/22] iotests: Add test for multiple BB on BDS tree Max Reitz
2015-02-10  8:23 ` [Qemu-devel] [PATCH v2 00/22] block: Rework bdrv_close_all() Paolo Bonzini

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=54DE828F.7040604@redhat.com \
    --to=mreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=pbonzini@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.