Skip to content

Commit

Permalink
block: Set BDRV_O_ALLOW_RDWR and snapshot_options before storing the …
Browse files Browse the repository at this point in the history
…flags

If an image is opened with snapshot=on, its flags are modified by
bdrv_backing_options() and then bs->open_flags is updated accordingly.
This last step is unnecessary if we calculate the new flags before
setting bs->open_flags.

Soon we'll introduce the "read-only" option, and then we'll need to
be able to modify its value in the QDict when snapshot=on. This is
more cumbersome if bs->options is already set. This patch simplifies
that. Other than that, there are no semantic changes. Although it
might seem that bs->options can have a different value now because
it is stored after calling bdrv_backing_options(), this call doesn't
actually modify them in this scenario.

The code that sets BDRV_O_ALLOW_RDWR is also moved for the same
reason.

Signed-off-by: Alberto Garcia <berto@igalia.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
  • Loading branch information
bertogg authored and kevmw committed Sep 23, 2016
1 parent 38b5e4c commit 14499ea
Showing 1 changed file with 11 additions and 12 deletions.
23 changes: 11 additions & 12 deletions block.c
Expand Up @@ -1675,6 +1675,17 @@ static BlockDriverState *bdrv_open_inherit(const char *filename,
goto fail;
}

if (flags & BDRV_O_RDWR) {
flags |= BDRV_O_ALLOW_RDWR;
}

if (flags & BDRV_O_SNAPSHOT) {
snapshot_options = qdict_new();
bdrv_temp_snapshot_options(&snapshot_flags, snapshot_options,
flags, options);
bdrv_backing_options(&flags, options, flags, options);
}

bs->open_flags = flags;
bs->options = options;
options = qdict_clone_shallow(options);
Expand All @@ -1699,18 +1710,6 @@ static BlockDriverState *bdrv_open_inherit(const char *filename,

/* Open image file without format layer */
if ((flags & BDRV_O_PROTOCOL) == 0) {
if (flags & BDRV_O_RDWR) {
flags |= BDRV_O_ALLOW_RDWR;
}
if (flags & BDRV_O_SNAPSHOT) {
snapshot_options = qdict_new();
bdrv_temp_snapshot_options(&snapshot_flags, snapshot_options,
flags, options);
bdrv_backing_options(&flags, options, flags, options);
}

bs->open_flags = flags;

file = bdrv_open_child(filename, options, "file", bs,
&child_file, true, &local_err);
if (local_err) {
Expand Down

0 comments on commit 14499ea

Please sign in to comment.