diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index 92a5b8283528..04ccc85c80b4 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -2076,8 +2076,11 @@ static long wb_writeback(struct bdi_writeback *wb,
 	long progress;
 	struct blk_plug plug;
 	bool queued = false;
+	struct super_block *sb = work->sb;
 
 	blk_start_plug(&plug);
+	if (sb)
+		down_write(&sb->s_umount);
 	for (;;) {
 		/*
 		 * Stop writeback when nr_pages has been consumed
@@ -2162,6 +2165,8 @@ static long wb_writeback(struct bdi_writeback *wb,
 		/* This function drops i_lock... */
 		inode_sleep_on_writeback(inode);
 	}
+	if (sb)
+		up_write(&sb->s_umount);
 	blk_finish_plug(&plug);
 
 	return nr_pages - work->nr_pages;