On Tue, Nov 20, 2018 at 09:25:56AM +0200, Nikolay Borisov wrote: > From: Qu Wenruo <wqu@xxxxxxxx> > > [BUG] > fstrim on some btrfs only trims the unallocated space, not trimming any > space in existing block groups. > > [CAUSE] > Before fstrim_range passed to btrfs_trim_fs(), it gets truncated to > range [0, super->total_bytes). So later btrfs_trim_fs() will only be > able to trim block groups in range [0, super->total_bytes). > > While for btrfs, any bytenr aligned to sectorsize is valid, since btrfs > uses its logical address space, there is nothing limiting the location > where we put block groups. > > For filesystem with frequent balance, it's quite easy to relocate all > block groups and bytenr of block groups will start beyond > super->total_bytes. > > In that case, btrfs will not trim existing block groups. > > [FIX] > Just remove the truncation in btrfs_ioctl_fitrim(), so btrfs_trim_fs() > can get the unmodified range, which is normally set to [0, U64_MAX]. > > Reported-by: Chris Murphy <lists@xxxxxxxxxxxxxxxxx> > Fixes: f4c697e6406d ("btrfs: return EINVAL if start > total_bytes in fitrim ioctl") > CC: <stable@xxxxxxxxxxxxxxx> # v4.4+ > Signed-off-by: Qu Wenruo <wqu@xxxxxxxx> > Reviewed-by: Nikolay Borisov <nborisov@xxxxxxxx> > Reviewed-by: David Sterba <dsterba@xxxxxxxx> > Signed-off-by: David Sterba <dsterba@xxxxxxxx> > --- > > Hello Greg, > > Please apply upstream commit 6ba9fc8e628becf0e3ec94083450d089b0dec5f5 to > 4.4.y and 4.9.y. This backport should apply cleanly to both trees. This is already in 4.9.141, so I only applied it to 4.4.y thanks, greg k-h