linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ext4: don't set SB_RDONLY after filesystem errors
@ 2024-08-05 20:12 Jan Kara
  2024-08-06 10:50 ` Christian Brauner
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Jan Kara @ 2024-08-05 20:12 UTC (permalink / raw)
  To: Ted Tso; +Cc: linux-ext4, Christian Brauner, linux-fsdevel, Jan Kara

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@google.com
Reported-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/ext4/super.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

Note that this patch introduces fstests failure with generic/459 test because
it assumes that either freezing succeeds or 'ro' is among mount options. But
we fail the freeze with EFSCORRUPTED. This needs fixing in the test but at this
point I'm not sure how exactly.

diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index e72145c4ae5a..93c016b186c0 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)
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2024-10-06  3:38 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-05 20:12 [PATCH] ext4: don't set SB_RDONLY after filesystem errors Jan Kara
2024-08-06 10:50 ` Christian Brauner
2024-08-08 16:16 ` Jan Kara
2024-08-27 12:47 ` Theodore Ts'o
2024-09-30 10:15 ` Jan Stancek
2024-09-30 11:34   ` Jan Kara
2024-10-04 12:32     ` [LTP] " Amir Goldstein
2024-10-04 12:50       ` Jan Stancek
2024-10-04 13:28         ` Amir Goldstein
2024-10-04 14:31           ` Jan Kara
2024-10-04 19:33       ` Gabriel Krisman Bertazi
2024-10-06  3:38         ` Theodore Ts'o

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).