Patch "ext4: don't set SB_RDONLY after filesystem errors" has been added to the 6.11-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

    ext4: don't set SB_RDONLY after filesystem errors

to the 6.11-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:
     ext4-don-t-set-sb_rdonly-after-filesystem-errors.patch
and it can be found in the queue-6.11 subdirectory.

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



commit 8509585dc897560fd498c5195b4c94e5561a6dd1
Author: Jan Kara <jack@xxxxxxx>
Date:   Mon Aug 5 22:12:41 2024 +0200

    ext4: don't set SB_RDONLY after filesystem errors
    
    [ Upstream commit d3476f3dad4ad68ae5f6b008ea6591d1520da5d8 ]
    
    When the filesystem is mounted with errors=remount-ro, we were setting
    SB_RDONLY flag to stop all filesystem modifications. We knew this misses
    proper locking (sb->s_umount) and does not go through proper filesystem
    remount procedure but it has been the way this worked since early ext2
    days and it was good enough for catastrophic situation damage
    mitigation. Recently, syzbot has found a way (see link) to trigger
    warnings in filesystem freezing because the code got confused by
    SB_RDONLY changing under its hands. Since these days we set
    EXT4_FLAGS_SHUTDOWN on the superblock which is enough to stop all
    filesystem modifications, modifying SB_RDONLY shouldn't be needed. So
    stop doing that.
    
    Link: https://lore.kernel.org/all/000000000000b90a8e061e21d12f@xxxxxxxxxx
    Reported-by: Christian Brauner <brauner@xxxxxxxxxx>
    Signed-off-by: Jan Kara <jack@xxxxxxx>
    Reviewed-by: Christian Brauner <brauner@xxxxxxxxxx>
    Link: https://patch.msgid.link/20240805201241.27286-1-jack@xxxxxxx
    Signed-off-by: Theodore Ts'o <tytso@xxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 687d406f47a92..cd3328b031534 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -735,11 +735,12 @@ static void ext4_handle_error(struct super_block *sb, bool force_ro, int error,
 
 	ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only");
 	/*
-	 * Make sure updated value of ->s_mount_flags will be visible before
-	 * ->s_flags update
+	 * EXT4_FLAGS_SHUTDOWN was set which stops all filesystem
+	 * modifications. We don't set SB_RDONLY because that requires
+	 * sb->s_umount semaphore and setting it without proper remount
+	 * procedure is confusing code such as freeze_super() leading to
+	 * deadlocks and other problems.
 	 */
-	smp_wmb();
-	sb->s_flags |= SB_RDONLY;
 }
 
 static void update_super_work(struct work_struct *work)




[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