btrfs: zoned: wait for existing extents before truncating
When truncating a file, file buffers which have already been allocated but not yet written may be truncated. Truncating these buffers could cause breakage of a sequential write pattern in a block group if the truncated blocks are for example followed by blocks allocated to another file. To avoid this problem, always wait for write out of all unwritten buffers before proceeding with the truncate execution. Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
0bc09ca129
commit
24c0a7227f
@ -5169,6 +5169,15 @@ static int btrfs_setsize(struct inode *inode, struct iattr *attr)
|
||||
btrfs_drew_write_unlock(&root->snapshot_lock);
|
||||
btrfs_end_transaction(trans);
|
||||
} else {
|
||||
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
|
||||
|
||||
if (btrfs_is_zoned(fs_info)) {
|
||||
ret = btrfs_wait_ordered_range(inode,
|
||||
ALIGN(newsize, fs_info->sectorsize),
|
||||
(u64)-1);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* We're truncating a file that used to have good data down to
|
||||
|
Loading…
x
Reference in New Issue
Block a user