[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 14/38] block: Move BlockAcctStats into BlockBacke
From: |
Max Reitz |
Subject: |
[Qemu-devel] [PATCH v3 14/38] block: Move BlockAcctStats into BlockBackend |
Date: |
Wed, 3 Jun 2015 21:43:55 +0200 |
As the comment above bdrv_get_stats() says, BlockAcctStats is something
which belongs to the device instead of each BlockDriverState. This patch
therefore moves it into the BlockBackend.
Signed-off-by: Max Reitz <address@hidden>
---
block.c | 11 -----------
block/block-backend.c | 5 ++++-
block/io.c | 6 +++++-
block/qapi.c | 24 ++++++++++++++----------
include/block/block.h | 2 --
include/block/block_int.h | 3 ---
6 files changed, 23 insertions(+), 28 deletions(-)
diff --git a/block.c b/block.c
index dbfd4c7..c06eb38 100644
--- a/block.c
+++ b/block.c
@@ -4009,14 +4009,3 @@ void bdrv_refresh_filename(BlockDriverState *bs)
QDECREF(json);
}
}
-
-/* This accessor function purpose is to allow the device models to access the
- * BlockAcctStats structure embedded inside a BlockDriverState without being
- * aware of the BlockDriverState structure layout.
- * It will go away when the BlockAcctStats structure will be moved inside
- * the device models.
- */
-BlockAcctStats *bdrv_get_stats(BlockDriverState *bs)
-{
- return &bs->stats;
-}
diff --git a/block/block-backend.c b/block/block-backend.c
index 163d329..d036070 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -34,6 +34,9 @@ struct BlockBackend {
/* the block size for which the guest device expects atomicity */
int guest_block_size;
+
+ /* I/O stats (display with "info blockstats"). */
+ BlockAcctStats stats;
};
typedef struct BlockBackendAIOCB {
@@ -870,7 +873,7 @@ void blk_io_unplug(BlockBackend *blk)
BlockAcctStats *blk_get_stats(BlockBackend *blk)
{
- return bdrv_get_stats(blk->bs);
+ return &blk->stats;
}
void *blk_aio_get(const AIOCBInfo *aiocb_info, BlockBackend *blk,
diff --git a/block/io.c b/block/io.c
index 110c5d1..3461ed0 100644
--- a/block/io.c
+++ b/block/io.c
@@ -24,6 +24,7 @@
#include "trace.h"
#include "sysemu/qtest.h"
+#include "sysemu/block-backend.h"
#include "block/blockjob.h"
#include "block/block_int.h"
@@ -1890,7 +1891,10 @@ static int multiwrite_merge(BlockDriverState *bs,
BlockRequest *reqs,
}
}
- block_acct_merge_done(&bs->stats, BLOCK_ACCT_WRITE, num_reqs - outidx - 1);
+ if (bs->blk) {
+ block_acct_merge_done(blk_get_stats(bs->blk), BLOCK_ACCT_WRITE,
+ num_reqs - outidx - 1);
+ }
return outidx + 1;
}
diff --git a/block/qapi.c b/block/qapi.c
index aed5ab3..2850f82 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -338,16 +338,20 @@ static BlockStats *bdrv_query_stats(const
BlockDriverState *bs,
}
s->stats = g_malloc0(sizeof(*s->stats));
- s->stats->rd_bytes = bs->stats.nr_bytes[BLOCK_ACCT_READ];
- s->stats->wr_bytes = bs->stats.nr_bytes[BLOCK_ACCT_WRITE];
- s->stats->rd_operations = bs->stats.nr_ops[BLOCK_ACCT_READ];
- s->stats->wr_operations = bs->stats.nr_ops[BLOCK_ACCT_WRITE];
- s->stats->rd_merged = bs->stats.merged[BLOCK_ACCT_READ];
- s->stats->wr_merged = bs->stats.merged[BLOCK_ACCT_WRITE];
- s->stats->flush_operations = bs->stats.nr_ops[BLOCK_ACCT_FLUSH];
- s->stats->wr_total_time_ns = bs->stats.total_time_ns[BLOCK_ACCT_WRITE];
- s->stats->rd_total_time_ns = bs->stats.total_time_ns[BLOCK_ACCT_READ];
- s->stats->flush_total_time_ns = bs->stats.total_time_ns[BLOCK_ACCT_FLUSH];
+ if (bs->blk) {
+ BlockAcctStats *stats = blk_get_stats(bs->blk);
+
+ s->stats->rd_bytes = stats->nr_bytes[BLOCK_ACCT_READ];
+ s->stats->wr_bytes = stats->nr_bytes[BLOCK_ACCT_WRITE];
+ s->stats->rd_operations = stats->nr_ops[BLOCK_ACCT_READ];
+ s->stats->wr_operations = stats->nr_ops[BLOCK_ACCT_WRITE];
+ s->stats->rd_merged = stats->merged[BLOCK_ACCT_READ];
+ s->stats->wr_merged = stats->merged[BLOCK_ACCT_WRITE];
+ s->stats->flush_operations = stats->nr_ops[BLOCK_ACCT_FLUSH];
+ s->stats->wr_total_time_ns = stats->total_time_ns[BLOCK_ACCT_WRITE];
+ s->stats->rd_total_time_ns = stats->total_time_ns[BLOCK_ACCT_READ];
+ s->stats->flush_total_time_ns = stats->total_time_ns[BLOCK_ACCT_FLUSH];
+ }
s->stats->wr_highest_offset = bs->wr_highest_offset;
diff --git a/include/block/block.h b/include/block/block.h
index e6a8610..248e00c 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -591,6 +591,4 @@ void bdrv_io_plug(BlockDriverState *bs);
void bdrv_io_unplug(BlockDriverState *bs);
void bdrv_flush_io_queue(BlockDriverState *bs);
-BlockAcctStats *bdrv_get_stats(BlockDriverState *bs);
-
#endif
diff --git a/include/block/block_int.h b/include/block/block_int.h
index ca3dad6..2820d04 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -383,9 +383,6 @@ struct BlockDriverState {
CoQueue throttled_reqs[2];
bool io_limits_enabled;
- /* I/O stats (display with "info blockstats"). */
- BlockAcctStats stats;
-
/* Offset after the highest byte written to */
uint64_t wr_highest_offset;
--
2.4.1
- [Qemu-devel] [PATCH v3 09/38] hw/block/fdc: Implement tray status, (continued)
- [Qemu-devel] [PATCH v3 09/38] hw/block/fdc: Implement tray status, Max Reitz, 2015/06/03
- [Qemu-devel] [PATCH v3 11/38] block: Fix BB AIOCB AioContext without BDS, Max Reitz, 2015/06/03
- [Qemu-devel] [PATCH v3 12/38] block: Move guest_block_size into BlockBackend, Max Reitz, 2015/06/03
- [Qemu-devel] [PATCH v3 13/38] block: Remove wr_highest_sector from BlockAcctStats, Max Reitz, 2015/06/03
- [Qemu-devel] [PATCH v3 14/38] block: Move BlockAcctStats into BlockBackend,
Max Reitz <=
- Re: [Qemu-devel] [Qemu-block] [PATCH v3 14/38] block: Move BlockAcctStats into BlockBackend, Alberto Garcia, 2015/06/05
- [Qemu-devel] [PATCH v3 16/38] block: Add BlockBackendRootState, Max Reitz, 2015/06/03
- [Qemu-devel] [PATCH v3 15/38] block: Move I/O status and error actions into BB, Max Reitz, 2015/06/03
- [Qemu-devel] [PATCH v3 17/38] block: Make some BB functions fall back to BBRS, Max Reitz, 2015/06/03
- [Qemu-devel] [PATCH v3 18/38] block: Fail requests to empty BlockBackend, Max Reitz, 2015/06/03
- [Qemu-devel] [PATCH v3 20/38] block: Add blk_insert_bs(), Max Reitz, 2015/06/03