[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH RESEND 11/50] block: Move BlockAcctStats into BlockB
From: |
Max Reitz |
Subject: |
[Qemu-devel] [PATCH RESEND 11/50] block: Move BlockAcctStats into BlockBackend |
Date: |
Tue, 27 Jan 2015 14:45:44 -0500 |
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/qapi.c | 20 ++++++++++++--------
include/block/block.h | 2 --
include/block/block_int.h | 3 ---
5 files changed, 16 insertions(+), 25 deletions(-)
diff --git a/block.c b/block.c
index 5db71c6..17e4ee3 100644
--- a/block.c
+++ b/block.c
@@ -6119,14 +6119,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 bf0fcc9..3d565d8 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 {
@@ -849,7 +852,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/qapi.c b/block/qapi.c
index 4e97574..7840c81 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -334,14 +334,18 @@ 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->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->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_sector * BDRV_SECTOR_SIZE;
diff --git a/include/block/block.h b/include/block/block.h
index df656db..8cd6b31 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -550,6 +550,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 e309d8a..d023913 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -363,9 +363,6 @@ struct BlockDriverState {
CoQueue throttled_reqs[2];
bool io_limits_enabled;
- /* I/O stats (display with "info blockstats"). */
- BlockAcctStats stats;
-
/* Highest sector index written to */
uint64_t wr_highest_sector;
--
2.1.0
- [Qemu-devel] [PATCH RESEND 00/50] blockdev: BlockBackend and media, Max Reitz, 2015/01/27
- [Qemu-devel] [PATCH RESEND 04/50] hw/usb-storage: Check whether BB is inserted, Max Reitz, 2015/01/27
- [Qemu-devel] [PATCH RESEND 05/50] block: Fix BB AIOCB AioContext without BDS, Max Reitz, 2015/01/27
- [Qemu-devel] [PATCH RESEND 06/50] block: Add blk_is_available(), Max Reitz, 2015/01/27
- [Qemu-devel] [PATCH RESEND 07/50] block: Make bdrv_is_inserted() recursive, Max Reitz, 2015/01/27
- [Qemu-devel] [PATCH RESEND 02/50] iotests: Only create BB if necessary, Max Reitz, 2015/01/27
- [Qemu-devel] [PATCH RESEND 08/50] block/quorum: Implement bdrv_is_inserted(), Max Reitz, 2015/01/27
- [Qemu-devel] [PATCH RESEND 11/50] block: Move BlockAcctStats into BlockBackend,
Max Reitz <=
- [Qemu-devel] [PATCH RESEND 12/50] block: Move I/O status and error actions into BB, Max Reitz, 2015/01/27
- [Qemu-devel] [PATCH RESEND 09/50] block: Move guest_block_size into BlockBackend, Max Reitz, 2015/01/27
- [Qemu-devel] [PATCH RESEND 18/50] block: Respect empty BB in bdrv_query_info(), Max Reitz, 2015/01/27
- [Qemu-devel] [PATCH RESEND 16/50] block: Prepare remaining BB functions for NULL BDS, Max Reitz, 2015/01/27
- [Qemu-devel] [PATCH RESEND 10/50] block: Remove wr_highest_offset from BlockAcctStats, Max Reitz, 2015/01/27