ext4: rename s_error_work to s_sb_upd_work
The most common use that s_error_work will get scheduled is now the periodic update of the superblock. So rename it to s_sb_upd_work. Also rename the function flush_stashed_error_work() to update_super_work(). Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
ff0722de89
commit
bb15cea20f
|
@ -1698,10 +1698,13 @@ struct ext4_sb_info {
|
||||||
const char *s_last_error_func;
|
const char *s_last_error_func;
|
||||||
time64_t s_last_error_time;
|
time64_t s_last_error_time;
|
||||||
/*
|
/*
|
||||||
* If we are in a context where we cannot update error information in
|
* If we are in a context where we cannot update the on-disk
|
||||||
* the on-disk superblock, we queue this work to do it.
|
* superblock, we queue the work here. This is used to update
|
||||||
|
* the error information in the superblock, and for periodic
|
||||||
|
* updates of the superblock called from the commit callback
|
||||||
|
* function.
|
||||||
*/
|
*/
|
||||||
struct work_struct s_error_work;
|
struct work_struct s_sb_upd_work;
|
||||||
|
|
||||||
/* Ext4 fast commit sub transaction ID */
|
/* Ext4 fast commit sub transaction ID */
|
||||||
atomic_t s_fc_subtid;
|
atomic_t s_fc_subtid;
|
||||||
|
|
|
@ -481,7 +481,7 @@ static void ext4_maybe_update_superblock(struct super_block *sb)
|
||||||
diff_size = lifetime_write_kbytes - le64_to_cpu(es->s_kbytes_written);
|
diff_size = lifetime_write_kbytes - le64_to_cpu(es->s_kbytes_written);
|
||||||
|
|
||||||
if (diff_size > EXT4_SB_REFRESH_INTERVAL_KB)
|
if (diff_size > EXT4_SB_REFRESH_INTERVAL_KB)
|
||||||
schedule_work(&EXT4_SB(sb)->s_error_work);
|
schedule_work(&EXT4_SB(sb)->s_sb_upd_work);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -723,7 +723,7 @@ static void ext4_handle_error(struct super_block *sb, bool force_ro, int error,
|
||||||
* defer superblock flushing to a workqueue.
|
* defer superblock flushing to a workqueue.
|
||||||
*/
|
*/
|
||||||
if (continue_fs && journal)
|
if (continue_fs && journal)
|
||||||
schedule_work(&EXT4_SB(sb)->s_error_work);
|
schedule_work(&EXT4_SB(sb)->s_sb_upd_work);
|
||||||
else
|
else
|
||||||
ext4_commit_super(sb);
|
ext4_commit_super(sb);
|
||||||
}
|
}
|
||||||
|
@ -750,10 +750,10 @@ static void ext4_handle_error(struct super_block *sb, bool force_ro, int error,
|
||||||
sb->s_flags |= SB_RDONLY;
|
sb->s_flags |= SB_RDONLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void flush_stashed_error_work(struct work_struct *work)
|
static void update_super_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct ext4_sb_info *sbi = container_of(work, struct ext4_sb_info,
|
struct ext4_sb_info *sbi = container_of(work, struct ext4_sb_info,
|
||||||
s_error_work);
|
s_sb_upd_work);
|
||||||
journal_t *journal = sbi->s_journal;
|
journal_t *journal = sbi->s_journal;
|
||||||
handle_t *handle;
|
handle_t *handle;
|
||||||
|
|
||||||
|
@ -1078,7 +1078,7 @@ __acquires(bitlock)
|
||||||
if (!bdev_read_only(sb->s_bdev)) {
|
if (!bdev_read_only(sb->s_bdev)) {
|
||||||
save_error_info(sb, EFSCORRUPTED, ino, block, function,
|
save_error_info(sb, EFSCORRUPTED, ino, block, function,
|
||||||
line);
|
line);
|
||||||
schedule_work(&EXT4_SB(sb)->s_error_work);
|
schedule_work(&EXT4_SB(sb)->s_sb_upd_work);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1318,10 +1318,10 @@ static void ext4_put_super(struct super_block *sb)
|
||||||
* Unregister sysfs before destroying jbd2 journal.
|
* Unregister sysfs before destroying jbd2 journal.
|
||||||
* Since we could still access attr_journal_task attribute via sysfs
|
* Since we could still access attr_journal_task attribute via sysfs
|
||||||
* path which could have sbi->s_journal->j_task as NULL
|
* path which could have sbi->s_journal->j_task as NULL
|
||||||
* Unregister sysfs before flush sbi->s_error_work.
|
* Unregister sysfs before flush sbi->s_sb_upd_work.
|
||||||
* Since user may read /proc/fs/ext4/xx/mb_groups during umount, If
|
* Since user may read /proc/fs/ext4/xx/mb_groups during umount, If
|
||||||
* read metadata verify failed then will queue error work.
|
* read metadata verify failed then will queue error work.
|
||||||
* flush_stashed_error_work will call start_this_handle may trigger
|
* update_super_work will call start_this_handle may trigger
|
||||||
* BUG_ON.
|
* BUG_ON.
|
||||||
*/
|
*/
|
||||||
ext4_unregister_sysfs(sb);
|
ext4_unregister_sysfs(sb);
|
||||||
|
@ -1333,7 +1333,7 @@ static void ext4_put_super(struct super_block *sb)
|
||||||
ext4_unregister_li_request(sb);
|
ext4_unregister_li_request(sb);
|
||||||
ext4_quotas_off(sb, EXT4_MAXQUOTAS);
|
ext4_quotas_off(sb, EXT4_MAXQUOTAS);
|
||||||
|
|
||||||
flush_work(&sbi->s_error_work);
|
flush_work(&sbi->s_sb_upd_work);
|
||||||
destroy_workqueue(sbi->rsv_conversion_wq);
|
destroy_workqueue(sbi->rsv_conversion_wq);
|
||||||
ext4_release_orphan_info(sb);
|
ext4_release_orphan_info(sb);
|
||||||
|
|
||||||
|
@ -4998,8 +4998,8 @@ static int ext4_load_and_init_journal(struct super_block *sb,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
/* flush s_error_work before journal destroy. */
|
/* flush s_sb_upd_work before destroying the journal. */
|
||||||
flush_work(&sbi->s_error_work);
|
flush_work(&sbi->s_sb_upd_work);
|
||||||
jbd2_journal_destroy(sbi->s_journal);
|
jbd2_journal_destroy(sbi->s_journal);
|
||||||
sbi->s_journal = NULL;
|
sbi->s_journal = NULL;
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -5322,7 +5322,7 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
|
||||||
|
|
||||||
timer_setup(&sbi->s_err_report, print_daily_error_info, 0);
|
timer_setup(&sbi->s_err_report, print_daily_error_info, 0);
|
||||||
spin_lock_init(&sbi->s_error_lock);
|
spin_lock_init(&sbi->s_error_lock);
|
||||||
INIT_WORK(&sbi->s_error_work, flush_stashed_error_work);
|
INIT_WORK(&sbi->s_sb_upd_work, update_super_work);
|
||||||
|
|
||||||
err = ext4_group_desc_init(sb, es, logical_sb_block, &first_not_zeroed);
|
err = ext4_group_desc_init(sb, es, logical_sb_block, &first_not_zeroed);
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -5666,16 +5666,16 @@ failed_mount_wq:
|
||||||
sbi->s_ea_block_cache = NULL;
|
sbi->s_ea_block_cache = NULL;
|
||||||
|
|
||||||
if (sbi->s_journal) {
|
if (sbi->s_journal) {
|
||||||
/* flush s_error_work before journal destroy. */
|
/* flush s_sb_upd_work before journal destroy. */
|
||||||
flush_work(&sbi->s_error_work);
|
flush_work(&sbi->s_sb_upd_work);
|
||||||
jbd2_journal_destroy(sbi->s_journal);
|
jbd2_journal_destroy(sbi->s_journal);
|
||||||
sbi->s_journal = NULL;
|
sbi->s_journal = NULL;
|
||||||
}
|
}
|
||||||
failed_mount3a:
|
failed_mount3a:
|
||||||
ext4_es_unregister_shrinker(sbi);
|
ext4_es_unregister_shrinker(sbi);
|
||||||
failed_mount3:
|
failed_mount3:
|
||||||
/* flush s_error_work before sbi destroy */
|
/* flush s_sb_upd_work before sbi destroy */
|
||||||
flush_work(&sbi->s_error_work);
|
flush_work(&sbi->s_sb_upd_work);
|
||||||
del_timer_sync(&sbi->s_err_report);
|
del_timer_sync(&sbi->s_err_report);
|
||||||
ext4_stop_mmpd(sbi);
|
ext4_stop_mmpd(sbi);
|
||||||
ext4_group_desc_free(sbi);
|
ext4_group_desc_free(sbi);
|
||||||
|
@ -6551,7 +6551,7 @@ static int __ext4_remount(struct fs_context *fc, struct super_block *sb)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flush outstanding errors before changing fs state */
|
/* Flush outstanding errors before changing fs state */
|
||||||
flush_work(&sbi->s_error_work);
|
flush_work(&sbi->s_sb_upd_work);
|
||||||
|
|
||||||
if ((bool)(fc->sb_flags & SB_RDONLY) != sb_rdonly(sb)) {
|
if ((bool)(fc->sb_flags & SB_RDONLY) != sb_rdonly(sb)) {
|
||||||
if (ext4_forced_shutdown(sb)) {
|
if (ext4_forced_shutdown(sb)) {
|
||||||
|
|
Loading…
Reference in New Issue