[PATCH] fs: ext4: skip journal state if fs has metadata_csum

Marek Szyprowski m.szyprowski at samsung.com
Wed Apr 22 12:56:36 CEST 2020


On 22.04.2020 12:43, Arnaud Ferraris wrote:
> As u-boot doesn't support the metadata_csum feature, writing to a
> filesystem with this feature enabled will fail, as expected. However,
> during the process, a journal state check is performed, which could
> result in:
>    - a fs recovery if the fs wasn't umounted properly
>    - the fs being marked dirty
>
> Both these cases result in a superblock change, leading to a mismatch
> between the superblock checksum and its contents. Therefore, Linux will
> consider the filesystem heavily corrupted and will require e2fsck to be
> run manually to boot.
>
> By bypassing the journal state check, this patch ensures the superblock
> won't be corrupted if the filesystem has metadata_csum feature enabled.
>
> Signed-off-by: Arnaud Ferraris <arnaud.ferraris at collabora.com>
Acked-by: Marek Szyprowski <m.szyprowski at samsung.com>
> ---
>
>   fs/ext4/ext4_journal.c | 3 +++
>   1 file changed, 3 insertions(+)
>
> diff --git a/fs/ext4/ext4_journal.c b/fs/ext4/ext4_journal.c
> index 3559daf11d..f8524e5a99 100644
> --- a/fs/ext4/ext4_journal.c
> +++ b/fs/ext4/ext4_journal.c
> @@ -409,6 +409,9 @@ int ext4fs_check_journal_state(int recovery_flag)
>   	char *temp_buff1 = NULL;
>   	struct ext_filesystem *fs = get_fs();
>   
> +	if (le32_to_cpu(fs->sb->feature_ro_compat) & EXT4_FEATURE_RO_COMPAT_METADATA_CSUM)
> +		return 0;
> +
>   	temp_buff = zalloc(fs->blksz);
>   	if (!temp_buff)
>   		return -ENOMEM;

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland



More information about the U-Boot mailing list