Message ID | cover.1604486892.git.fdmanana@suse.com (mailing list archive) |
---|---|
Headers | show |
Series | btrfs: fix cases of stat(2) reporting incorrect number of used blocks | expand |
On Wed, Nov 04, 2020 at 11:07:30AM +0000, fdmanana@kernel.org wrote: > From: Filipe Manana <fdmanana@suse.com> > > There are several cases where a stat(2) call can report an incorrect number > of used blocks. In some cases can even result in reporting 0 used blocks, > which is a specially bad value to report when a file is not empty, and we > had user bug reports in the past for such cases (the changelogs in the > patches point to one such report). > > This patchset addresses all those cases. The third patch fixes a race in > defrag that while it does not result in a functional problem (data loss > or some corruption), it leads to unnecessary IO and space allocation, > and it's necessary for the 4th and final patch to work as it is. > > A couple test cases for fstests will follow. > > Filipe Manana (4): > btrfs: fix missing delalloc new bit for new delalloc ranges > btrfs: refactor btrfs_drop_extents() to make it easier to extend > btrfs: fix race when defragging that leads to unnecessary IO > btrfs: update the number of bytes used by an inode atomically Thanks, now added to misc-next. As the fixes seem to be important I've checked which stable kernels are relevant, so it's 4.19 and 5.4. The code does not apply due to intermediate cleanups but it should be easy to resolve.
From: Filipe Manana <fdmanana@suse.com> There are several cases where a stat(2) call can report an incorrect number of used blocks. In some cases can even result in reporting 0 used blocks, which is a specially bad value to report when a file is not empty, and we had user bug reports in the past for such cases (the changelogs in the patches point to one such report). This patchset addresses all those cases. The third patch fixes a race in defrag that while it does not result in a functional problem (data loss or some corruption), it leads to unnecessary IO and space allocation, and it's necessary for the 4th and final patch to work as it is. A couple test cases for fstests will follow. Filipe Manana (4): btrfs: fix missing delalloc new bit for new delalloc ranges btrfs: refactor btrfs_drop_extents() to make it easier to extend btrfs: fix race when defragging that leads to unnecessary IO btrfs: update the number of bytes used by an inode atomically fs/btrfs/btrfs_inode.h | 3 +- fs/btrfs/ctree.h | 71 ++++++++-- fs/btrfs/extent-io-tree.h | 16 ++- fs/btrfs/extent_io.c | 10 +- fs/btrfs/file.c | 246 +++++++++++++++-------------------- fs/btrfs/inode.c | 233 +++++++++++++++++++++++++++------ fs/btrfs/ioctl.c | 39 ++++++ fs/btrfs/reflink.c | 9 +- fs/btrfs/tests/inode-tests.c | 12 +- fs/btrfs/tree-log.c | 32 +++-- 10 files changed, 458 insertions(+), 213 deletions(-)