diff --git a/block/blk-mq.c b/block/blk-mq.c index 5a9c02d0199cb2296ec1e70ab4243be0676d1a84..05694bd216d18dd95b798cff393ac8c9b3da89f3 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -141,7 +141,9 @@ static bool blk_mq_check_inflight_with_stat(struct blk_mq_hw_ctx *hctx, rq->part->stat_time - stat_time : rq->part->stat_time - rq->start_time_ns; + part_stat_lock(); part_stat_add(rq->part, nsecs[sgrp], duation); + part_stat_unlock(); } } diff --git a/block/genhd.c b/block/genhd.c index 1f358495e21820aa24b308b1986f474b1f9abd70..b2b33ac21a4a08be108c6088d7a45750e1d8e77b 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -1432,10 +1432,8 @@ static void part_get_stat_info(struct hd_struct *hd, struct disk_stats *stat, struct request_queue *q = part_to_disk(hd)->queue; if (queue_is_mq(q)) { mutex_lock(&part_to_dev(hd)->mutex); - part_stat_lock(); part_set_stat_time(hd); *inflight = blk_mq_in_flight_with_stat(q, hd); - part_stat_unlock(); mutex_unlock(&part_to_dev(hd)->mutex); } else { *inflight = part_in_flight(hd);