ext4: enable the lazy init thread when remounting read/write
In commita44be64bbe
("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. Fixesa44be64bbe
("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>
This commit is contained in:
parent
1077b2d53e
commit
eb1f822c76
|
@ -6588,18 +6588,6 @@ static int __ext4_remount(struct fs_context *fc, struct super_block *sb)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Reinitialize lazy itable initialization thread based on
|
||||
* current settings
|
||||
*/
|
||||
if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE))
|
||||
ext4_unregister_li_request(sb);
|
||||
else {
|
||||
ext4_group_t first_not_zeroed;
|
||||
first_not_zeroed = ext4_has_uninit_itable(sb);
|
||||
ext4_register_li_request(sb, first_not_zeroed);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle creation of system zone data early because it can fail.
|
||||
* 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)
|
|||
if (enable_rw)
|
||||
sb->s_flags &= ~SB_RDONLY;
|
||||
|
||||
/*
|
||||
* Reinitialize lazy itable initialization thread based on
|
||||
* current settings
|
||||
*/
|
||||
if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE))
|
||||
ext4_unregister_li_request(sb);
|
||||
else {
|
||||
ext4_group_t first_not_zeroed;
|
||||
first_not_zeroed = ext4_has_uninit_itable(sb);
|
||||
ext4_register_li_request(sb, first_not_zeroed);
|
||||
}
|
||||
|
||||
if (!ext4_has_feature_mmp(sb) || sb_rdonly(sb))
|
||||
ext4_stop_mmpd(sbi);
|
||||
|
||||
|
|
Loading…
Reference in New Issue