Skip to content

Commit eb1f822

Browse files
committed
ext4: enable the lazy init thread when remounting read/write
In commit a44be64 ("ext4: don't clear SB_RDONLY when remounting r/w until quota is re-enabled") we defer clearing tyhe SB_RDONLY flag in struct super. However, we didn't defer when we checked sb_rdonly() to determine the lazy itable init thread should be enabled, with the next result that the lazy inode table initialization would not be properly started. This can cause generic/231 to fail in ext4's nojournal mode. Fix this by moving when we decide to start or stop the lazy itable init thread to after we clear the SB_RDONLY flag when we are remounting the file system read/write. Fixes a44be64 ("ext4: don't clear SB_RDONLY when remounting r/w until...") Signed-off-by: Theodore Ts'o <tytso@mit.edu> Link: https://lore.kernel.org/r/20230527035729.1001605-1-tytso@mit.edu Signed-off-by: Theodore Ts'o <tytso@mit.edu>
1 parent 1077b2d commit eb1f822

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

fs/ext4/super.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6588,18 +6588,6 @@ static int __ext4_remount(struct fs_context *fc, struct super_block *sb)
65886588
}
65896589
}
65906590

6591-
/*
6592-
* Reinitialize lazy itable initialization thread based on
6593-
* current settings
6594-
*/
6595-
if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE))
6596-
ext4_unregister_li_request(sb);
6597-
else {
6598-
ext4_group_t first_not_zeroed;
6599-
first_not_zeroed = ext4_has_uninit_itable(sb);
6600-
ext4_register_li_request(sb, first_not_zeroed);
6601-
}
6602-
66036591
/*
66046592
* Handle creation of system zone data early because it can fail.
66056593
* Releasing of existing data is done when we are sure remount will
@@ -6637,6 +6625,18 @@ static int __ext4_remount(struct fs_context *fc, struct super_block *sb)
66376625
if (enable_rw)
66386626
sb->s_flags &= ~SB_RDONLY;
66396627

6628+
/*
6629+
* Reinitialize lazy itable initialization thread based on
6630+
* current settings
6631+
*/
6632+
if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE))
6633+
ext4_unregister_li_request(sb);
6634+
else {
6635+
ext4_group_t first_not_zeroed;
6636+
first_not_zeroed = ext4_has_uninit_itable(sb);
6637+
ext4_register_li_request(sb, first_not_zeroed);
6638+
}
6639+
66406640
if (!ext4_has_feature_mmp(sb) || sb_rdonly(sb))
66416641
ext4_stop_mmpd(sbi);
66426642

0 commit comments

Comments
 (0)