[Qemu-devel] [PATCH v3 03/29] block: Update BlockLimits when they might have changed
When reopening with different flags, or when backing files disappear from the chain, the limits may change. Make sure they get updated in these cases. Signed-off-by: Kevin Wolf kw...@redhat.com Reviewed-by: Wenchao Xia xiaw...@linux.vnet.ibm.com Reviewed-by: Max Reitz mre...@redhat.com --- block.c | 5 - block/stream.c| 2 ++ include/block/block.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/block.c b/block.c index 20f85cb..9a8562d 100644 --- a/block.c +++ b/block.c @@ -479,7 +479,7 @@ int bdrv_create_file(const char* filename, QEMUOptionParameter *options, return ret; } -static int bdrv_refresh_limits(BlockDriverState *bs) +int bdrv_refresh_limits(BlockDriverState *bs) { BlockDriver *drv = bs-drv; @@ -1464,6 +1464,8 @@ void bdrv_reopen_commit(BDRVReopenState *reopen_state) reopen_state-bs-enable_write_cache = !!(reopen_state-flags BDRV_O_CACHE_WB); reopen_state-bs-read_only = !(reopen_state-flags BDRV_O_RDWR); + +bdrv_refresh_limits(reopen_state-bs); } /* @@ -2261,6 +2263,7 @@ int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top, } new_top_bs-backing_hd = base_bs; +bdrv_refresh_limits(new_top_bs); QSIMPLEQ_FOREACH_SAFE(intermediate_state, states_to_delete, entry, next) { /* so that bdrv_close() does not recursively close the chain */ diff --git a/block/stream.c b/block/stream.c index 46bec7d..dd0b4ac 100644 --- a/block/stream.c +++ b/block/stream.c @@ -75,6 +75,8 @@ static void close_unused_images(BlockDriverState *top, BlockDriverState *base, unused-backing_hd = NULL; bdrv_unref(unused); } + +bdrv_refresh_limits(top); } static void coroutine_fn stream_run(void *opaque) diff --git a/include/block/block.h b/include/block/block.h index 36efaea..64fb319 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -249,6 +249,7 @@ int bdrv_truncate(BlockDriverState *bs, int64_t offset); int64_t bdrv_getlength(BlockDriverState *bs); int64_t bdrv_get_allocated_file_size(BlockDriverState *bs); void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); +int bdrv_refresh_limits(BlockDriverState *bs); int bdrv_commit(BlockDriverState *bs); int bdrv_commit_all(void); int bdrv_change_backing_file(BlockDriverState *bs, -- 1.8.1.4
Re: [Qemu-devel] [PATCH v3 03/29] block: Update BlockLimits when they might have changed
Le Friday 17 Jan 2014 à 15:14:53 (+0100), Kevin Wolf a écrit : When reopening with different flags, or when backing files disappear from the chain, the limits may change. Make sure they get updated in these cases. Signed-off-by: Kevin Wolf kw...@redhat.com Reviewed-by: Wenchao Xia xiaw...@linux.vnet.ibm.com Reviewed-by: Max Reitz mre...@redhat.com --- block.c | 5 - block/stream.c| 2 ++ include/block/block.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/block.c b/block.c index 20f85cb..9a8562d 100644 --- a/block.c +++ b/block.c @@ -479,7 +479,7 @@ int bdrv_create_file(const char* filename, QEMUOptionParameter *options, return ret; } -static int bdrv_refresh_limits(BlockDriverState *bs) +int bdrv_refresh_limits(BlockDriverState *bs) { BlockDriver *drv = bs-drv; @@ -1464,6 +1464,8 @@ void bdrv_reopen_commit(BDRVReopenState *reopen_state) reopen_state-bs-enable_write_cache = !!(reopen_state-flags BDRV_O_CACHE_WB); reopen_state-bs-read_only = !(reopen_state-flags BDRV_O_RDWR); + +bdrv_refresh_limits(reopen_state-bs); } /* @@ -2261,6 +2263,7 @@ int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top, } new_top_bs-backing_hd = base_bs; +bdrv_refresh_limits(new_top_bs); QSIMPLEQ_FOREACH_SAFE(intermediate_state, states_to_delete, entry, next) { /* so that bdrv_close() does not recursively close the chain */ diff --git a/block/stream.c b/block/stream.c index 46bec7d..dd0b4ac 100644 --- a/block/stream.c +++ b/block/stream.c @@ -75,6 +75,8 @@ static void close_unused_images(BlockDriverState *top, BlockDriverState *base, unused-backing_hd = NULL; bdrv_unref(unused); } + +bdrv_refresh_limits(top); } static void coroutine_fn stream_run(void *opaque) diff --git a/include/block/block.h b/include/block/block.h index 36efaea..64fb319 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -249,6 +249,7 @@ int bdrv_truncate(BlockDriverState *bs, int64_t offset); int64_t bdrv_getlength(BlockDriverState *bs); int64_t bdrv_get_allocated_file_size(BlockDriverState *bs); void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); +int bdrv_refresh_limits(BlockDriverState *bs); int bdrv_commit(BlockDriverState *bs); int bdrv_commit_all(void); int bdrv_change_backing_file(BlockDriverState *bs, -- 1.8.1.4 Reviewed-by: Benoît Canet ben...@irqsave.net