From: Greg Kroah-Hartman Date: Sat, 5 Aug 2023 15:28:31 +0000 (+0200) Subject: 4.14-stable patches X-Git-Tag: v4.14.321~58 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f3ac411cdd425a965bb828b4825eb44a7d5e274b;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: loop-select-i-o-scheduler-none-from-inside-add_disk.patch --- diff --git a/queue-4.14/loop-select-i-o-scheduler-none-from-inside-add_disk.patch b/queue-4.14/loop-select-i-o-scheduler-none-from-inside-add_disk.patch new file mode 100644 index 00000000000..e49971c587b --- /dev/null +++ b/queue-4.14/loop-select-i-o-scheduler-none-from-inside-add_disk.patch @@ -0,0 +1,53 @@ +From 2112f5c1330a671fa852051d85cb9eadc05d7eb7 Mon Sep 17 00:00:00 2001 +From: Bart Van Assche +Date: Thu, 5 Aug 2021 10:42:00 -0700 +Subject: loop: Select I/O scheduler 'none' from inside add_disk() + +From: Bart Van Assche + +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 +Cc: Ming Lei +Cc: Tetsuo Handa +Cc: Martijn Coenen +Cc: Jaegeuk Kim +Signed-off-by: Bart Van Assche +Link: https://lore.kernel.org/r/20210805174200.3250718-3-bvanassche@acm.org +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + drivers/block/loop.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/block/loop.c ++++ b/drivers/block/loop.c +@@ -1846,7 +1846,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_BY_DEFAULT; + lo->tag_set.driver_data = lo; + + err = blk_mq_alloc_tag_set(&lo->tag_set); diff --git a/queue-4.14/series b/queue-4.14/series index 79c280e44ae..6503ad7cc58 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -179,3 +179,4 @@ net-sched-cls_fw-fix-improper-refcount-update-leads-to-use-after-free.patch net-sched-sch_qfq-account-for-stab-overhead-in-qfq_enqueue.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