mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
fsx: fix range overlap check
On 32-bit systems, the offsets are 'unsigned long' (32-bit) which means that we must cast the explicitly to unsigned long long before feeding them to llabs. Without the type conversion we fail to sign-extend the llabs parameter, try to make a copy/clone/dedupe call with overlapping ranges, and fsx aborts and the test fails. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
committed by
Eryu Guan
parent
64954c0ead
commit
c4802d4a53
@@ -1911,6 +1911,14 @@ fail:
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
range_overlaps(
|
||||
unsigned long off0,
|
||||
unsigned long off1,
|
||||
unsigned long size)
|
||||
{
|
||||
return llabs((unsigned long long)off1 - off0) < size;
|
||||
}
|
||||
|
||||
int
|
||||
test(void)
|
||||
@@ -1993,7 +2001,7 @@ test(void)
|
||||
offset2 = random();
|
||||
TRIM_OFF(offset2, maxfilelen);
|
||||
offset2 = offset2 & ~(block_size - 1);
|
||||
} while (llabs(offset2 - offset) < size ||
|
||||
} while (range_overlaps(offset, offset2, size) ||
|
||||
offset2 + size > maxfilelen);
|
||||
break;
|
||||
case OP_DEDUPE_RANGE:
|
||||
@@ -2011,7 +2019,7 @@ test(void)
|
||||
offset2 = random();
|
||||
TRIM_OFF(offset2, file_size);
|
||||
offset2 = offset2 & ~(block_size - 1);
|
||||
} while (llabs(offset2 - offset) < size ||
|
||||
} while (range_overlaps(offset, offset2, size) ||
|
||||
offset2 + size > file_size);
|
||||
break;
|
||||
}
|
||||
@@ -2024,7 +2032,7 @@ test(void)
|
||||
offset2 = random();
|
||||
TRIM_OFF(offset2, maxfilelen);
|
||||
offset2 -= offset2 % writebdy;
|
||||
} while (llabs(offset2 - offset) < size ||
|
||||
} while (range_overlaps(offset, offset2, size) ||
|
||||
offset2 + size > maxfilelen);
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user