[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 07/27] block: Handle image locking during reopen
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH v4 07/27] block: Handle image locking during reopen |
Date: |
Tue, 10 May 2016 10:50:39 +0800 |
Stash the locking state into BDRVReopenState. If it was locked, unlock
in prepare, and lock it again when commit or abort.
Signed-off-by: Fam Zheng <address@hidden>
---
block.c | 11 +++++++++++
include/block/block.h | 1 +
2 files changed, 12 insertions(+)
diff --git a/block.c b/block.c
index 3f5369a..1b3aac4 100644
--- a/block.c
+++ b/block.c
@@ -2113,6 +2113,11 @@ int bdrv_reopen_prepare(BDRVReopenState *reopen_state,
BlockReopenQueue *queue,
} while ((entry = qdict_next(reopen_state->options, entry)));
}
+ reopen_state->was_locked = reopen_state->bs->image_locked;
+ if (reopen_state->was_locked) {
+ bdrv_unlock_image(reopen_state->bs);
+ }
+
ret = 0;
error:
@@ -2137,6 +2142,9 @@ static void bdrv_reopen_commit(BDRVReopenState
*reopen_state)
if (drv->bdrv_reopen_commit) {
drv->bdrv_reopen_commit(reopen_state);
}
+ if (reopen_state->was_locked) {
+ bdrv_lock_image(reopen_state->bs);
+ }
/* set BDS specific flags now */
QDECREF(reopen_state->bs->explicit_options);
@@ -2163,6 +2171,9 @@ static void bdrv_reopen_abort(BDRVReopenState
*reopen_state)
if (drv->bdrv_reopen_abort) {
drv->bdrv_reopen_abort(reopen_state);
}
+ if (reopen_state->was_locked) {
+ bdrv_lock_image(reopen_state->bs);
+ }
QDECREF(reopen_state->explicit_options);
}
diff --git a/include/block/block.h b/include/block/block.h
index d240a03..7839f69 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -157,6 +157,7 @@ typedef struct BDRVReopenState {
QDict *options;
QDict *explicit_options;
void *opaque;
+ bool was_locked;
} BDRVReopenState;
/*
--
2.8.2
- [Qemu-devel] [PATCH v4 00/27] block: Lock images when opening, Fam Zheng, 2016/05/09
- [Qemu-devel] [PATCH v4 01/27] block: Add BDRV_O_NO_LOCK, Fam Zheng, 2016/05/09
- [Qemu-devel] [PATCH v4 02/27] qapi: Add lock-image in blockdev-add options, Fam Zheng, 2016/05/09
- [Qemu-devel] [PATCH v4 04/27] block: Introduce image file locking, Fam Zheng, 2016/05/09
- [Qemu-devel] [PATCH v4 03/27] blockdev: Add and parse "lock-image" option for block devices, Fam Zheng, 2016/05/09
- [Qemu-devel] [PATCH v4 06/27] block: Make bdrv_reopen_{commit, abort} private functions, Fam Zheng, 2016/05/09
- [Qemu-devel] [PATCH v4 05/27] block: Add bdrv_image_locked, Fam Zheng, 2016/05/09
- [Qemu-devel] [PATCH v4 07/27] block: Handle image locking during reopen,
Fam Zheng <=
- [Qemu-devel] [PATCH v4 09/27] osdep: Introduce qemu_dup, Fam Zheng, 2016/05/09
- [Qemu-devel] [PATCH v4 08/27] osdep: Add qemu_lock_fd and qemu_unlock_fd, Fam Zheng, 2016/05/09
- Re: [Qemu-devel] [PATCH v4 08/27] osdep: Add qemu_lock_fd and qemu_unlock_fd, Richard W.M. Jones, 2016/05/10
- Re: [Qemu-devel] [PATCH v4 08/27] osdep: Add qemu_lock_fd and qemu_unlock_fd, Daniel P. Berrange, 2016/05/10
- Re: [Qemu-devel] [PATCH v4 08/27] osdep: Add qemu_lock_fd and qemu_unlock_fd, Fam Zheng, 2016/05/10
- Re: [Qemu-devel] [PATCH v4 08/27] osdep: Add qemu_lock_fd and qemu_unlock_fd, Fam Zheng, 2016/05/10
- Re: [Qemu-devel] [PATCH v4 08/27] osdep: Add qemu_lock_fd and qemu_unlock_fd, Daniel P. Berrange, 2016/05/11
[Qemu-devel] [PATCH v4 10/27] raw-posix: Use qemu_dup, Fam Zheng, 2016/05/09