832a4d4cdb3f612d5079aadcc67a44f18fa7b5b7 <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=832a4d4cdb3f612d5079aadcc67a44f18fa7b5b7> in 5.10 did the patch back from 2112f5c1330a671fa852051d85cb9eadc05d7eb7 <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=2112f5c1330a671fa852051d85cb9eadc05d7eb7> in upstream.

2112f5c1330a671fa852051d85cb9eadc05d7eb7 <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=2112f5c1330a671fa852051d85cb9eadc05d7eb7> add BLK_MQ_F_NO_SCHED_BY_DEFAULT to tag_set.flags in loop device in the upstream, but

832a4d4cdb3f612d5079aadcc67a44f18fa7b5b7 <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=832a4d4cdb3f612d5079aadcc67a44f18fa7b5b7> add  BLK_MQ_F_NO_SCHED                      to tag_set.flags in loop device in the 5.10.

this backport cause elv_support_iosched return false, then loop device get no scheduler. As shown in the following record:

   root@intel-x86-64:~# cat /sys/block/sda/queue/scheduler
   [mq-deadline] kyber bfq none
   root@intel-x86-64:~# cat /sys/block/loop2/queue/scheduler
   [none]

To solve this problem, we can backport the patch from upstream correctly, or revert 832a4d4cdb3f612d5079aadcc67a44f18fa7b5b7 <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=832a4d4cdb3f612d5079aadcc67a44f18fa7b5b7>.

The loop device gets schedulers after applying the patch I submitted.
I did the test in intel-x86-64 with linux-yocto, qemux86-64 with linux-yocto and qemux86-64 with linux-yocto-rt.
The test steps includes boot and "cat /sys/block/loop*/queue/scheduler".

On 2024-03-13 10:59, Bruce Ashfield wrote:
CAUTION: This email comes from a non Wind River email account!
Do not click links or open attachments unless you recognize the sender and know 
the content is safe.

Since this is requested for the common branches and
hence all BSPs (This is the right place for a patch
like this) ... can you provide some extra context
about how they were identified (and tested).

Similar to my earlier comment, these in theory should
be nominated for -stable.

Bruce

In message: [linux-yocto][v5.10/standard/base && 
v5.10/standard/preempt-rt/base][PATCH  1/2]  blk-mq: Introduce the 
BLK_MQ_F_NO_SCHED_BY_DEFAULT flag
on 12/03/2024 Wentao Zhang wrote:

From: Bart Van Assche<[email protected]>

commit 90b7198001f23ea37d3b46dc631bdaa2357a20b1 upstream.

elevator_get_default() uses the following algorithm to select an I/O
scheduler from inside add_disk():
- In case of a single hardware queue or if sharing hardware queues across
   multiple request queues (BLK_MQ_F_TAG_HCTX_SHARED), use mq-deadline.
- Otherwise, use 'none'.

This is a good choice for most but not for all block drivers. Make it
possible to override the selection of mq-deadline with a new flag,
namely BLK_MQ_F_NO_SCHED_BY_DEFAULT.

Cc: Christoph Hellwig<[email protected]>
Cc: Ming Lei<[email protected]>
Cc: Tetsuo Handa<[email protected]>
Cc: Martijn Coenen<[email protected]>
Cc: Jaegeuk Kim<[email protected]>
Signed-off-by: Bart Van Assche<[email protected]>
Link:https://lore.kernel.org/r/[email protected]
Signed-off-by: Jens Axboe<[email protected]>
Signed-off-by: Wentao Zhang<[email protected]>
---
  block/elevator.c       | 3 +++
  include/linux/blk-mq.h | 6 ++++++
  2 files changed, 9 insertions(+)

diff --git a/block/elevator.c b/block/elevator.c
index 2f962662c32a..f762b2af1d2a 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -622,6 +622,9 @@ static inline bool elv_support_iosched(struct request_queue 
*q)
   */
  static struct elevator_type *elevator_get_default(struct request_queue *q)
  {
+     if (q->tag_set && q->tag_set->flags & BLK_MQ_F_NO_SCHED_BY_DEFAULT)
+             return NULL;
+
       if (q->nr_hw_queues != 1)
               return NULL;

diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index f8ea27423d1d..39526279fbd3 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -398,7 +398,13 @@ enum {
       BLK_MQ_F_STACKING       = 1 << 2,
       BLK_MQ_F_TAG_HCTX_SHARED = 1 << 3,
       BLK_MQ_F_BLOCKING       = 1 << 5,
+     /* Do not allow an I/O scheduler to be configured. */
       BLK_MQ_F_NO_SCHED       = 1 << 6,
+     /*
+      * Select 'none' during queue registration in case of a single hwq
+      * or shared hwqs instead of 'mq-deadline'.
+      */
+     BLK_MQ_F_NO_SCHED_BY_DEFAULT    = 1 << 7,
       BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
       BLK_MQ_F_ALLOC_POLICY_BITS = 1,

--
2.31.1

--
☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮
☮ Wentao Zhang
☮ Wind River Linux
☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮☮
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#13679): 
https://lists.yoctoproject.org/g/linux-yocto/message/13679
Mute This Topic: https://lists.yoctoproject.org/mt/104880299/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to