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;