From patchwork Wed Jun 2 16:55:18 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Markus Armbruster X-Patchwork-Id: 54405 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 F152CB7D4C for ; Thu, 3 Jun 2010 03:36:12 +1000 (EST) Received: from localhost ([127.0.0.1]:48446 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OJrrM-0000u0-Me for incoming@patchwork.ozlabs.org; Wed, 02 Jun 2010 13:36:08 -0400 Received: from [140.186.70.92] (port=40078 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OJrEV-0007Ql-FS for qemu-devel@nongnu.org; Wed, 02 Jun 2010 12:56:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OJrE4-0005gQ-1b for qemu-devel@nongnu.org; Wed, 02 Jun 2010 12:55:43 -0400 Received: from oxygen.pond.sub.org ([213.239.205.148]:35278) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OJrE3-0005fQ-PA for qemu-devel@nongnu.org; Wed, 02 Jun 2010 12:55:31 -0400 Received: from blackfin.pond.sub.org (pD9E39C24.dip.t-dialin.net [217.227.156.36]) by oxygen.pond.sub.org (Postfix) with ESMTPA id BA9F0276FF1 for ; Wed, 2 Jun 2010 18:55:29 +0200 (CEST) Received: by blackfin.pond.sub.org (Postfix, from userid 500) id 244FC70; Wed, 2 Jun 2010 18:55:29 +0200 (CEST) From: Markus Armbruster To: qemu-devel@nongnu.org Date: Wed, 2 Jun 2010 18:55:18 +0200 Message-Id: <1275497729-13120-3-git-send-email-armbru@redhat.com> X-Mailer: git-send-email 1.6.6.1 In-Reply-To: <1275497729-13120-1-git-send-email-armbru@redhat.com> References: <1275497729-13120-1-git-send-email-armbru@redhat.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) Cc: kwolf@redhat.com, kraxel@redhat.com Subject: [Qemu-devel] [PATCH 02/13] block: Decouple block device "commit all" from DriveInfo 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 do_commit() and mux_proc_byte() iterate over the list of drives defined with drive_init(). This misses host block devices defined by other means. Such means don't exist now, but will be introduced later in this series. Change them to use new bdrv_commit_all(), which iterates over all host block devices. Signed-off-by: Markus Armbruster --- block.c | 9 +++++++++ block.h | 1 + blockdev.c | 16 ++++++++-------- qemu-char.c | 7 +------ 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/block.c b/block.c index 5c2f3d9..1bef649 100644 --- a/block.c +++ b/block.c @@ -788,6 +788,15 @@ ro_cleanup: return ret; } +void bdrv_commit_all(void) +{ + BlockDriverState *bs; + + QTAILQ_FOREACH(bs, &bdrv_states, list) { + bdrv_commit(bs); + } +} + /* * Return values: * 0 - success diff --git a/block.h b/block.h index 9ceb64d..49e3dcf 100644 --- a/block.h +++ b/block.h @@ -85,6 +85,7 @@ int64_t bdrv_getlength(BlockDriverState *bs); void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); void bdrv_guess_geometry(BlockDriverState *bs, int *pcyls, int *pheads, int *psecs); int bdrv_commit(BlockDriverState *bs); +void bdrv_commit_all(void); int bdrv_change_backing_file(BlockDriverState *bs, const char *backing_file, const char *backing_fmt); void bdrv_register(BlockDriver *bdrv); diff --git a/blockdev.c b/blockdev.c index 0df16c7..60c9211 100644 --- a/blockdev.c +++ b/blockdev.c @@ -486,16 +486,16 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi, int *fatal_error) void do_commit(Monitor *mon, const QDict *qdict) { - int all_devices; - DriveInfo *dinfo; const char *device = qdict_get_str(qdict, "device"); + BlockDriverState *bs; - all_devices = !strcmp(device, "all"); - QTAILQ_FOREACH(dinfo, &drives, next) { - if (!all_devices) - if (strcmp(bdrv_get_device_name(dinfo->bdrv), device)) - continue; - bdrv_commit(dinfo->bdrv); + if (!strcmp(device, "all")) { + bdrv_commit_all(); + } else { + bs = bdrv_find(device); + if (bs) { + bdrv_commit(bs); + } } } diff --git a/qemu-char.c b/qemu-char.c index 87628ea..9b69d92 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -351,12 +351,7 @@ static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch) break; } case 's': - { - DriveInfo *dinfo; - QTAILQ_FOREACH(dinfo, &drives, next) { - bdrv_commit(dinfo->bdrv); - } - } + bdrv_commit_all(); break; case 'b': qemu_chr_event(chr, CHR_EVENT_BREAK);