[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 21/26] FVD: add impl of interface bdrv_close()
From: |
Chunqiang Tang |
Subject: |
[Qemu-devel] [PATCH 21/26] FVD: add impl of interface bdrv_close() |
Date: |
Fri, 25 Feb 2011 17:38:01 -0500 |
This patch is part of the Fast Virtual Disk (FVD) proposal.
See http://wiki.qemu.org/Features/FVD.
This patch adds FVD's implementation of the bdrv_close() interface.
Signed-off-by: Chunqiang Tang <address@hidden>
---
block/fvd-misc.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 78 insertions(+), 0 deletions(-)
diff --git a/block/fvd-misc.c b/block/fvd-misc.c
index c515d74..63ed168 100644
--- a/block/fvd-misc.c
+++ b/block/fvd-misc.c
@@ -81,6 +81,84 @@ static void fvd_aio_cancel(BlockDriverAIOCB * blockacb)
static void fvd_close(BlockDriverState * bs)
{
+ BDRVFvdState *s = bs->opaque;
+ FvdAIOCB *acb;
+ int i;
+
+ if (s->prefetch_state == PREFETCH_STATE_RUNNING) {
+ s->prefetch_state = PREFETCH_STATE_DISABLED;
+ }
+ if (s->prefetch_timer) {
+ qemu_del_timer(s->prefetch_timer);
+ qemu_free_timer(s->prefetch_timer);
+ s->prefetch_timer = NULL;
+ }
+
+ if (s->prefetch_acb) {
+ /* Clean up prefetch operations. */
+ for (i = 0; i < s->num_prefetch_slots; i++) {
+ if (s->prefetch_acb[i] != NULL) {
+ fvd_aio_cancel_copy(s->prefetch_acb[i]);
+ s->prefetch_acb[i] = NULL;
+ }
+ }
+ my_qemu_free(s->prefetch_acb);
+ s->prefetch_acb = NULL;
+ }
+
+ if (s->use_bjnl) {
+ /* Clean up buffered journal update. */
+ bjnl_sync_flush(bs);
+ if (s->bjnl.timer_scheduled) {
+ qemu_del_timer(s->bjnl.clean_buf_timer);
+ }
+ qemu_free_timer(s->bjnl.clean_buf_timer);
+ }
+
+ /* Clean up unfinished copy_on_read operations. */
+ QLIST_FOREACH(acb, &s->copy_locks, copy_lock.next) {
+ fvd_aio_cancel_copy(acb);
+ }
+
+ flush_metadata_to_disk_on_exit(bs);
+
+ if (s->stale_bitmap) {
+ my_qemu_vfree(s->stale_bitmap);
+ if (s->fresh_bitmap != s->stale_bitmap) {
+ my_qemu_vfree(s->fresh_bitmap);
+ }
+ s->stale_bitmap = NULL;
+ s->fresh_bitmap = NULL;
+ }
+
+ if (s->table) {
+ my_qemu_vfree(s->table);
+ s->table = NULL;
+ }
+
+ if (s->fvd_metadata) {
+ if (s->fvd_metadata != s->fvd_data) {
+ bdrv_delete(s->fvd_metadata);
+ }
+ s->fvd_metadata = NULL;
+ }
+ if (s->fvd_data) {
+ bdrv_delete(s->fvd_data);
+ s->fvd_data = NULL;
+ }
+
+ if (s->add_storage_cmd) {
+ my_qemu_free(s->add_storage_cmd);
+ s->add_storage_cmd = NULL;
+ }
+
+ if (s->leaked_chunks) {
+ my_qemu_free(s->leaked_chunks);
+ s->leaked_chunks = NULL;
+ }
+#ifdef FVD_DEBUG
+ dump_resource_summary(s);
+#endif
}
static int fvd_probe(const uint8_t * buf, int buf_size, const char *filename)
--
1.7.0.4
- [Qemu-devel] [PATCH 01/26] FVD: add simulated block driver 'blksim', Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 10/26] FVD: add impl of interface bdrv_file_open(), Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 08/26] FVD: add debugging utilities, Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 16/26] FVD: add impl for buffered journal updates, Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 20/26] FVD: add impl of interface bdrv_get_info(), Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 24/26] FVD: add impl of interface bdrv_has_zero_init(), Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 21/26] FVD: add impl of interface bdrv_close(),
Chunqiang Tang <=
- [Qemu-devel] [PATCH 14/26] FVD: add impl of loading data from compact image, Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 26/26] FVD: add fully automated test-fvd.sh, Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 23/26] FVD: add impl of interface bdrv_is_allocated(), Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 17/26] FVD: add impl of bdrv_flush() and bdrv_aio_flush(), Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 22/26] FVD: add impl of interface bdrv_update(), Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 13/26] FVD: add impl of storing data in compact image, Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 19/26] FVD: add support for aio_cancel, Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 25/26] FVD: add impl of interface bdrv_probe(), Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 15/26] FVD: add basic journal functionality, Chunqiang Tang, 2011/02/25
- [Qemu-devel] [PATCH 18/26] FVD: add support for base image prefetching, Chunqiang Tang, 2011/02/25