Commit b3776305 authored by Josef Bacik's avatar Josef Bacik Committed by David Sterba

btrfs: use the filemap_fdatawrite_wbc helper for delalloc shrinking

sync_inode() has some holes that can cause problems if we're under heavy
ENOSPC pressure.  If there's writeback running on a separate thread
sync_inode() will skip writing the inode altogether.  What we really
want is to make sure writeback has been started on all the pages to make
sure we can see the ordered extents and wait on them if appropriate.
Switch to this new helper which will allow us to accomplish this and
avoid ENOSPC'ing early.
Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 5a798493
...@@ -9878,7 +9878,7 @@ static int start_delalloc_inodes(struct btrfs_root *root, ...@@ -9878,7 +9878,7 @@ static int start_delalloc_inodes(struct btrfs_root *root,
btrfs_queue_work(root->fs_info->flush_workers, btrfs_queue_work(root->fs_info->flush_workers,
&work->work); &work->work);
} else { } else {
ret = sync_inode(inode, wbc); ret = filemap_fdatawrite_wbc(inode->i_mapping, wbc);
btrfs_add_delayed_iput(inode); btrfs_add_delayed_iput(inode);
if (ret || wbc->nr_to_write <= 0) if (ret || wbc->nr_to_write <= 0)
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment