+11
-3
fs/btrfs/extent-tree.c
+11
-3
fs/btrfs/extent-tree.c
···
8966
8966
struct btrfs_device *device;
8967
8967
struct list_head *devices;
8968
8968
u64 group_trimmed;
8969
+
u64 range_end = U64_MAX;
8969
8970
u64 start;
8970
8971
u64 end;
8971
8972
u64 trimmed = 0;
···
8976
8975
int dev_ret = 0;
8977
8976
int ret = 0;
8978
8977
8978
+
/*
8979
+
* Check range overflow if range->len is set.
8980
+
* The default range->len is U64_MAX.
8981
+
*/
8982
+
if (range->len != U64_MAX &&
8983
+
check_add_overflow(range->start, range->len, &range_end))
8984
+
return -EINVAL;
8985
+
8979
8986
cache = btrfs_lookup_first_block_group(fs_info, range->start);
8980
8987
for (; cache; cache = next_block_group(cache)) {
8981
-
if (cache->key.objectid >= (range->start + range->len)) {
8988
+
if (cache->key.objectid >= range_end) {
8982
8989
btrfs_put_block_group(cache);
8983
8990
break;
8984
8991
}
8985
8992
8986
8993
start = max(range->start, cache->key.objectid);
8987
-
end = min(range->start + range->len,
8988
-
cache->key.objectid + cache->key.offset);
8994
+
end = min(range_end, cache->key.objectid + cache->key.offset);
8989
8995
8990
8996
if (end - start >= range->minlen) {
8991
8997
if (!block_group_cache_done(cache)) {