]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 5 Aug 2023 15:28:48 +0000 (17:28 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 5 Aug 2023 15:28:48 +0000 (17:28 +0200)
added patches:
loop-select-i-o-scheduler-none-from-inside-add_disk.patch

queue-4.19/loop-select-i-o-scheduler-none-from-inside-add_disk.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/loop-select-i-o-scheduler-none-from-inside-add_disk.patch b/queue-4.19/loop-select-i-o-scheduler-none-from-inside-add_disk.patch
new file mode 100644 (file)
index 0000000..61a693b
--- /dev/null
@@ -0,0 +1,53 @@
+From 2112f5c1330a671fa852051d85cb9eadc05d7eb7 Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bvanassche@acm.org>
+Date: Thu, 5 Aug 2021 10:42:00 -0700
+Subject: loop: Select I/O scheduler 'none' from inside add_disk()
+
+From: Bart Van Assche <bvanassche@acm.org>
+
+commit 2112f5c1330a671fa852051d85cb9eadc05d7eb7 upstream.
+
+We noticed that the user interface of Android devices becomes very slow
+under memory pressure. This is because Android uses the zram driver on top
+of the loop driver for swapping, because under memory pressure the swap
+code alternates reads and writes quickly, because mq-deadline is the
+default scheduler for loop devices and because mq-deadline delays writes by
+five seconds for such a workload with default settings. Fix this by making
+the kernel select I/O scheduler 'none' from inside add_disk() for loop
+devices. This default can be overridden at any time from user space,
+e.g. via a udev rule. This approach has an advantage compared to changing
+the I/O scheduler from userspace from 'mq-deadline' into 'none', namely
+that synchronize_rcu() does not get called.
+
+This patch changes the default I/O scheduler for loop devices from
+'mq-deadline' into 'none'.
+
+Additionally, this patch reduces the Android boot time on my test setup
+with 0.5 seconds compared to configuring the loop I/O scheduler from user
+space.
+
+Cc: Christoph Hellwig <hch@lst.de>
+Cc: Ming Lei <ming.lei@redhat.com>
+Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
+Cc: Martijn Coenen <maco@android.com>
+Cc: Jaegeuk Kim <jaegeuk@kernel.org>
+Signed-off-by: Bart Van Assche <bvanassche@acm.org>
+Link: https://lore.kernel.org/r/20210805174200.3250718-3-bvanassche@acm.org
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/block/loop.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/block/loop.c
++++ b/drivers/block/loop.c
+@@ -1991,7 +1991,8 @@ static int loop_add(struct loop_device *
+       lo->tag_set.queue_depth = 128;
+       lo->tag_set.numa_node = NUMA_NO_NODE;
+       lo->tag_set.cmd_size = sizeof(struct loop_cmd);
+-      lo->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_SG_MERGE;
++      lo->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_SG_MERGE |
++              BLK_MQ_F_NO_SCHED;
+       lo->tag_set.driver_data = lo;
+       err = blk_mq_alloc_tag_set(&lo->tag_set);
index d05f0a6c29b24c86831e55d469121301bf53399c..fa8dfad966f006035f452209e790591d696ff1d5 100644 (file)
@@ -285,3 +285,4 @@ net-sched-sch_qfq-account-for-stab-overhead-in-qfq_enqueue.patch
 asoc-cs42l51-fix-driver-to-properly-autoload-with-automatic-module-loading.patch
 net-sched-cls_u32-fix-reference-counter-leak-leading-to-overflow.patch
 perf-fix-function-pointer-case.patch
+loop-select-i-o-scheduler-none-from-inside-add_disk.patch