Signed-off-by: Fam Zheng <[email protected]>
---
block/block-backend.c | 18 ++++++++++++++++++
include/sysemu/block-backend.h | 2 ++
2 files changed, 20 insertions(+)
diff --git a/block/block-backend.c b/block/block-backend.c
index 0bd19ab..dc1ad36 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -61,6 +61,7 @@ struct BlockBackend {
bool allow_write_beyond_eof;
NotifierList remove_bs_notifiers, insert_bs_notifiers;
+ ImageLockMode lock_mode;
};
typedef struct BlockBackendAIOCB {
@@ -1720,3 +1721,20 @@ static void blk_root_drained_end(BdrvChild *child)
assert(blk->public.io_limits_disabled);
--blk->public.io_limits_disabled;
}
+
+void blk_lock_image(BlockBackend *blk, ImageLockMode mode, Error **errp)
+{
+ int r;
+ BlockDriverState *bs = blk_bs(blk);
+
+ if (!bs) {
+ blk->lock_mode = mode;
+ return;
+ }
+ r = bdrv_set_lock_mode(bs, mode);
+ if (r) {
+ error_setg(errp, "Failed to lock image");
+ } else {
+ blk->lock_mode = mode;
+ }
+}
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
index 3b29317..78f9da5 100644
--- a/include/sysemu/block-backend.h
+++ b/include/sysemu/block-backend.h
@@ -224,4 +224,6 @@ void blk_io_limits_disable(BlockBackend *blk);
void blk_io_limits_enable(BlockBackend *blk, const char *group);
void blk_io_limits_update_group(BlockBackend *blk, const char *group);
+void blk_lock_image(BlockBackend *blk, ImageLockMode mode, Error **errp);
+
#endif
--
2.7.4