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. MFC after: 2 weeks Sponsored by: iXsystems, Inc.
This commit is contained in:
parent
61586dd647
commit
35251e9c28
@ -5140,7 +5140,7 @@ static boolean_t
|
||||
arc_is_overflowing(void)
|
||||
{
|
||||
/* 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);
|
||||
|
||||
/*
|
||||
@ -5152,7 +5152,7 @@ arc_is_overflowing(void)
|
||||
* in the ARC. In practice, that's in the tens of MB, which is low
|
||||
* 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 *
|
||||
|
Loading…
Reference in New Issue
Block a user