From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: lcapitulino@redhat.com
Subject: [Qemu-devel] [PATCH v2 7/9] block: add close notifiers
Date: Mon, 1 Oct 2012 16:52:22 +0200 [thread overview]
Message-ID: <1349103144-6827-8-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1349103144-6827-1-git-send-email-pbonzini@redhat.com>
The first user of close notifiers will be the embedded NBD server.
It is possible to use them to do some of the ad hoc processing
(e.g. for block jobs and I/O limits) that is currently done by
bdrv_close.
Acked-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Makefile.objs | 3 ++-
block.c | 19 ++++++++++++++-----
block.h | 1 +
block_int.h | 2 ++
4 file modificati, 19 inserzioni(+), 6 rimozioni(-)
diff --git a/Makefile.objs b/Makefile.objs
index 03da150..124f783 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -43,6 +43,7 @@ coroutine-obj-$(CONFIG_WIN32) += coroutine-win32.o
block-obj-y = cutils.o iov.o cache-utils.o qemu-option.o module.o async.o
block-obj-y += nbd.o block.o aio.o aes.o qemu-config.o qemu-progress.o qemu-sockets.o
+block-obj-y += notify.o
block-obj-y += $(coroutine-obj-y) $(qobject-obj-y) $(version-obj-y)
block-obj-$(CONFIG_POSIX) += posix-aio-compat.o
block-obj-$(CONFIG_LINUX_AIO) += linux-aio.o
@@ -92,7 +93,7 @@ common-obj-y += bt-host.o bt-vhci.o
common-obj-y += iov.o acl.o
common-obj-$(CONFIG_POSIX) += compatfd.o
-common-obj-y += notify.o event_notifier.o
+common-obj-y += event_notifier.o
common-obj-y += qemu-timer.o qemu-timer-common.o
common-obj-$(CONFIG_SLIRP) += slirp/
diff --git a/block.c b/block.c
index 751ebdc..795d359 100644
--- a/block.c
+++ b/block.c
@@ -28,6 +28,7 @@
#include "block_int.h"
#include "module.h"
#include "qjson.h"
+#include "notify.h"
#include "qemu-coroutine.h"
#include "qmp-commands.h"
#include "qemu-timer.h"
@@ -310,9 +311,16 @@ BlockDriverState *bdrv_new(const char *device_name)
QTAILQ_INSERT_TAIL(&bdrv_states, bs, list);
}
bdrv_iostatus_disable(bs);
+ notifier_list_init(&bs->close_notifiers);
+
return bs;
}
+void bdrv_add_close_notifier(BlockDriverState *bs, Notifier *notify)
+{
+ notifier_list_add(&bs->close_notifiers, notify);
+}
+
BlockDriver *bdrv_find_format(const char *format_name)
{
BlockDriver *drv1;
@@ -1096,12 +1104,13 @@ void bdrv_reopen_abort(BDRVReopenState *reopen_state)
void bdrv_close(BlockDriverState *bs)
{
bdrv_flush(bs);
- if (bs->drv) {
- if (bs->job) {
- block_job_cancel_sync(bs->job);
- }
- bdrv_drain_all();
+ if (bs->job) {
+ block_job_cancel_sync(bs->job);
+ }
+ bdrv_drain_all();
+ notifier_list_notify(&bs->close_notifiers, bs);
+ if (bs->drv) {
if (bs == bs_snapshots) {
bs_snapshots = NULL;
}
diff --git a/block.h b/block.h
index b1095d8..17d8b00 100644
--- a/block.h
+++ b/block.h
@@ -149,6 +149,7 @@ int bdrv_reopen_prepare(BDRVReopenState *reopen_state,
void bdrv_reopen_commit(BDRVReopenState *reopen_state);
void bdrv_reopen_abort(BDRVReopenState *reopen_state);
void bdrv_close(BlockDriverState *bs);
+void bdrv_add_close_notifier(BlockDriverState *bs, Notifier *notify);
int bdrv_attach_dev(BlockDriverState *bs, void *dev);
void bdrv_attach_dev_nofail(BlockDriverState *bs, void *dev);
void bdrv_detach_dev(BlockDriverState *bs, void *dev);
diff --git a/block_int.h b/block_int.h
index ac4245c..41754ce 100644
--- a/block_int.h
+++ b/block_int.h
@@ -299,6 +299,8 @@ struct BlockDriverState {
BlockDriverState *backing_hd;
BlockDriverState *file;
+ NotifierList close_notifiers;
+
/* number of in-flight copy-on-read requests */
unsigned int copy_on_read_in_flight;
--
1.7.12
next prev parent reply other threads:[~2012-10-01 14:53 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-01 14:52 [Qemu-devel] [PATCH v2 0/9] Embedded NBD server Paolo Bonzini
2012-10-01 14:52 ` [Qemu-devel] [PATCH v2 1/9] build: add QAPI files to the tools Paolo Bonzini
2012-10-02 12:31 ` Luiz Capitulino
2012-10-01 14:52 ` [Qemu-devel] [PATCH v2 2/9] qapi: add socket address types Paolo Bonzini
2012-10-01 23:56 ` Eric Blake
2012-10-02 9:00 ` Paolo Bonzini
2012-10-02 11:39 ` Eric Blake
2012-10-02 12:27 ` Luiz Capitulino
2012-10-02 14:24 ` Paolo Bonzini
2012-10-02 15:27 ` Luiz Capitulino
2012-10-02 15:31 ` Paolo Bonzini
2012-10-02 12:32 ` Luiz Capitulino
2012-10-01 14:52 ` [Qemu-devel] [PATCH v2 3/9] qemu-sockets: add error propagation to inet_parse Paolo Bonzini
2012-10-02 12:34 ` Luiz Capitulino
2012-10-01 14:52 ` [Qemu-devel] [PATCH v2 4/9] qemu-sockets: add error propagation to Unix socket functions Paolo Bonzini
2012-10-01 17:17 ` Luiz Capitulino
2012-10-01 19:07 ` Paolo Bonzini
2012-10-01 23:05 ` Luiz Capitulino
2012-10-02 6:09 ` Paolo Bonzini
2012-10-01 14:52 ` [Qemu-devel] [PATCH v2 5/9] qemu-sockets: return IPSocketAddress from inet_parse Paolo Bonzini
2012-10-02 12:36 ` Luiz Capitulino
2012-10-01 14:52 ` [Qemu-devel] [PATCH v2 6/9] qemu-sockets: add socket_listen, socket_connect, socket_parse Paolo Bonzini
2012-10-02 12:37 ` Luiz Capitulino
2012-10-01 14:52 ` Paolo Bonzini [this message]
2012-10-01 14:52 ` [Qemu-devel] [PATCH v2 8/9] qmp: add NBD server commands Paolo Bonzini
2012-10-02 2:50 ` Eric Blake
2012-10-02 12:37 ` Luiz Capitulino
2012-10-31 11:23 ` Christoph Hellwig
2012-10-31 12:46 ` Paolo Bonzini
2012-10-31 13:01 ` Christoph Hellwig
2012-10-01 14:52 ` [Qemu-devel] [PATCH v2 9/9] hmp: " Paolo Bonzini
2012-10-02 12:38 ` Luiz Capitulino
2012-10-01 18:08 ` [Qemu-devel] [PATCH v2 0/9] Embedded NBD server Luiz Capitulino
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=1349103144-6827-8-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=lcapitulino@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).