[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/50] block: Move BlockAcctStats into BlockBackend
From: |
Max Reitz |
Subject: |
[Qemu-devel] [PATCH 11/50] block: Move BlockAcctStats into BlockBackend |
Date: |
Mon, 26 Jan 2015 11:02:45 -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 03/50] hw/block/fdc: Implement tray status, (continued)
- [Qemu-devel] [PATCH 03/50] hw/block/fdc: Implement tray status, Max Reitz, 2015/01/26
- [Qemu-devel] [PATCH 02/50] iotests: Only create BB if necessary, Max Reitz, 2015/01/26
- [Qemu-devel] [PATCH 13/50] block: Add BlockBackendRootState, Max Reitz, 2015/01/26
- [Qemu-devel] [PATCH 14/50] block: Make some BB functions fall back to BBRS, Max Reitz, 2015/01/26
- [Qemu-devel] [PATCH 06/50] block: Add blk_is_available(), Max Reitz, 2015/01/26
- [Qemu-devel] [PATCH 12/50] block: Move I/O status and error actions into BB, Max Reitz, 2015/01/26
- [Qemu-devel] [PATCH 11/50] block: Move BlockAcctStats into BlockBackend,
Max Reitz <=
- [Qemu-devel] [PATCH 07/50] block: Make bdrv_is_inserted() recursive, Max Reitz, 2015/01/26
- [Qemu-devel] [PATCH 09/50] block: Move guest_block_size into BlockBackend, Max Reitz, 2015/01/26
- [Qemu-devel] [PATCH 20/50] blockdev: Check blk_is_available() in sn-del-int-sync, Max Reitz, 2015/01/26
- [Qemu-devel] [PATCH 21/50] blockdev: Check BB validity in internal snapshot TA, Max Reitz, 2015/01/26
- [Qemu-devel] [PATCH 16/50] block: Prepare remaining BB functions for NULL BDS, Max Reitz, 2015/01/26
- [Qemu-devel] [PATCH 22/50] blockdev: Check BB validity in drive-backup TA, Max Reitz, 2015/01/26