diff options
author | Filipe Manana <fdmanana@suse.com> | 2022-09-01 14:18:25 +0100 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2022-09-26 12:28:00 +0200 |
commit | 33a86cfa1741ef1668b0d312c7964b4f35e9d31e (patch) | |
tree | ebb074e87373e165884ba26a5c28b2c54b3b761b /fs/btrfs/extent_io.c | |
parent | 9a42bbaeff2b101ffdb7fc8c3a326bff08a33917 (diff) | |
download | lwn-33a86cfa1741ef1668b0d312c7964b4f35e9d31e.tar.gz lwn-33a86cfa1741ef1668b0d312c7964b4f35e9d31e.zip |
btrfs: properly flush delalloc when entering fiemap
If the flag FIEMAP_FLAG_SYNC is passed to fiemap, it means all delalloc
should be flushed and writeback complete. We call the generic helper
fiemap_prep() which does a filemap_write_and_wait() in case that flag is
given, however that is not enough if we have compression. Because a
single filemap_fdatawrite_range() only starts compression (in an async
thread) and therefore returns before the compression is done and writeback
is started.
So make btrfs_fiemap(), actually wait for all writeback to start and
complete if FIEMAP_FLAG_SYNC is set. We start and wait for writeback
on the whole possible file range, from 0 to LLONG_MAX, because that is
what the generic code at fiemap_prep() does.
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/extent_io.c')
0 files changed, 0 insertions, 0 deletions