[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 15/39] block: Move BlockAcctStats into BlockBacke
From: |
Max Reitz |
Subject: |
[Qemu-devel] [PATCH v6 15/39] block: Move BlockAcctStats into BlockBackend |
Date: |
Mon, 12 Oct 2015 22:00:18 +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>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Alberto Garcia <address@hidden>
Reviewed-by: Kevin Wolf <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 baad2b4..3e13b7f 100644
--- a/block.c
+++ b/block.c
@@ -4143,14 +4143,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 7bc2eb1..a52037b 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 {
@@ -892,7 +895,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 b80044b..2fd7a1d 100644
--- a/block/io.c
+++ b/block/io.c
@@ -23,6 +23,7 @@
*/
#include "trace.h"
+#include "sysemu/block-backend.h"
#include "block/blockjob.h"
#include "block/block_int.h"
#include "block/throttle-groups.h"
@@ -1905,7 +1906,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 0360126..7c8209b 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -344,16 +344,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 f923a01..d19903a 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -621,6 +621,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 b8e1c59..f9c7ec5 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -399,9 +399,6 @@ struct BlockDriverState {
unsigned pending_reqs[2];
QLIST_ENTRY(BlockDriverState) round_robin;
- /* I/O stats (display with "info blockstats"). */
- BlockAcctStats stats;
-
/* Offset after the highest byte written to */
uint64_t wr_highest_offset;
--
2.6.1
- [Qemu-devel] [PATCH v6 01/39] block: Remove host floppy support, (continued)
- [Qemu-devel] [PATCH v6 01/39] block: Remove host floppy support, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 03/39] blockdev: Allow creation of BDS trees without BB, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 04/39] iotests: Only create BB if necessary, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 05/39] block: Make bdrv_is_inserted() return a bool, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 07/39] block: Make bdrv_is_inserted() recursive, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 08/39] block/raw_bsd: Drop raw_is_inserted(), Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 10/39] hw/block/fdc: Implement tray status, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 11/39] hw/usb-storage: Check whether BB is inserted, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 12/39] block: Fix BB AIOCB AioContext without BDS, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 13/39] block: Move guest_block_size into BlockBackend, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 15/39] block: Move BlockAcctStats into BlockBackend,
Max Reitz <=
- [Qemu-devel] [PATCH v6 16/39] block: Move I/O status and error actions into BB, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 17/39] block/throttle-groups: Make incref/decref public, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 19/39] block: Make some BB functions fall back to BBRS, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 18/39] block: Add BlockBackendRootState, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 20/39] block: Fail requests to empty BlockBackend, Max Reitz, 2015/10/12
- [Qemu-devel] [PATCH v6 24/39] blockdev: Do not create BDS for empty drive, Max Reitz, 2015/10/12