From 6ab4b5ab8f129df67708be4b58bdf0e13b178548 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 2 Jun 2010 18:55:18 +0200 Subject: [PATCH] block: Decouple block device "commit all" from DriveInfo 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 Signed-off-by: Kevin Wolf --- 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 e701ec037..df2d3a6e8 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 d22401fdb..1f69cbd7c 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 b5570f403..d74cd1d80 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 87628ea33..9b69d928e 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); -- 2.39.5