mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
Fix comparison signedness in arc_is_overflowing()
When ARC size is very small, aggsum_lower_bound(&arc_size) may return negative values, that due to unsigned comparison caused delays, waiting for arc_adjust() to "fix" it by calling aggsum_value(&arc_size). Use of signed comparison there fixes the problem. Reviewed-by: Matt Ahrens <mahrens@delphix.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: George Melikov <mail@gmelikov.ru> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Closes #8873
This commit is contained in:
parent
c08c30ed13
commit
5a902f5aaa
@ -5480,7 +5480,7 @@ static boolean_t
|
|||||||
arc_is_overflowing(void)
|
arc_is_overflowing(void)
|
||||||
{
|
{
|
||||||
/* Always allow at least one block of overflow */
|
/* Always allow at least one block of overflow */
|
||||||
uint64_t overflow = MAX(SPA_MAXBLOCKSIZE,
|
int64_t overflow = MAX(SPA_MAXBLOCKSIZE,
|
||||||
arc_c >> zfs_arc_overflow_shift);
|
arc_c >> zfs_arc_overflow_shift);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5492,7 +5492,7 @@ arc_is_overflowing(void)
|
|||||||
* in the ARC. In practice, that's in the tens of MB, which is low
|
* in the ARC. In practice, that's in the tens of MB, which is low
|
||||||
* enough to be safe.
|
* enough to be safe.
|
||||||
*/
|
*/
|
||||||
return (aggsum_lower_bound(&arc_size) >= arc_c + overflow);
|
return (aggsum_lower_bound(&arc_size) >= (int64_t)arc_c + overflow);
|
||||||
}
|
}
|
||||||
|
|
||||||
static abd_t *
|
static abd_t *
|
||||||
|
Loading…
Reference in New Issue
Block a user