block: Eliminate bdrv_iterate(), use bdrv_next()
Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Benoît Canet <benoit.canet@nodalink.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
b9fe8a7a12
commit
fea68bb6e9
@ -343,12 +343,25 @@ static void unset_dirty_tracking(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void init_blk_migration_it(void *opaque, BlockDriverState *bs)
|
||||
static void init_blk_migration(QEMUFile *f)
|
||||
{
|
||||
BlockDriverState *bs;
|
||||
BlkMigDevState *bmds;
|
||||
int64_t sectors;
|
||||
|
||||
if (!bdrv_is_read_only(bs)) {
|
||||
block_mig_state.submitted = 0;
|
||||
block_mig_state.read_done = 0;
|
||||
block_mig_state.transferred = 0;
|
||||
block_mig_state.total_sector_sum = 0;
|
||||
block_mig_state.prev_progress = -1;
|
||||
block_mig_state.bulk_completed = 0;
|
||||
block_mig_state.zero_blocks = migrate_zero_blocks();
|
||||
|
||||
for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
|
||||
if (bdrv_is_read_only(bs)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
sectors = bdrv_nb_sectors(bs);
|
||||
if (sectors <= 0) {
|
||||
return;
|
||||
@ -378,19 +391,6 @@ static void init_blk_migration_it(void *opaque, BlockDriverState *bs)
|
||||
}
|
||||
}
|
||||
|
||||
static void init_blk_migration(QEMUFile *f)
|
||||
{
|
||||
block_mig_state.submitted = 0;
|
||||
block_mig_state.read_done = 0;
|
||||
block_mig_state.transferred = 0;
|
||||
block_mig_state.total_sector_sum = 0;
|
||||
block_mig_state.prev_progress = -1;
|
||||
block_mig_state.bulk_completed = 0;
|
||||
block_mig_state.zero_blocks = migrate_zero_blocks();
|
||||
|
||||
bdrv_iterate(init_blk_migration_it, NULL);
|
||||
}
|
||||
|
||||
/* Called with no lock taken. */
|
||||
|
||||
static int blk_mig_save_bulked_block(QEMUFile *f)
|
||||
|
9
block.c
9
block.c
@ -3906,15 +3906,6 @@ BlockDriverState *bdrv_next(BlockDriverState *bs)
|
||||
return QTAILQ_NEXT(bs, device_list);
|
||||
}
|
||||
|
||||
void bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs), void *opaque)
|
||||
{
|
||||
BlockDriverState *bs;
|
||||
|
||||
QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
|
||||
it(opaque, bs);
|
||||
}
|
||||
}
|
||||
|
||||
const char *bdrv_get_device_name(BlockDriverState *bs)
|
||||
{
|
||||
return bs->device_name;
|
||||
|
31
blockdev.c
31
blockdev.c
@ -2608,26 +2608,21 @@ fail:
|
||||
qmp_output_visitor_cleanup(ov);
|
||||
}
|
||||
|
||||
static void do_qmp_query_block_jobs_one(void *opaque, BlockDriverState *bs)
|
||||
{
|
||||
BlockJobInfoList **prev = opaque;
|
||||
BlockJob *job = bs->job;
|
||||
|
||||
if (job) {
|
||||
BlockJobInfoList *elem = g_new0(BlockJobInfoList, 1);
|
||||
elem->value = block_job_query(bs->job);
|
||||
(*prev)->next = elem;
|
||||
*prev = elem;
|
||||
}
|
||||
}
|
||||
|
||||
BlockJobInfoList *qmp_query_block_jobs(Error **errp)
|
||||
{
|
||||
/* Dummy is a fake list element for holding the head pointer */
|
||||
BlockJobInfoList dummy = {};
|
||||
BlockJobInfoList *prev = &dummy;
|
||||
bdrv_iterate(do_qmp_query_block_jobs_one, &prev);
|
||||
return dummy.next;
|
||||
BlockJobInfoList *head = NULL, **p_next = &head;
|
||||
BlockDriverState *bs;
|
||||
|
||||
for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
|
||||
if (bs->job) {
|
||||
BlockJobInfoList *elem = g_new0(BlockJobInfoList, 1);
|
||||
elem->value = block_job_query(bs->job);
|
||||
*p_next = elem;
|
||||
p_next = &elem->next;
|
||||
}
|
||||
}
|
||||
|
||||
return head;
|
||||
}
|
||||
|
||||
QemuOptsList qemu_common_drive_opts = {
|
||||
|
@ -411,8 +411,6 @@ BlockDriverState *bdrv_lookup_bs(const char *device,
|
||||
Error **errp);
|
||||
bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base);
|
||||
BlockDriverState *bdrv_next(BlockDriverState *bs);
|
||||
void bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs),
|
||||
void *opaque);
|
||||
int bdrv_is_encrypted(BlockDriverState *bs);
|
||||
int bdrv_key_required(BlockDriverState *bs);
|
||||
int bdrv_set_key(BlockDriverState *bs, const char *key);
|
||||
|
32
monitor.c
32
monitor.c
@ -4216,24 +4216,6 @@ static void file_completion(Monitor *mon, const char *input)
|
||||
closedir(ffs);
|
||||
}
|
||||
|
||||
typedef struct MonitorBlockComplete {
|
||||
Monitor *mon;
|
||||
const char *input;
|
||||
} MonitorBlockComplete;
|
||||
|
||||
static void block_completion_it(void *opaque, BlockDriverState *bs)
|
||||
{
|
||||
const char *name = bdrv_get_device_name(bs);
|
||||
MonitorBlockComplete *mbc = opaque;
|
||||
Monitor *mon = mbc->mon;
|
||||
const char *input = mbc->input;
|
||||
|
||||
if (input[0] == '\0' ||
|
||||
!strncmp(name, (char *)input, strlen(input))) {
|
||||
readline_add_completion(mon->rs, name);
|
||||
}
|
||||
}
|
||||
|
||||
static const char *next_arg_type(const char *typestr)
|
||||
{
|
||||
const char *p = strchr(typestr, ':');
|
||||
@ -4671,9 +4653,9 @@ static void monitor_find_completion_by_table(Monitor *mon,
|
||||
{
|
||||
const char *cmdname;
|
||||
int i;
|
||||
const char *ptype, *str;
|
||||
const char *ptype, *str, *name;
|
||||
const mon_cmd_t *cmd;
|
||||
MonitorBlockComplete mbs;
|
||||
BlockDriverState *bs;
|
||||
|
||||
if (nb_args <= 1) {
|
||||
/* command completion */
|
||||
@ -4725,10 +4707,14 @@ static void monitor_find_completion_by_table(Monitor *mon,
|
||||
break;
|
||||
case 'B':
|
||||
/* block device name completion */
|
||||
mbs.mon = mon;
|
||||
mbs.input = str;
|
||||
readline_set_completion_index(mon->rs, strlen(str));
|
||||
bdrv_iterate(block_completion_it, &mbs);
|
||||
for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) {
|
||||
name = bdrv_get_device_name(bs);
|
||||
if (str[0] == '\0' ||
|
||||
!strncmp(name, str, strlen(str))) {
|
||||
readline_add_completion(mon->rs, name);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 's':
|
||||
case 'S':
|
||||
|
Loading…
Reference in New Issue
Block a user