diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2012-08-23 11:20:36 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2012-10-23 22:39:32 +0200 |
commit | d7d512f60979681c27597f1b1277e03505c1de08 (patch) | |
tree | b41db25ccf86d7ab94d37bbbd620e0b21c941f78 /block.c | |
parent | 3cbc002c34aa85ea952ee9b169a3ff97d350516a (diff) | |
download | hqemu-d7d512f60979681c27597f1b1277e03505c1de08.zip hqemu-d7d512f60979681c27597f1b1277e03505c1de08.tar.gz |
block: add close notifiers
The first user of close notifiers will be the embedded NBD server.
It would be 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>
Diffstat (limited to 'block.c')
-rw-r--r-- | block.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -30,6 +30,7 @@ #include "module.h" #include "qjson.h" #include "sysemu.h" +#include "notify.h" #include "qemu-coroutine.h" #include "qmp-commands.h" #include "qemu-timer.h" @@ -312,9 +313,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; @@ -1102,6 +1110,7 @@ void bdrv_close(BlockDriverState *bs) block_job_cancel_sync(bs->job); } bdrv_drain_all(); + notifier_list_notify(&bs->close_notifiers, bs); if (bs->drv) { if (bs == bs_snapshots) { |