Author: mav
Date: Fri Jun  7 20:59:24 2019
New Revision: 348790
URL: https://svnweb.freebsd.org/changeset/base/348790

Log:
  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.

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c   Fri Jun  7 
20:43:34 2019        (r348789)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c   Fri Jun  7 
20:59:24 2019        (r348790)
@@ -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 *
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to