Commit 8d1b294d authored by Yu Kuai's avatar Yu Kuai Committed by Zheng Zengkai
Browse files

block: fix sleeping function called from invalid context in part_get_stat_info()

hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I57S8D


CVE: NA

--------------------------------

part_get_stat_info() call mutex_lock() inside part_stat_lock(), which
is wrong because part_stat_lock() disables preempt.

Fix the problem by hold mutex first.

Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
Reviewed-by: default avatarJason Yan <yanaijie@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent 47fea27b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1311,12 +1311,12 @@ 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)) {
		part_stat_lock();
		mutex_lock(&part_to_dev(hd)->mutex);
		part_stat_lock();
		part_set_stat_time(hd);
		*inflight = blk_mq_in_flight_with_stat(q, hd);
		mutex_unlock(&part_to_dev(hd)->mutex);
		part_stat_unlock();
		mutex_unlock(&part_to_dev(hd)->mutex);
	} else {
		*inflight = part_in_flight(hd);
	}