From patchwork Tue Apr 13 09:29:34 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Hajnoczi X-Patchwork-Id: 50054 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 4EC1DB7C67 for ; Tue, 13 Apr 2010 19:34:33 +1000 (EST) Received: from localhost ([127.0.0.1]:49861 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O1cVp-0000qK-Oc for incoming@patchwork.ozlabs.org; Tue, 13 Apr 2010 05:34:29 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O1cRO-0008Pj-9W for qemu-devel@nongnu.org; Tue, 13 Apr 2010 05:29:54 -0400 Received: from [140.186.70.92] (port=35830 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O1cRL-0008P6-QX for qemu-devel@nongnu.org; Tue, 13 Apr 2010 05:29:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O1cQZ-0001JW-Ba for qemu-devel@nongnu.org; Tue, 13 Apr 2010 05:29:10 -0400 Received: from mtagate2.de.ibm.com ([195.212.17.162]:46317) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O1cQZ-0001JA-0e for qemu-devel@nongnu.org; Tue, 13 Apr 2010 05:29:03 -0400 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate2.de.ibm.com (8.13.1/8.13.1) with ESMTP id o3D9T2cx002919 for ; Tue, 13 Apr 2010 09:29:02 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o3D9T1TQ1646668 for ; Tue, 13 Apr 2010 11:29:01 +0200 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id o3D9T1mB025559 for ; Tue, 13 Apr 2010 11:29:01 +0200 Received: from localhost.localdomain (dyn-9-174-219-79.manchester-maybrook.uk.ibm.com [9.174.219.79]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id o3D9Sx8p025477; Tue, 13 Apr 2010 11:29:01 +0200 From: Stefan Hajnoczi To: qemu-devel@nongnu.org Date: Tue, 13 Apr 2010 10:29:34 +0100 Message-Id: <1271150975-4456-3-git-send-email-stefanha@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.0 In-Reply-To: <1271150975-4456-1-git-send-email-stefanha@linux.vnet.ibm.com> References: <1271150975-4456-1-git-send-email-stefanha@linux.vnet.ibm.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) Cc: kwolf@redhat.com, Stefan Hajnoczi Subject: [Qemu-devel] [PATCH 2/3] qemu-img: Eliminate bdrv_new_open() code duplication X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Several commands have code to create a BlockDriverState and open a file. The bdrv_new_open() function can be used to perform these steps. This patch converts the qemu-img commands to actually use bdrv_new_open(). Replaced the bdrv_new_open() 'readonly' argument with bdrv_open()-style flags to support generic flags like BDRV_O_NO_BACKING. Signed-off-by: Stefan Hajnoczi --- qemu-img.c | 83 +++++++---------------------------------------------------- 1 files changed, 10 insertions(+), 73 deletions(-) diff --git a/qemu-img.c b/qemu-img.c index 18e43a0..b30effa 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -190,12 +190,11 @@ static int read_password(char *buf, int buf_size) static BlockDriverState *bdrv_new_open(const char *filename, const char *fmt, - int readonly) + int flags) { BlockDriverState *bs; BlockDriver *drv; char password[256]; - int flags = BRDV_O_FLAGS; bs = bdrv_new(""); if (!bs) @@ -207,9 +206,6 @@ static BlockDriverState *bdrv_new_open(const char *filename, } else { drv = NULL; } - if (!readonly) { - flags |= BDRV_O_RDWR; - } if (bdrv_open(bs, filename, flags, drv) < 0) { error("Could not open '%s'", filename); } @@ -349,7 +345,7 @@ static int img_create(int argc, char **argv) } } - bs = bdrv_new_open(backing_file->value.s, fmt, 1); + bs = bdrv_new_open(backing_file->value.s, fmt, BRDV_O_FLAGS); bdrv_get_geometry(bs, &size); size *= 512; bdrv_delete(bs); @@ -384,7 +380,6 @@ static int img_check(int argc, char **argv) { int c, ret; const char *filename, *fmt; - BlockDriver *drv; BlockDriverState *bs; fmt = NULL; @@ -405,19 +400,7 @@ static int img_check(int argc, char **argv) help(); filename = argv[optind++]; - bs = bdrv_new(""); - if (!bs) - error("Not enough memory"); - if (fmt) { - drv = bdrv_find_format(fmt); - if (!drv) - error("Unknown file format '%s'", fmt); - } else { - drv = NULL; - } - if (bdrv_open(bs, filename, BRDV_O_FLAGS, drv) < 0) { - error("Could not open '%s'", filename); - } + bs = bdrv_new_open(filename, fmt, BRDV_O_FLAGS); ret = bdrv_check(bs); switch(ret) { case 0: @@ -443,7 +426,6 @@ static int img_commit(int argc, char **argv) { int c, ret; const char *filename, *fmt; - BlockDriver *drv; BlockDriverState *bs; fmt = NULL; @@ -464,19 +446,7 @@ static int img_commit(int argc, char **argv) help(); filename = argv[optind++]; - bs = bdrv_new(""); - if (!bs) - error("Not enough memory"); - if (fmt) { - drv = bdrv_find_format(fmt); - if (!drv) - error("Unknown file format '%s'", fmt); - } else { - drv = NULL; - } - if (bdrv_open(bs, filename, BRDV_O_FLAGS | BDRV_O_RDWR, drv) < 0) { - error("Could not open '%s'", filename); - } + bs = bdrv_new_open(filename, fmt, BRDV_O_FLAGS | BDRV_O_RDWR); ret = bdrv_commit(bs); switch(ret) { case 0: @@ -633,7 +603,7 @@ static int img_convert(int argc, char **argv) total_sectors = 0; for (bs_i = 0; bs_i < bs_n; bs_i++) { - bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt, 1); + bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt, BRDV_O_FLAGS); if (!bs[bs_i]) error("Could not open '%s'", argv[optind + bs_i]); bdrv_get_geometry(bs[bs_i], &bs_sectors); @@ -691,7 +661,7 @@ static int img_convert(int argc, char **argv) } } - out_bs = bdrv_new_open(out_filename, out_fmt, 0); + out_bs = bdrv_new_open(out_filename, out_fmt, BRDV_O_FLAGS | BDRV_O_RDWR); bs_i = 0; bs_offset = 0; @@ -889,7 +859,6 @@ static int img_info(int argc, char **argv) { int c; const char *filename, *fmt; - BlockDriver *drv; BlockDriverState *bs; char fmt_name[128], size_buf[128], dsize_buf[128]; uint64_t total_sectors; @@ -916,19 +885,7 @@ static int img_info(int argc, char **argv) help(); filename = argv[optind++]; - bs = bdrv_new(""); - if (!bs) - error("Not enough memory"); - if (fmt) { - drv = bdrv_find_format(fmt); - if (!drv) - error("Unknown file format '%s'", fmt); - } else { - drv = NULL; - } - if (bdrv_open(bs, filename, BRDV_O_FLAGS | BDRV_O_NO_BACKING, drv) < 0) { - error("Could not open '%s'", filename); - } + bs = bdrv_new_open(filename, fmt, BRDV_O_FLAGS | BDRV_O_NO_BACKING); bdrv_get_format(bs, fmt_name, sizeof(fmt_name)); bdrv_get_geometry(bs, &total_sectors); get_human_readable_size(size_buf, sizeof(size_buf), total_sectors * 512); @@ -1028,13 +985,7 @@ static int img_snapshot(int argc, char **argv) filename = argv[optind++]; /* Open the image */ - bs = bdrv_new(""); - if (!bs) - error("Not enough memory"); - - if (bdrv_open(bs, filename, bdrv_oflags, NULL) < 0) { - error("Could not open '%s'", filename); - } + bs = bdrv_new_open(filename, NULL, bdrv_oflags); /* Perform the requested action */ switch(action) { @@ -1080,7 +1031,7 @@ static int img_snapshot(int argc, char **argv) static int img_rebase(int argc, char **argv) { BlockDriverState *bs, *bs_old_backing, *bs_new_backing; - BlockDriver *drv, *old_backing_drv, *new_backing_drv; + BlockDriver *old_backing_drv, *new_backing_drv; char *filename; const char *fmt, *out_basefmt, *out_baseimg; int c, flags, ret; @@ -1124,22 +1075,8 @@ static int img_rebase(int argc, char **argv) * Ignore the old backing file for unsafe rebase in case we want to correct * the reference to a renamed or moved backing file. */ - bs = bdrv_new(""); - if (!bs) - error("Not enough memory"); - - drv = NULL; - if (fmt) { - drv = bdrv_find_format(fmt); - if (drv == NULL) { - error("Invalid format name: '%s'", fmt); - } - } - flags = BRDV_O_FLAGS | BDRV_O_RDWR | (unsafe ? BDRV_O_NO_BACKING : 0); - if (bdrv_open(bs, filename, flags, drv) < 0) { - error("Could not open '%s'", filename); - } + bs = bdrv_new_open(filename, fmt, flags); /* Find the right drivers for the backing files */ old_backing_drv = NULL;