Signed-off-by: Christoph Hellwig <h...@lst.de>
Index: qemu/block.c
===================================================================
--- qemu.orig/block.c 2011-08-11 12:32:35.842658196 +0200
+++ qemu/block.c 2011-08-11 16:04:48.302061893 +0200
@@ -1888,11 +1888,13 @@ static void bdrv_stats_iter(QObject *dat
" wr_bytes=%" PRId64
" rd_operations=%" PRId64
" wr_operations=%" PRId64
+ " flush_operations=%" PRId64
"\n",
qdict_get_int(qdict, "rd_bytes"),
qdict_get_int(qdict, "wr_bytes"),
qdict_get_int(qdict, "rd_operations"),
- qdict_get_int(qdict, "wr_operations"));
+ qdict_get_int(qdict, "wr_operations"),
+ qdict_get_int(qdict, "flush_operations"));
}
void bdrv_stats_print(Monitor *mon, const QObject *data)
@@ -1910,12 +1912,16 @@ static QObject* bdrv_info_stats_bs(Block
"'wr_bytes': %" PRId64 ","
"'rd_operations': %" PRId64 ","
"'wr_operations': %" PRId64 ","
- "'wr_highest_offset': %" PRId64
+ "'wr_highest_offset': %" PRId64 ","
+ "'flush_operations': %" PRId64
"} }",
- bs->rd_bytes, bs->wr_bytes,
- bs->rd_ops, bs->wr_ops,
+ bs->rd_bytes,
+ bs->wr_bytes,
+ bs->rd_ops,
+ bs->wr_ops,
bs->wr_highest_sector *
- (uint64_t)BDRV_SECTOR_SIZE);
+ (uint64_t)BDRV_SECTOR_SIZE,
+ bs->flush_ops);
dict = qobject_to_qdict(res);
if (*bs->device_name) {
@@ -2579,6 +2585,8 @@ BlockDriverAIOCB *bdrv_aio_flush(BlockDr
trace_bdrv_aio_flush(bs, opaque);
+ bs->flush_ops++;
+
if (bs->open_flags & BDRV_O_NO_FLUSH) {
return bdrv_aio_noop_em(bs, cb, opaque);
}
Index: qemu/block_int.h
===================================================================
--- qemu.orig/block_int.h 2011-08-11 12:32:35.852658142 +0200
+++ qemu/block_int.h 2011-08-11 16:04:48.302061893 +0200
@@ -188,6 +188,7 @@ struct BlockDriverState {
uint64_t wr_bytes;
uint64_t rd_ops;
uint64_t wr_ops;
+ uint64_t flush_ops;
uint64_t wr_highest_sector;
/* Whether the disk can expand beyond total_sectors */
Index: qemu/qmp-commands.hx
===================================================================
--- qemu.orig/qmp-commands.hx 2011-08-11 12:32:36.062657004 +0200
+++ qemu/qmp-commands.hx 2011-08-11 16:04:48.305395208 +0200
@@ -1201,6 +1201,7 @@ Each json-object contain the following:
- "wr_bytes": bytes written (json-int)
- "rd_operations": read operations (json-int)
- "wr_operations": write operations (json-int)
+ - "flush_operations": cache flush operations (json-int)
- "wr_highest_offset": Highest offset of a sector written since the
BlockDriverState has been opened (json-int)
- "parent": Contains recursively the statistics of the underlying
@@ -1222,6 +1223,7 @@ Example:
"wr_operations":751,
"rd_bytes":122567168,
"rd_operations":36772
+ "flush_operations":61,
}
},
"stats":{
@@ -1230,6 +1232,7 @@ Example:
"wr_operations":692,
"rd_bytes":122739200,
"rd_operations":36604
+ "flush_operations":51,
}
},
{
@@ -1240,6 +1243,7 @@ Example:
"wr_operations":0,
"rd_bytes":0,
"rd_operations":0
+ "flush_operations":0,
}
},
{
@@ -1250,6 +1254,7 @@ Example:
"wr_operations":0,
"rd_bytes":0,
"rd_operations":0
+ "flush_operations":0,
}
},
{
@@ -1260,6 +1265,7 @@ Example:
"wr_operations":0,
"rd_bytes":0,
"rd_operations":0
+ "flush_operations":0,
}
}
]