diff options
-rw-r--r-- | fs/btrfs/extent-tree.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 283af7a676a3..60bfe2d68547 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
@@ -7886,9 +7886,16 @@ int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range) | |||
7886 | u64 start; | 7886 | u64 start; |
7887 | u64 end; | 7887 | u64 end; |
7888 | u64 trimmed = 0; | 7888 | u64 trimmed = 0; |
7889 | u64 total_bytes = btrfs_super_total_bytes(fs_info->super_copy); | ||
7889 | int ret = 0; | 7890 | int ret = 0; |
7890 | 7891 | ||
7891 | cache = btrfs_lookup_block_group(fs_info, range->start); | 7892 | /* |
7893 | * try to trim all FS space, our block group may start from non-zero. | ||
7894 | */ | ||
7895 | if (range->len == total_bytes) | ||
7896 | cache = btrfs_lookup_first_block_group(fs_info, range->start); | ||
7897 | else | ||
7898 | cache = btrfs_lookup_block_group(fs_info, range->start); | ||
7892 | 7899 | ||
7893 | while (cache) { | 7900 | while (cache) { |
7894 | if (cache->key.objectid >= (range->start + range->len)) { | 7901 | if (cache->key.objectid >= (range->start + range->len)) { |