Patch "btrfs: raid56: properly handle the error when unable to find the missing stripe" has been added to the 6.0-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

    btrfs: raid56: properly handle the error when unable to find the missing stripe

to the 6.0-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:
     btrfs-raid56-properly-handle-the-error-when-unable-t.patch
and it can be found in the queue-6.0 subdirectory.

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



commit 7310e15a7b0a129a46a8736fc37c669b7d5241cd
Author: Qu Wenruo <wqu@xxxxxxxx>
Date:   Mon Oct 10 18:36:06 2022 +0800

    btrfs: raid56: properly handle the error when unable to find the missing stripe
    
    [ Upstream commit f15fb2cd979a07fbfc666e2f04b8b30ec9233b2a ]
    
    In raid56_alloc_missing_rbio(), if we can not determine where the
    missing device is inside the full stripe, we just BUG_ON().
    
    This is not necessary especially the only caller inside scrub.c is
    already properly checking the return value, and will treat it as a
    memory allocation failure.
    
    Fix the error handling by:
    
    - Add an extra warning for the reason
      Although personally speaking it may be better to be an ASSERT().
    
    - Properly free the allocated rbio
    
    Signed-off-by: Qu Wenruo <wqu@xxxxxxxx>
    Signed-off-by: David Sterba <dsterba@xxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c
index 2feb5c20641a..a21b9e085d1b 100644
--- a/fs/btrfs/raid56.c
+++ b/fs/btrfs/raid56.c
@@ -2767,8 +2767,10 @@ raid56_alloc_missing_rbio(struct bio *bio, struct btrfs_io_context *bioc)
 
 	rbio->faila = find_logical_bio_stripe(rbio, bio);
 	if (rbio->faila == -1) {
-		BUG();
-		kfree(rbio);
+		btrfs_warn_rl(fs_info,
+	"can not determine the failed stripe number for full stripe %llu",
+			      bioc->raid_map[0]);
+		__free_raid_bio(rbio);
 		return NULL;
 	}
 



[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