| From 39fd66a311ade8aa330c6c32f1b2a3669e6db44f Mon Sep 17 00:00:00 2001 |
| From: Kevin Wolf <kwolf@redhat.com> |
| Date: Wed, 11 Dec 2013 20:14:09 +0100 |
| Subject: [PATCH 05/37] block: Update BlockLimits when they might have changed |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Message-id: <1392117622-28812-6-git-send-email-kwolf@redhat.com> |
| Patchwork-id: 57170 |
| O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 05/37] block: Update BlockLimits when they might have changed |
| Bugzilla: 748906 |
| RH-Acked-by: Laszlo Ersek <lersek@redhat.com> |
| RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com> |
| RH-Acked-by: Max Reitz <mreitz@redhat.com> |
| |
| 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 <kwolf@redhat.com> |
| Reviewed-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com> |
| Reviewed-by: Max Reitz <mreitz@redhat.com> |
| Reviewed-by: BenoƮt Canet <benoit@irqsave.net> |
| (cherry picked from commit 355ef4ac95a7a47d5c7201ccd910056a100d2fdf) |
| |
| Conflicts: |
| block/stream.c |
| |
| Trivial context-only conflict. |
| |
| Signed-off-by: Kevin Wolf <kwolf@redhat.com> |
| |
| block.c | 5 ++++- |
| block/stream.c | 2 ++ |
| include/block/block.h | 1 + |
| 3 files changed, 7 insertions(+), 1 deletion(-) |
| |
| block.c | 5 ++++- |
| block/stream.c | 2 ++ |
| include/block/block.h | 1 + |
| 3 files changed, 7 insertions(+), 1 deletions(-) |
| |
| diff --git a/block.c b/block.c |
| index 8b36d05..f62acbd 100644 |
| |
| |
| @@ -446,7 +446,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; |
| |
| @@ -1452,6 +1452,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); |
| } |
| |
| /* |
| @@ -2284,6 +2286,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 1420d09..3a7d8f3 100644 |
| |
| |
| @@ -71,6 +71,8 @@ static void close_unused_images(BlockDriverState *top, BlockDriverState *base, |
| bdrv_unref(unused); |
| } |
| top->backing_hd = base; |
| + |
| + 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 d20d63e..3e22fc2 100644 |
| |
| |
| @@ -250,6 +250,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.7.1 |
| |