Commit d196e229 authored by Theodore Ts'o's avatar Theodore Ts'o
Browse files

Revert "ext4: fix superblock checksum calculation race"

This reverts commit acaa5326 which can
result in a ext4_superblock_csum_set() trying to sleep while a
spinlock is being held.

For more discussion of this issue, please see:

https://lore.kernel.org/r/000000000000f50cb705b313ed70@google.com



Reported-by: default avatar <syzbot+7a4ba6a239b91a126c28@syzkaller.appspotmail.com>
Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent a72b38ee
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
@@ -289,18 +289,7 @@ void ext4_superblock_csum_set(struct super_block *sb)
	if (!ext4_has_metadata_csum(sb))
		return;

	/*
	 * Locking the superblock prevents the scenario
	 * where:
	 *  1) a first thread pauses during checksum calculation.
	 *  2) a second thread updates the superblock, recalculates
	 *     the checksum, and updates s_checksum
	 *  3) the first thread resumes and finishes its checksum calculation
	 *     and updates s_checksum with a potentially stale or torn value.
	 */
	lock_buffer(EXT4_SB(sb)->s_sbh);
	es->s_checksum = ext4_superblock_csum(sb, es);
	unlock_buffer(EXT4_SB(sb)->s_sbh);
}

ext4_fsblk_t ext4_block_bitmap(struct super_block *sb,