blk-stat: fix a few cases of missing batch flushing

Everytime we need to read ->nr_samples, we should have flushed
the batch first. The non-mq read path also needs to flush the
batch.

Signed-off-by: Jens Axboe <axboe@fb.com>
diff --git a/block/blk-stat.c b/block/blk-stat.c
index 4d01185..9b43efb 100644
--- a/block/blk-stat.c
+++ b/block/blk-stat.c
@@ -64,6 +64,9 @@
 
 		queue_for_each_hw_ctx(q, hctx, i) {
 			hctx_for_each_ctx(hctx, ctx, j) {
+				blk_stat_flush_batch(&ctx->stat[BLK_STAT_READ]);
+				blk_stat_flush_batch(&ctx->stat[BLK_STAT_WRITE]);
+
 				if (!ctx->stat[BLK_STAT_READ].nr_samples &&
 				    !ctx->stat[BLK_STAT_WRITE].nr_samples)
 					continue;
@@ -111,6 +114,8 @@
 	if (q->mq_ops)
 		blk_mq_stat_get(q, dst);
 	else {
+		blk_stat_flush_batch(&q->rq_stats[BLK_STAT_READ]);
+		blk_stat_flush_batch(&q->rq_stats[BLK_STAT_WRITE]);
 		memcpy(&dst[BLK_STAT_READ], &q->rq_stats[BLK_STAT_READ],
 				sizeof(struct blk_rq_stat));
 		memcpy(&dst[BLK_STAT_WRITE], &q->rq_stats[BLK_STAT_WRITE],
@@ -128,6 +133,9 @@
 		uint64_t newest = 0;
 
 		hctx_for_each_ctx(hctx, ctx, i) {
+			blk_stat_flush_batch(&ctx->stat[BLK_STAT_READ]);
+			blk_stat_flush_batch(&ctx->stat[BLK_STAT_WRITE]);
+
 			if (!ctx->stat[BLK_STAT_READ].nr_samples &&
 			    !ctx->stat[BLK_STAT_WRITE].nr_samples)
 				continue;