summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/fs-writeback.c8
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);
}