diff options
author | Qu Wenruo <quwenruo@cn.fujitsu.com> | 2015-10-29 10:28:46 +0100 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2015-11-03 16:44:20 +0100 |
commit | 485290a734f14279fa9376b3d6021a2dc1f82356 (patch) | |
tree | e9c10f2e1fcbb2e86ee66d1af947a8c6b8b7abe0 /fs/btrfs/file.c | |
parent | btrfs: qgroup: Fix a rebase bug which will cause qgroup double free (diff) | |
download | linux-485290a734f14279fa9376b3d6021a2dc1f82356.tar.xz linux-485290a734f14279fa9376b3d6021a2dc1f82356.zip |
btrfs: Fix a data space underflow warning
Even with quota disabled, generic/127 will trigger a kernel warning by
underflow data space info.
The bug is caused by buffered write, which in case of short copy, the
start parameter for btrfs_delalloc_release_space() is wrong, and
round_up/down() in btrfs_delalloc_release() extents the range to page
aligned, decreasing one more page than expected.
This patch will fix it by passing correct start.
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to '')
-rw-r--r-- | fs/btrfs/file.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 381be79f779a..e6df6f1b13dd 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1604,12 +1604,17 @@ again: BTRFS_I(inode)->outstanding_extents++; spin_unlock(&BTRFS_I(inode)->lock); } - if (only_release_metadata) + if (only_release_metadata) { btrfs_delalloc_release_metadata(inode, release_bytes); - else - btrfs_delalloc_release_space(inode, pos, + } else { + u64 __pos; + + __pos = round_down(pos, root->sectorsize) + + (dirty_pages << PAGE_CACHE_SHIFT); + btrfs_delalloc_release_space(inode, __pos, release_bytes); + } } release_bytes = dirty_pages << PAGE_CACHE_SHIFT; |