[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 11/47] block: Use common driver selection code for bd
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 11/47] block: Use common driver selection code for bdrv_open_file() |
Date: |
Fri, 27 Jun 2014 21:08:30 +0200 |
This moves the bdrv_open_file() call a bit down so that it can use the
bdrv_open() code that selects the right block driver.
The code between the old and the new call site is either common code
(the error message for an unknown driver has been unified now) or
doesn't run with cleared BDRV_O_PROTOCOL (added an if block in one
place, whereas the right path was already asserted in another place)
Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Benoit Canet <address@hidden>
---
block.c | 67 +++++++++++++++++++++++++++++------------------------------------
1 file changed, 30 insertions(+), 37 deletions(-)
diff --git a/block.c b/block.c
index 0aa444e..97b4ddc 100644
--- a/block.c
+++ b/block.c
@@ -1135,21 +1135,14 @@ static int bdrv_fill_options(QDict **options, const
char **pfilename, int flags,
* returns. Then, the caller is responsible for freeing it. If it intends to
* reuse the QDict, QINCREF() should be called beforehand.
*/
-static int bdrv_file_open(BlockDriverState *bs, QDict **options, int flags,
- Error **errp)
+static int bdrv_file_open(BlockDriverState *bs, BlockDriver *drv,
+ QDict **options, int flags, Error **errp)
{
- BlockDriver *drv;
const char *filename;
- const char *drvname;
Error *local_err = NULL;
int ret;
filename = qdict_get_try_str(*options, "filename");
- drvname = qdict_get_str(*options, "driver");
-
- drv = bdrv_find_format(drvname);
- assert(drv);
- qdict_del(*options, "driver");
/* Open the file */
if (!drv->bdrv_file_open) {
@@ -1452,35 +1445,23 @@ int bdrv_open(BlockDriverState **pbs, const char
*filename,
bs->options = options;
options = qdict_clone_shallow(options);
- if (flags & BDRV_O_PROTOCOL) {
- assert(!drv);
- ret = bdrv_file_open(bs, &options, flags & ~BDRV_O_PROTOCOL,
- &local_err);
- if (!ret) {
- drv = bs->drv;
- goto done;
- } else if (bs->drv) {
- goto close_and_fail;
- } else {
- goto fail;
- }
- }
-
/* Open image file without format layer */
- if (flags & BDRV_O_RDWR) {
- flags |= BDRV_O_ALLOW_RDWR;
- }
- if (flags & BDRV_O_SNAPSHOT) {
- snapshot_flags = bdrv_temp_snapshot_flags(flags);
- flags = bdrv_backing_flags(flags);
- }
+ if ((flags & BDRV_O_PROTOCOL) == 0) {
+ if (flags & BDRV_O_RDWR) {
+ flags |= BDRV_O_ALLOW_RDWR;
+ }
+ if (flags & BDRV_O_SNAPSHOT) {
+ snapshot_flags = bdrv_temp_snapshot_flags(flags);
+ flags = bdrv_backing_flags(flags);
+ }
- assert(file == NULL);
- ret = bdrv_open_image(&file, filename, options, "file",
- bdrv_inherited_flags(flags),
- true, &local_err);
- if (ret < 0) {
- goto fail;
+ assert(file == NULL);
+ ret = bdrv_open_image(&file, filename, options, "file",
+ bdrv_inherited_flags(flags),
+ true, &local_err);
+ if (ret < 0) {
+ goto fail;
+ }
}
/* Find the right image format driver */
@@ -1492,7 +1473,7 @@ int bdrv_open(BlockDriverState **pbs, const char
*filename,
drv = bdrv_find_format(drvname);
qdict_del(options, "driver");
if (!drv) {
- error_setg(errp, "Invalid driver: '%s'", drvname);
+ error_setg(errp, "Unknown driver: '%s'", drvname);
ret = -EINVAL;
goto fail;
}
@@ -1508,6 +1489,18 @@ int bdrv_open(BlockDriverState **pbs, const char
*filename,
}
/* Open the image */
+ if (flags & BDRV_O_PROTOCOL) {
+ ret = bdrv_file_open(bs, drv, &options, flags & ~BDRV_O_PROTOCOL,
+ &local_err);
+ if (!ret) {
+ goto done;
+ } else if (bs->drv) {
+ goto close_and_fail;
+ } else {
+ goto fail;
+ }
+ }
+
ret = bdrv_open_common(bs, file, options, flags, drv, &local_err);
if (ret < 0) {
goto fail;
--
1.8.3.1
- [Qemu-devel] [PULL 00/47] Block patches for 2.1.0-rc0, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 01/47] blockjob: Add block_job_yield(), Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 02/47] mirror: Go through ready -> complete process for 0 len image, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 06/47] block/nfs: add knob to set readahead, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 05/47] block/nfs: fix url parameter checking, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 03/47] qemu-iotests: Test BLOCK_JOB_READY event for 0Kb image active commit, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 04/47] qemu-iotests: Test 0-length image for mirror, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 08/47] block: Move bdrv_fill_options() call to bdrv_open(), Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 07/47] block: Create bdrv_fill_options(), Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 09/47] block: Move json: parsing to bdrv_fill_options(), Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 11/47] block: Use common driver selection code for bdrv_open_file(),
Kevin Wolf <=
- [Qemu-devel] [PULL 12/47] block: Inline bdrv_file_open(), Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 10/47] block: Always pass driver name through options QDict, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 13/47] block: Remove second bdrv_open() recursion, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 14/47] block: Catch backing files assigned to non-COW drivers, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 18/47] block: add qemu-iotest for resize base during live commit, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 16/47] qemu_opts_append: Play nicely with QemuOptsList's head, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 17/47] block: check for RESIZE blocker in the QMP command, not bdrv_truncate(), Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 15/47] block: Remove a special case for protocols, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 19/47] quorum: Add the rewrite-corrupted parameter to quorum, Kevin Wolf, 2014/06/27
- [Qemu-devel] [PULL 20/47] block: Add node-name argument to drive-mirror, Kevin Wolf, 2014/06/27