|
@@ -668,7 +668,7 @@ static int bdrv_open_common(BlockDriverState *bs, const char *filename,
|
|
open_flags |= BDRV_O_RDWR;
|
|
open_flags |= BDRV_O_RDWR;
|
|
}
|
|
}
|
|
|
|
|
|
- bs->keep_read_only = bs->read_only = !(open_flags & BDRV_O_RDWR);
|
|
|
|
|
|
+ bs->read_only = !(open_flags & BDRV_O_RDWR);
|
|
|
|
|
|
/* Open the image, either directly or using a protocol */
|
|
/* Open the image, either directly or using a protocol */
|
|
if (drv->bdrv_file_open) {
|
|
if (drv->bdrv_file_open) {
|
|
@@ -808,6 +808,12 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int flags,
|
|
goto unlink_and_fail;
|
|
goto unlink_and_fail;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (flags & BDRV_O_RDWR) {
|
|
|
|
+ flags |= BDRV_O_ALLOW_RDWR;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ bs->keep_read_only = !(flags & BDRV_O_ALLOW_RDWR);
|
|
|
|
+
|
|
/* Open the image */
|
|
/* Open the image */
|
|
ret = bdrv_open_common(bs, filename, flags, drv);
|
|
ret = bdrv_open_common(bs, filename, flags, drv);
|
|
if (ret < 0) {
|
|
if (ret < 0) {
|
|
@@ -837,12 +843,6 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int flags,
|
|
bdrv_close(bs);
|
|
bdrv_close(bs);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
- if (bs->is_temporary) {
|
|
|
|
- bs->backing_hd->keep_read_only = !(flags & BDRV_O_RDWR);
|
|
|
|
- } else {
|
|
|
|
- /* base image inherits from "parent" */
|
|
|
|
- bs->backing_hd->keep_read_only = bs->keep_read_only;
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (!bdrv_key_required(bs)) {
|
|
if (!bdrv_key_required(bs)) {
|