From 5ec70cd490e7f3c6c6a6ed88a1787ce77a8b7bf8 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Wed, 7 Apr 2010 11:42:59 -0300 Subject: [PATCH 21/21] Replace calls of old bdrv_open RH-Author: Kevin Wolf Message-id: <1270640579-13548-6-git-send-email-kwolf@redhat.com> Patchwork-id: 8418 O-Subject: [RHEL-6 KVM PATCH 5/5] Replace calls of old bdrv_open Bugzilla: 579974 RH-Acked-by: Christoph Hellwig RH-Acked-by: Gleb Natapov RH-Acked-by: Juan Quintela Bugzilla: 579974 Upstream status: Submitted What is known today as bdrv_open2 becomes the new bdrv_open. All remaining callers of the old function are converted to the new one. In some places they even know the right format, so they should have used bdrv_open2 from the beginning. One of these places is the metadata preallocation in qcow2. If you created a qcow2 image on a host device, it would open it as a host_device instead of qcow2 and consequently fail when qcow2 tries to use the BlockDriverState as its own. Signed-off-by: Kevin Wolf --- block.c | 22 ++++++++-------------- block.h | 5 ++--- block/qcow2.c | 4 ++-- block/vmdk.c | 2 +- block/vvfat.c | 5 ++++- hw/xen_disk.c | 2 +- monitor.c | 2 +- qemu-img.c | 16 ++++++++-------- qemu-io.c | 2 +- qemu-nbd.c | 2 +- vl.c | 2 +- 11 files changed, 30 insertions(+), 34 deletions(-) Signed-off-by: Eduardo Habkost --- block.c | 22 ++++++++-------------- block.h | 5 ++--- block/qcow2.c | 4 ++-- block/vmdk.c | 2 +- block/vvfat.c | 5 ++++- hw/xen_disk.c | 2 +- monitor.c | 2 +- qemu-img.c | 16 ++++++++-------- qemu-io.c | 2 +- qemu-nbd.c | 2 +- vl.c | 2 +- 11 files changed, 30 insertions(+), 34 deletions(-) diff --git a/block.c b/block.c index 9e76024..3826e23 100644 --- a/block.c +++ b/block.c @@ -338,7 +338,7 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, int flags) int ret; bs = bdrv_new(""); - ret = bdrv_open2(bs, filename, flags | BDRV_O_FILE, NULL); + ret = bdrv_open(bs, filename, flags | BDRV_O_FILE, NULL); if (ret < 0) { bdrv_delete(bs); return ret; @@ -348,13 +348,8 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, int flags) return 0; } -int bdrv_open(BlockDriverState *bs, const char *filename, int flags) -{ - return bdrv_open2(bs, filename, flags, NULL); -} - -int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, - BlockDriver *drv) +int bdrv_open(BlockDriverState *bs, const char *filename, int flags, + BlockDriver *drv) { int ret, open_flags; char tmp_filename[PATH_MAX]; @@ -379,7 +374,7 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, /* if there is a backing file, use it */ bs1 = bdrv_new(""); - ret = bdrv_open2(bs1, filename, 0, drv); + ret = bdrv_open(bs1, filename, 0, drv); if (ret < 0) { bdrv_delete(bs1); return ret; @@ -492,8 +487,7 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, /* backing files always opened read-only */ open_flags &= ~BDRV_O_RDWR; - ret = bdrv_open2(bs->backing_hd, backing_filename, open_flags, - back_drv); + ret = bdrv_open(bs->backing_hd, backing_filename, open_flags, back_drv); if (ret < 0) { bdrv_close(bs); return ret; @@ -605,12 +599,12 @@ int bdrv_commit(BlockDriverState *bs) bdrv_delete(bs->backing_hd); bs->backing_hd = NULL; bs_rw = bdrv_new(""); - rw_ret = bdrv_open2(bs_rw, filename, open_flags | BDRV_O_RDWR, NULL); + rw_ret = bdrv_open(bs_rw, filename, open_flags | BDRV_O_RDWR, NULL); if (rw_ret < 0) { bdrv_delete(bs_rw); /* try to re-open read-only */ bs_ro = bdrv_new(""); - ret = bdrv_open2(bs_ro, filename, open_flags & ~BDRV_O_RDWR, NULL); + ret = bdrv_open(bs_ro, filename, open_flags & ~BDRV_O_RDWR, NULL); if (ret < 0) { bdrv_delete(bs_ro); /* drive not functional anymore */ @@ -662,7 +656,7 @@ ro_cleanup: bdrv_delete(bs->backing_hd); bs->backing_hd = NULL; bs_ro = bdrv_new(""); - ret = bdrv_open2(bs_ro, filename, open_flags & ~BDRV_O_RDWR, NULL); + ret = bdrv_open(bs_ro, filename, open_flags & ~BDRV_O_RDWR, NULL); if (ret < 0) { bdrv_delete(bs_ro); /* drive not functional anymore */ diff --git a/block.h b/block.h index 31e18f5..0d491b9 100644 --- a/block.h +++ b/block.h @@ -69,9 +69,8 @@ int bdrv_create2(BlockDriver *drv, BlockDriverState *bdrv_new(const char *device_name); void bdrv_delete(BlockDriverState *bs); int bdrv_file_open(BlockDriverState **pbs, const char *filename, int flags); -int bdrv_open(BlockDriverState *bs, const char *filename, int flags); -int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, - BlockDriver *drv); +int bdrv_open(BlockDriverState *bs, const char *filename, int flags, + BlockDriver *drv); void bdrv_close(BlockDriverState *bs); int bdrv_check(BlockDriverState *bs); int bdrv_read(BlockDriverState *bs, int64_t sector_num, diff --git a/block/qcow2.c b/block/qcow2.c index 294b432..1762b30 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -52,7 +52,7 @@ typedef struct { #define QCOW_EXT_MAGIC_END 0 #define QCOW_EXT_MAGIC_BACKING_FORMAT 0xE2792ACA - +static BlockDriver bdrv_qcow2; static int qcow_probe(const uint8_t *buf, int buf_size, const char *filename) { @@ -998,7 +998,7 @@ exit: if (ret == 0 && prealloc) { BlockDriverState *bs; bs = bdrv_new(""); - bdrv_open(bs, filename, BDRV_O_CACHE_WB | BDRV_O_RDWR); + bdrv_open(bs, filename, BDRV_O_CACHE_WB | BDRV_O_RDWR, &bdrv_qcow2); preallocate(bs); bdrv_close(bs); } diff --git a/block/vmdk.c b/block/vmdk.c index 007fca4..6fdea1d 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -390,7 +390,7 @@ static int vmdk_parent_open(BlockDriverState *bs, const char * filename) return -1; } parent_open = 1; - if (bdrv_open(bs->backing_hd, parent_img_name, 0) < 0) + if (bdrv_open(bs->backing_hd, parent_img_name, 0, NULL) < 0) goto failure; parent_open = 0; } diff --git a/block/vvfat.c b/block/vvfat.c index bb707c0..e166bf6 100644 --- a/block/vvfat.c +++ b/block/vvfat.c @@ -2792,8 +2792,11 @@ static int enable_write_target(BDRVVVFATState *s) if (bdrv_create(bdrv_qcow, s->qcow_filename, options) < 0) return -1; s->qcow = bdrv_new(""); - if (s->qcow == NULL || bdrv_open(s->qcow, s->qcow_filename, BDRV_O_RDWR) < 0) + if (s->qcow == NULL || + bdrv_open(s->qcow, s->qcow_filename, BDRV_O_RDWR, bdrv_qcow) < 0) + { return -1; + } #ifndef _WIN32 unlink(s->qcow_filename); diff --git a/hw/xen_disk.c b/hw/xen_disk.c index beadf90..95017a1 100644 --- a/hw/xen_disk.c +++ b/hw/xen_disk.c @@ -629,7 +629,7 @@ static int blk_init(struct XenDevice *xendev) xen_be_printf(&blkdev->xendev, 2, "create new bdrv (xenbus setup)\n"); blkdev->bs = bdrv_new(blkdev->dev); if (blkdev->bs) { - if (bdrv_open2(blkdev->bs, blkdev->filename, qflags, + if (bdrv_open(blkdev->bs, blkdev->filename, qflags, bdrv_find_whitelisted_format(blkdev->fileproto)) != 0) { bdrv_delete(blkdev->bs); diff --git a/monitor.c b/monitor.c index 4879da4..4591848 100644 --- a/monitor.c +++ b/monitor.c @@ -1124,7 +1124,7 @@ static int do_change_block(Monitor *mon, const char *device, if (eject_device(mon, bs, 0) < 0) { return -1; } - if (bdrv_open2(bs, filename, BDRV_O_RDWR, drv) < 0) { + if (bdrv_open(bs, filename, BDRV_O_RDWR, drv) < 0) { return -1; } return monitor_read_bdrv_key_start(mon, bs, NULL, NULL); diff --git a/qemu-img.c b/qemu-img.c index 3af8739..3744c24 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -209,7 +209,7 @@ static BlockDriverState *bdrv_new_open(const char *filename, if (!readonly) { flags |= BDRV_O_RDWR; } - if (bdrv_open2(bs, filename, flags, drv) < 0) { + if (bdrv_open(bs, filename, flags, drv) < 0) { error("Could not open '%s'", filename); } if (bdrv_is_encrypted(bs)) { @@ -414,7 +414,7 @@ static int img_check(int argc, char **argv) } else { drv = NULL; } - if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) { + if (bdrv_open(bs, filename, BRDV_O_FLAGS, drv) < 0) { error("Could not open '%s'", filename); } ret = bdrv_check(bs); @@ -473,7 +473,7 @@ static int img_commit(int argc, char **argv) } else { drv = NULL; } - if (bdrv_open2(bs, filename, BRDV_O_FLAGS | BDRV_O_RDWR, drv) < 0) { + if (bdrv_open(bs, filename, BRDV_O_FLAGS | BDRV_O_RDWR, drv) < 0) { error("Could not open '%s'", filename); } ret = bdrv_commit(bs); @@ -923,7 +923,7 @@ static int img_info(int argc, char **argv) } else { drv = NULL; } - if (bdrv_open2(bs, filename, BRDV_O_FLAGS | BDRV_O_NO_BACKING, drv) < 0) { + if (bdrv_open(bs, filename, BRDV_O_FLAGS | BDRV_O_NO_BACKING, drv) < 0) { error("Could not open '%s'", filename); } bdrv_get_format(bs, fmt_name, sizeof(fmt_name)); @@ -1029,7 +1029,7 @@ static int img_snapshot(int argc, char **argv) if (!bs) error("Not enough memory"); - if (bdrv_open2(bs, filename, bdrv_oflags, NULL) < 0) { + if (bdrv_open(bs, filename, bdrv_oflags, NULL) < 0) { error("Could not open '%s'", filename); } @@ -1134,7 +1134,7 @@ static int img_rebase(int argc, char **argv) } flags = BRDV_O_FLAGS | BDRV_O_RDWR | (unsafe ? BDRV_O_NO_BACKING : 0); - if (bdrv_open2(bs, filename, flags, drv) < 0) { + if (bdrv_open(bs, filename, flags, drv) < 0) { error("Could not open '%s'", filename); } @@ -1166,7 +1166,7 @@ static int img_rebase(int argc, char **argv) bs_old_backing = bdrv_new("old_backing"); bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name)); - if (bdrv_open2(bs_old_backing, backing_name, BRDV_O_FLAGS, + if (bdrv_open(bs_old_backing, backing_name, BRDV_O_FLAGS, old_backing_drv)) { error("Could not open old backing file '%s'", backing_name); @@ -1174,7 +1174,7 @@ static int img_rebase(int argc, char **argv) } bs_new_backing = bdrv_new("new_backing"); - if (bdrv_open2(bs_new_backing, out_baseimg, BRDV_O_FLAGS | BDRV_O_RDWR, + if (bdrv_open(bs_new_backing, out_baseimg, BRDV_O_FLAGS | BDRV_O_RDWR, new_backing_drv)) { error("Could not open new backing file '%s'", out_baseimg); diff --git a/qemu-io.c b/qemu-io.c index 9746950..12162da 100644 --- a/qemu-io.c +++ b/qemu-io.c @@ -1282,7 +1282,7 @@ static int openfile(char *name, int flags, int growable) flags |= BDRV_O_FILE; } - if (bdrv_open(bs, name, flags) < 0) { + if (bdrv_open(bs, name, flags, NULL) < 0) { fprintf(stderr, "%s: can't open device %s\n", progname, name); bs = NULL; return 1; diff --git a/qemu-nbd.c b/qemu-nbd.c index 0e49706..f96be60 100644 --- a/qemu-nbd.c +++ b/qemu-nbd.c @@ -332,7 +332,7 @@ int main(int argc, char **argv) if (bs == NULL) return 1; - if (bdrv_open(bs, argv[optind], flags) < 0) + if (bdrv_open(bs, argv[optind], flags, NULL) < 0) return 1; fd_size = bs->total_sectors * 512; diff --git a/vl.c b/vl.c index f60a57e..1696948 100644 --- a/vl.c +++ b/vl.c @@ -2523,7 +2523,7 @@ DriveInfo *drive_init(QemuOpts *opts, void *opaque, } bdrv_flags |= ro ? 0 : BDRV_O_RDWR; - if (bdrv_open2(dinfo->bdrv, file, bdrv_flags, drv) < 0) { + if (bdrv_open(dinfo->bdrv, file, bdrv_flags, drv) < 0) { fprintf(stderr, "qemu: could not open disk image %s: %s\n", file, strerror(errno)); return NULL; -- 1.7.0.3