Patch "md/raid5: Ensure stripe_fill happens on non-read IO with journal" has been added to the 5.15-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

    md/raid5: Ensure stripe_fill happens on non-read IO with journal

to the 5.15-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:
     md-raid5-ensure-stripe_fill-happens-on-non-read-io-w.patch
and it can be found in the queue-5.15 subdirectory.

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



commit c867909009873e62155c82758b6f8bd23d78a89f
Author: Logan Gunthorpe <logang@xxxxxxxxxxxx>
Date:   Thu Aug 25 09:46:27 2022 -0600

    md/raid5: Ensure stripe_fill happens on non-read IO with journal
    
    [ Upstream commit e2eed85bc75138a9eeb63863d20f8904ac42a577 ]
    
    When doing degrade/recover tests using the journal a kernel BUG
    is hit at drivers/md/raid5.c:4381 in handle_parity_checks5():
    
      BUG_ON(!test_bit(R5_UPTODATE, &dev->flags));
    
    This was found to occur because handle_stripe_fill() was skipped
    for stripes in the journal due to a condition in that function.
    Thus blocks were not fetched and R5_UPTODATE was not set when
    the code reached handle_parity_checks5().
    
    To fix this, don't skip handle_stripe_fill() unless the stripe is
    for read.
    
    Fixes: 07e83364845e ("md/r5cache: shift complex rmw from read path to write path")
    Link: https://lore.kernel.org/linux-raid/e05c4239-41a9-d2f7-3cfa-4aa9d2cea8c1@xxxxxxxxxxxx/
    Suggested-by: Song Liu <song@xxxxxxxxxx>
    Signed-off-by: Logan Gunthorpe <logang@xxxxxxxxxxxx>
    Signed-off-by: Song Liu <song@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 1b2f6e62507d..7a2cc1ec532b 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -3933,7 +3933,7 @@ static void handle_stripe_fill(struct stripe_head *sh,
 		 * back cache (prexor with orig_page, and then xor with
 		 * page) in the read path
 		 */
-		if (s->injournal && s->failed) {
+		if (s->to_read && s->injournal && s->failed) {
 			if (test_bit(STRIPE_R5C_CACHING, &sh->state))
 				r5c_make_stripe_write_out(sh);
 			goto out;



[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