On Thu, Oct 27, 2011 at 11:18 AM, Kevin Wolf <kw...@redhat.com> wrote: > Am 27.10.2011 11:54, schrieb Stefan Hajnoczi: >> Several block drivers set bs->read_only in .bdrv_open() but >> block.c:bdrv_open_common() clobbers its value. Additionally, QED uses >> bdrv_is_read_only() in .bdrv_open() to decide whether to perform >> consistency checks. >> >> The correct ordering is to initialize bs->read_only from the open flags >> before calling .bdrv_open(). This way block drivers can override it if >> necessary and can use bdrv_is_read_only() in .bdrv_open(). >> >> Signed-off-by: Stefan Hajnoczi <stefa...@linux.vnet.ibm.com> >> --- >> block.c | 4 ++-- >> 1 files changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/block.c b/block.c >> index 70aab63..3207e99 100644 >> --- a/block.c >> +++ b/block.c >> @@ -500,6 +500,8 @@ static int bdrv_open_common(BlockDriverState *bs, const >> char *filename, >> open_flags |= BDRV_O_RDWR; >> } > > Not directly related, but the context made me wonder when we're making a > BlockkDriverState writeable unconditionally. This is the full context: > > > /* > * Snapshots should be writable. > */ > if (bs->is_temporary) { > open_flags |= BDRV_O_RDWR; > } > > Does anyone understand what the point of this is? If the user requested > read-only, he certainly wants to have read-only, even if he specified > -snapshot as well.
Perhaps this is an attempt to support -drive file=pristine.img,readonly=on,snapshot=on. The idea being that the user absolutely wants to keep pristine.img unmodified. But the nature of backing files means we should automatically get this. Stefan