block: Fix image re-open in bdrv_commit
PATCH 1/1 block: Fix image re-open in bdrv_commit
Arguably we should re-open the backing file with the backing file format and not with the format of the snapshot image.
Signed-off-by Kevin Wolf <[email protected]>
--- block.c | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-)
block.c +9 -4
@@ -745,6 +745,7 @@ int bdrv_check(BlockDriverState *bs, BdrvCheckResult *res)int bdrv_commit (BlockDriverState *bs) {BlockDriver *drv = bs->drv; +BlockDriver *backing_drv;int64_t sector, total_sectors;int n, ro, open_flags;int ret =0 , rw_ret =0 ;
@@ -762,7 +763,8 @@ int bdrv_commit(BlockDriverState *bs)if (bs->backing_hd->keep_read_only) {return -EACCES ; } - + + backing_drv = bs->backing_hd->drv; ro = bs->backing_hd->read_only;strncpy (filename, bs->backing_hd->filename,sizeof (filename)); open_flags = bs->backing_hd->open_flags;
@@ -772,12 +774,14 @@ int bdrv_commit(BlockDriverState *bs)bdrv_delete (bs->backing_hd); bs->backing_hd =NULL ; bs_rw =bdrv_new ("" ); - rw_ret =bdrv_open (bs_rw, filename, open_flags |BDRV_O_RDWR , drv); + rw_ret =bdrv_open (bs_rw, filename, open_flags |BDRV_O_RDWR , + backing_drv);if (rw_ret <0 ) {bdrv_delete (bs_rw);/* try to re-open read-only */ bs_ro =bdrv_new ("" ); - ret =bdrv_open (bs_ro, filename, open_flags & ~BDRV_O_RDWR , drv); + ret =bdrv_open (bs_ro, filename, open_flags & ~BDRV_O_RDWR , + backing_drv);if (ret <0 ) {bdrv_delete (bs_ro);/* drive not functional anymore */
@@ -828,7 +832,8 @@ ro_cleanup:bdrv_delete (bs->backing_hd); bs->backing_hd =NULL ; bs_ro =bdrv_new ("" ); - ret =bdrv_open (bs_ro, filename, open_flags & ~BDRV_O_RDWR , drv); + ret =bdrv_open (bs_ro, filename, open_flags & ~BDRV_O_RDWR , + backing_drv);if (ret <0 ) {bdrv_delete (bs_ro);/* drive not functional anymore */
Signature · 1 line
1.7.2