[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v5 07/27] block: Handle image locking during reopen
From: |
Fam Zheng |
Subject: |
[Qemu-block] [PATCH v5 07/27] block: Handle image locking during reopen |
Date: |
Tue, 17 May 2016 15:35:16 +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 ad3663c..2be42bb 100644
--- a/block.c
+++ b/block.c
@@ -2112,6 +2112,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:
@@ -2136,6 +2141,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);
@@ -2162,6 +2170,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 7740d3f..28b8ae9 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -158,6 +158,7 @@ typedef struct BDRVReopenState {
QDict *options;
QDict *explicit_options;
void *opaque;
+ bool was_locked;
} BDRVReopenState;
/*
--
2.8.2
- Re: [Qemu-block] [PATCH v5 03/27] blockdev: Add and parse "lock-mode" option for image locking, (continued)
- [Qemu-block] [PATCH v5 02/27] qapi: Add lock-mode in blockdev-add options, Fam Zheng, 2016/05/17
- [Qemu-block] [PATCH v5 04/27] block: Introduce image file locking, Fam Zheng, 2016/05/17
- [Qemu-block] [PATCH v5 05/27] block: Add bdrv_image_locked, Fam Zheng, 2016/05/17
- [Qemu-block] [PATCH v5 06/27] block: Make bdrv_reopen_{commit, abort} private functions, Fam Zheng, 2016/05/17
- [Qemu-block] [PATCH v5 07/27] block: Handle image locking during reopen,
Fam Zheng <=
[Qemu-block] [PATCH v5 08/27] osdep: Add qemu_lock_fd and qemu_unlock_fd, Fam Zheng, 2016/05/17
[Qemu-block] [PATCH v5 11/27] raw-posix: Implement .bdrv_lockf, Fam Zheng, 2016/05/17
[Qemu-block] [PATCH v5 09/27] osdep: Introduce qemu_dup, Fam Zheng, 2016/05/17