Patch "block: blk_queue_enter() / __bio_queue_enter() must return -EAGAIN for nowait" has been added to the 5.19-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    block: blk_queue_enter() / __bio_queue_enter() must return -EAGAIN for nowait

to the 5.19-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     block-blk_queue_enter-__bio_queue_enter-must-return-.patch
and it can be found in the queue-5.19 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 0ac8cbdacba97c6d2e6c3566e4b3d9fa9c479973
Author: Stefan Roesch <shr@xxxxxx>
Date:   Mon Sep 12 09:53:25 2022 -0700

    block: blk_queue_enter() / __bio_queue_enter() must return -EAGAIN for nowait
    
    [ Upstream commit 56f99b8d06ef1ed1c9730948f9f05ac2b930a20b ]
    
    Today blk_queue_enter() and __bio_queue_enter() return -EBUSY for the
    nowait code path. This is not correct: they should return -EAGAIN
    instead.
    
    This problem was detected by fio. The following command exposed the
    above problem:
    
    t/io_uring -p0 -d128 -b4096 -s32 -c32 -F1 -B0 -R0 -X1 -n24 -P1 -u1 -O0 /dev/ng0n1
    
    By applying the patch, the retry case is handled correctly in the slow
    path.
    
    Signed-off-by: Stefan Roesch <shr@xxxxxx>
    Fixes: bfd343aa1718 ("blk-mq: don't wait in blk_mq_queue_enter() if __GFP_WAIT isn't set")
    Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/block/blk-core.c b/block/blk-core.c
index 27fb1357ad4b..cc6fbcb6d252 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -338,7 +338,7 @@ int blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags)
 
 	while (!blk_try_enter_queue(q, pm)) {
 		if (flags & BLK_MQ_REQ_NOWAIT)
-			return -EBUSY;
+			return -EAGAIN;
 
 		/*
 		 * read pair of barrier in blk_freeze_queue_start(), we need to
@@ -368,7 +368,7 @@ int __bio_queue_enter(struct request_queue *q, struct bio *bio)
 			if (test_bit(GD_DEAD, &disk->state))
 				goto dead;
 			bio_wouldblock_error(bio);
-			return -EBUSY;
+			return -EAGAIN;
 		}
 
 		/*



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux