|
Jan Kara |
13cd98 |
From 5eabbf4eed4a10bc5a0b28436ed79e87d25b008b Mon Sep 17 00:00:00 2001
|
|
Jan Kara |
13cd98 |
From: Jan Kara <jack@suse.cz>
|
|
Jan Kara |
13cd98 |
Date: Wed, 5 Jan 2022 14:21:04 +0100
|
|
Jan Kara |
13cd98 |
Subject: [PATCH 4/9] bfq: Update cgroup information before merging bio
|
|
Jan Kara |
13cd98 |
References: bsc#1197926
|
|
Jan Kara |
13cd98 |
Patch-mainline: submitted, in linux-block tree
|
|
Jan Kara |
13cd98 |
|
|
Jan Kara |
13cd98 |
When the process is migrated to a different cgroup (or in case of
|
|
Jan Kara |
13cd98 |
writeback just starts submitting bios associated with a different
|
|
Jan Kara |
13cd98 |
cgroup) bfq_merge_bio() can operate with stale cgroup information in
|
|
Jan Kara |
13cd98 |
bic. Thus the bio can be merged to a request from a different cgroup or
|
|
Jan Kara |
13cd98 |
it can result in merging of bfqqs for different cgroups or bfqqs of
|
|
Jan Kara |
13cd98 |
already dead cgroups and causing possible use-after-free issues. Fix the
|
|
Jan Kara |
13cd98 |
problem by updating cgroup information in bfq_merge_bio().
|
|
Jan Kara |
13cd98 |
|
|
Jan Kara |
13cd98 |
Cc: stable@vger.kernel.org
|
|
Jan Kara |
13cd98 |
Fixes: e21b7a0b9887 ("block, bfq: add full hierarchical scheduling and cgroups support")
|
|
Jan Kara |
13cd98 |
Tested-by: "yukuai (C)" <yukuai3@huawei.com>
|
|
Jan Kara |
13cd98 |
Signed-off-by: Jan Kara <jack@suse.cz>
|
|
Jan Kara |
13cd98 |
|
|
Jan Kara |
13cd98 |
---
|
|
Jan Kara |
13cd98 |
block/bfq-iosched.c | 11 +++++++++--
|
|
Jan Kara |
13cd98 |
1 file changed, 9 insertions(+), 2 deletions(-)
|
|
Jan Kara |
13cd98 |
|
|
Jan Kara |
13cd98 |
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
|
|
Jan Kara |
13cd98 |
index 89fe3f85eb3c..1fc4d4628fba 100644
|
|
Jan Kara |
13cd98 |
--- a/block/bfq-iosched.c
|
|
Jan Kara |
13cd98 |
+++ b/block/bfq-iosched.c
|
|
Jan Kara |
13cd98 |
@@ -2457,10 +2457,17 @@ static bool bfq_bio_merge(struct request_queue *q, struct bio *bio,
|
|
Jan Kara |
13cd98 |
|
|
Jan Kara |
13cd98 |
spin_lock_irq(&bfqd->lock);
|
|
Jan Kara |
13cd98 |
|
|
Jan Kara |
13cd98 |
- if (bic)
|
|
Jan Kara |
13cd98 |
+ if (bic) {
|
|
Jan Kara |
13cd98 |
+ /*
|
|
Jan Kara |
13cd98 |
+ * Make sure cgroup info is uptodate for current process before
|
|
Jan Kara |
13cd98 |
+ * considering the merge.
|
|
Jan Kara |
13cd98 |
+ */
|
|
Jan Kara |
13cd98 |
+ bfq_bic_update_cgroup(bic, bio);
|
|
Jan Kara |
13cd98 |
+
|
|
Jan Kara |
13cd98 |
bfqd->bio_bfqq = bic_to_bfqq(bic, op_is_sync(bio->bi_opf));
|
|
Jan Kara |
13cd98 |
- else
|
|
Jan Kara |
13cd98 |
+ } else {
|
|
Jan Kara |
13cd98 |
bfqd->bio_bfqq = NULL;
|
|
Jan Kara |
13cd98 |
+ }
|
|
Jan Kara |
13cd98 |
bfqd->bio_bic = bic;
|
|
Jan Kara |
13cd98 |
|
|
Jan Kara |
13cd98 |
ret = blk_mq_sched_try_merge(q, bio, nr_segs, &free);
|
|
Jan Kara |
13cd98 |
--
|
|
Jan Kara |
13cd98 |
2.34.1
|
|
Jan Kara |
13cd98 |
|