FITRIM isn't well documented, which means that I missed that
len == -1ULL always means "trim to end of filesystem". generic/260 has
been failing with:
--- a/tests/generic/260.out 2025-04-30 16:20:44.
532797310 -0700
+++ b/tests/generic/260.out.bad 2025-07-03 11:44:26.
946394170 -0700
@@ -11,4 +11,5 @@
[+] Default length with start set (should succeed)
[+] Length beyond the end of fs (should succeed)
[+] Length beyond the end of fs with start set (should succeed)
+After the full fs discard 0 bytes were discarded however the file system is
10401542144 bytes long.
Test done
because the addition used to compute end suffered an integer overflow,
resulting in end < start, which meant nothing happened. Fix this by
explicitly checking for -1ULL.
Cc: linux-ext4@vger.kernel.org # v1.43
Fixes: 81cbf1ef4f5dab ("misc: add fuse2fs, a FUSE server for e2fsprogs")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
return -EROFS;
start = FUSE2FS_B_TO_FSBT(ff, fr->start);
- end = FUSE2FS_B_TO_FSBT(ff, fr->start + fr->len - 1);
+ if (fr->len == -1ULL)
+ end = -1ULL;
+ else
+ end = FUSE2FS_B_TO_FSBT(ff, fr->start + fr->len - 1);
minlen = FUSE2FS_B_TO_FSBT(ff, fr->minlen);
if (EXT2FS_NUM_B2C(fs, minlen) > EXT2_CLUSTERS_PER_GROUP(fs->super) ||