diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/fs-writeback.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index b1ff16fec7f2..25aaf5efe6fa 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -1199,12 +1199,17 @@ static void wait_sb_inodes(struct super_block *sb) * for IO completion of submitted IO. The number of pages submitted is * returned. */ +#define freezing_or_frozen(x) (freezing(x) || frozen(x)) + void writeback_inodes_sb(struct super_block *sb) { unsigned long nr_dirty = global_page_state(NR_FILE_DIRTY); unsigned long nr_unstable = global_page_state(NR_UNSTABLE_NFS); long nr_to_write; + if (unlikely(freezing_or_frozen(default_backing_dev_info.wb.task))) + return; + nr_to_write = nr_dirty + nr_unstable + (inodes_stat.nr_inodes - inodes_stat.nr_unused); @@ -1221,6 +1226,9 @@ EXPORT_SYMBOL(writeback_inodes_sb); */ void sync_inodes_sb(struct super_block *sb) { + if (unlikely(freezing_or_frozen(default_backing_dev_info.wb.task))) + return; + bdi_sync_writeback(sb->s_bdi, sb); wait_sb_inodes(sb); } |