Commit 6987307c authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Anthony Liguori
Browse files

block: clean up bdrv_open2 structure a bit



Check the whitelist as early as possible instead of continuing the
setup, and move all the error handling code to the end of the
function.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
parent 392ecf54
Loading
Loading
Loading
Loading
+19 −12
Original line number Diff line number Diff line
@@ -428,10 +428,16 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
            drv = find_image_format(filename);
        }
    }

    if (!drv) {
        ret = -ENOENT;
        goto unlink_and_fail;
    }
    if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv)) {
        ret = -ENOTSUP;
        goto unlink_and_fail;
    }

    bs->drv = drv;
    bs->opaque = qemu_mallocz(drv->instance_size);

@@ -453,20 +459,12 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
    } else {
        open_flags = flags & ~(BDRV_O_FILE | BDRV_O_SNAPSHOT);
    }
    if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv)) {
        ret = -ENOTSUP;
    } else {

    ret = drv->bdrv_open(bs, filename, open_flags);
    }
    if (ret < 0) {
        qemu_free(bs->opaque);
        bs->opaque = NULL;
        bs->drv = NULL;
    unlink_and_fail:
        if (bs->is_temporary)
            unlink(filename);
        return ret;
        goto free_and_fail;
    }

    if (drv->bdrv_getlength) {
        bs->total_sectors = bdrv_getlength(bs) >> BDRV_SECTOR_BITS;
    }
@@ -499,6 +497,15 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
            bs->change_cb(bs->change_opaque);
    }
    return 0;

free_and_fail:
    qemu_free(bs->opaque);
    bs->opaque = NULL;
    bs->drv = NULL;
unlink_and_fail:
    if (bs->is_temporary)
        unlink(filename);
    return ret;
}

void bdrv_close(BlockDriverState *bs)