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 <armbru@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
abd7f68d08
commit
6ab4b5ab8f
9
block.c
9
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
|
||||
|
1
block.h
1
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);
|
||||
|
16
blockdev.c
16
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user