[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v3 07/27] block: Handle image locking during reopen
From: |
Fam Zheng |
Subject: |
[Qemu-block] [PATCH v3 07/27] block: Handle image locking during reopen |
Date: |
Thu, 28 Apr 2016 20:57:26 +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 c34ac10..d674f12 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.0
- [Qemu-block] [PATCH v3 00/27] block: Lock images when opening, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 01/27] block: Add BDRV_O_NO_LOCK, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 03/27] blockdev: Add and parse "lock-image" option for block devices, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 02/27] qapi: Add lock-image in blockdev-add options, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 04/27] block: Introduce image file locking, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 05/27] block: Add bdrv_image_locked, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 06/27] block: Make bdrv_reopen_{commit, abort} private functions, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 07/27] block: Handle image locking during reopen,
Fam Zheng <=
- [Qemu-block] [PATCH v3 08/27] osdep: Add qemu_lock_fd and qemu_unlock_fd, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 09/27] osdep: Introduce qemu_dup, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 10/27] raw-posix: Use qemu_dup, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 11/27] raw-posix: Implement .bdrv_lockf, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 12/27] gluster: Implement .bdrv_lockf, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 14/27] qemu-img: Add "-L" option to sub commands, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 13/27] qemu-io: Add "-L" option for BDRV_O_NO_LOCK, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 15/27] qemu-img: Update documentation of "-L" option, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 16/27] qemu-nbd: Add "--no-lock/-L" option, Fam Zheng, 2016/04/28
- [Qemu-block] [PATCH v3 17/27] block: Don't lock drive-backup target image in none mode, Fam Zheng, 2016/04/28