[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 13/12] block: add close notifiers
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 13/12] block: add close notifiers |
Date: |
Wed, 19 Sep 2012 16:31:16 +0200 |
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 <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
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 470bdcc..cb44dac 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;
@@ -862,12 +870,13 @@ unlink_and_fail:
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 2e2be11..921c72e 100644
--- a/block.h
+++ b/block.h
@@ -131,6 +131,7 @@ int bdrv_file_open(BlockDriverState **pbs, const char
*filename, int flags);
int bdrv_open(BlockDriverState *bs, const char *filename, int flags,
BlockDriver *drv);
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 4452f6f..4eb79c2 100644
--- a/block_int.h
+++ b/block_int.h
@@ -293,6 +293,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
- Re: [Qemu-devel] [PATCH 04/12] qapi: add "unix" to the set of reserved words, (continued)
[Qemu-devel] [PATCH 06/12] qapi: add socket address types, Paolo Bonzini, 2012/09/19
[Qemu-devel] [PATCH 07/12] qemu-sockets: add error propagation to inet_parse, Paolo Bonzini, 2012/09/19
[Qemu-devel] [PATCH 08/12] qemu-sockets: add error propagation to Unix socket functions, Paolo Bonzini, 2012/09/19
[Qemu-devel] [PATCH 12/12] qemu-sockets: add socket_listen, socket_connect, socket_parse, Paolo Bonzini, 2012/09/19
[Qemu-devel] [PATCH 13/12] block: add close notifiers,
Paolo Bonzini <=
[Qemu-devel] [PATCH 14/12] qmp: add NBD server commands, Paolo Bonzini, 2012/09/19
[Qemu-devel] [PATCH 10/12] qemu-sockets: move block from QemuOpts to arguments, Paolo Bonzini, 2012/09/19
[Qemu-devel] [PATCH 11/12] qemu-sockets: add block and in_progress arguments to unix_connect_opts, Paolo Bonzini, 2012/09/19
[Qemu-devel] [PATCH 15/12] hmp: add NBD server commands, Paolo Bonzini, 2012/09/19
[Qemu-devel] [PATCH 09/12] qemu-sockets: return IPSocketAddress from inet_parse, Paolo Bonzini, 2012/09/19