block: split BlockAcctStats creation and setup
block_acct_destroy is called unconditionally in blk_delete, but there is no BlockAcctStats function that is called unconditionally in blk_new. Split block_acct_init in two, so that it will be possible to create a QemuMutex in block_acct_init and destroy it in block_acct_cleanup. Cc: Alberto Garcia <berto@igalia.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20170605123908.18777-19-pbonzini@redhat.com> Reviewed-by: Alberto Garcia <berto@igalia.com> Signed-off-by: Fam Zheng <famz@redhat.com>
This commit is contained in:
parent
39c1b4254e
commit
9caa6f3dbe
@ -32,15 +32,18 @@
|
|||||||
static QEMUClockType clock_type = QEMU_CLOCK_REALTIME;
|
static QEMUClockType clock_type = QEMU_CLOCK_REALTIME;
|
||||||
static const int qtest_latency_ns = NANOSECONDS_PER_SECOND / 1000;
|
static const int qtest_latency_ns = NANOSECONDS_PER_SECOND / 1000;
|
||||||
|
|
||||||
void block_acct_init(BlockAcctStats *stats, bool account_invalid,
|
void block_acct_init(BlockAcctStats *stats)
|
||||||
|
{
|
||||||
|
if (qtest_enabled()) {
|
||||||
|
clock_type = QEMU_CLOCK_VIRTUAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void block_acct_setup(BlockAcctStats *stats, bool account_invalid,
|
||||||
bool account_failed)
|
bool account_failed)
|
||||||
{
|
{
|
||||||
stats->account_invalid = account_invalid;
|
stats->account_invalid = account_invalid;
|
||||||
stats->account_failed = account_failed;
|
stats->account_failed = account_failed;
|
||||||
|
|
||||||
if (qtest_enabled()) {
|
|
||||||
clock_type = QEMU_CLOCK_VIRTUAL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void block_acct_cleanup(BlockAcctStats *stats)
|
void block_acct_cleanup(BlockAcctStats *stats)
|
||||||
|
@ -219,6 +219,7 @@ BlockBackend *blk_new(uint64_t perm, uint64_t shared_perm)
|
|||||||
qemu_co_mutex_init(&blk->public.throttled_reqs_lock);
|
qemu_co_mutex_init(&blk->public.throttled_reqs_lock);
|
||||||
qemu_co_queue_init(&blk->public.throttled_reqs[0]);
|
qemu_co_queue_init(&blk->public.throttled_reqs[0]);
|
||||||
qemu_co_queue_init(&blk->public.throttled_reqs[1]);
|
qemu_co_queue_init(&blk->public.throttled_reqs[1]);
|
||||||
|
block_acct_init(&blk->stats);
|
||||||
|
|
||||||
notifier_list_init(&blk->remove_bs_notifiers);
|
notifier_list_init(&blk->remove_bs_notifiers);
|
||||||
notifier_list_init(&blk->insert_bs_notifiers);
|
notifier_list_init(&blk->insert_bs_notifiers);
|
||||||
|
@ -595,7 +595,7 @@ static BlockBackend *blockdev_init(const char *file, QDict *bs_opts,
|
|||||||
autostart = 0;
|
autostart = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
block_acct_init(blk_get_stats(blk), account_invalid, account_failed);
|
block_acct_setup(blk_get_stats(blk), account_invalid, account_failed);
|
||||||
|
|
||||||
if (!parse_stats_intervals(blk_get_stats(blk), interval_list, errp)) {
|
if (!parse_stats_intervals(blk_get_stats(blk), interval_list, errp)) {
|
||||||
blk_unref(blk);
|
blk_unref(blk);
|
||||||
|
@ -61,7 +61,8 @@ typedef struct BlockAcctCookie {
|
|||||||
enum BlockAcctType type;
|
enum BlockAcctType type;
|
||||||
} BlockAcctCookie;
|
} BlockAcctCookie;
|
||||||
|
|
||||||
void block_acct_init(BlockAcctStats *stats, bool account_invalid,
|
void block_acct_init(BlockAcctStats *stats);
|
||||||
|
void block_acct_setup(BlockAcctStats *stats, bool account_invalid,
|
||||||
bool account_failed);
|
bool account_failed);
|
||||||
void block_acct_cleanup(BlockAcctStats *stats);
|
void block_acct_cleanup(BlockAcctStats *stats);
|
||||||
void block_acct_add_interval(BlockAcctStats *stats, unsigned interval_length);
|
void block_acct_add_interval(BlockAcctStats *stats, unsigned interval_length);
|
||||||
|
Loading…
Reference in New Issue
Block a user