Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Aug 2017 04:23:24 +0000 (UTC)
From:      Alan Cox <alc@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r322041 - head/sys/kern
Message-ID:  <201708040423.v744NOix022999@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: alc
Date: Fri Aug  4 04:23:23 2017
New Revision: 322041
URL: https://svnweb.freebsd.org/changeset/base/322041

Log:
  In case readers are misled by expressions that combine multiplication and
  division, add parentheses to make the precedence explicit.
  
  Submitted by:	Doug Moore <dougm@rice.edu>
  Requested by:	imp
  Reviewed by:	imp
  MFC after:	1 week
  X-MFC after:	r321840
  Differential Revision:	https://reviews.freebsd.org/D11815

Modified:
  head/sys/kern/subr_blist.c

Modified: head/sys/kern/subr_blist.c
==============================================================================
--- head/sys/kern/subr_blist.c	Fri Aug  4 04:20:11 2017	(r322040)
+++ head/sys/kern/subr_blist.c	Fri Aug  4 04:23:23 2017	(r322041)
@@ -110,6 +110,7 @@ __FBSDID("$FreeBSD$");
 #define	bitcount64(x)	__bitcount64((uint64_t)(x))
 #define malloc(a,b,c)	calloc(a, 1)
 #define free(a,b)	free(a)
+#define CTASSERT(expr)
 
 #include <sys/blist.h>
 
@@ -142,6 +143,8 @@ static void	blst_radix_print(blmeta_t *scan, daddr_t b
 static MALLOC_DEFINE(M_SWAP, "SWAP", "Swap space");
 #endif
 
+CTASSERT(BLIST_BMAP_RADIX % BLIST_META_RADIX == 0);
+
 /*
  * For a subtree that can represent the state of up to 'radix' blocks, the
  * number of leaf nodes of the subtree is L=radix/BLIST_BMAP_RADIX.  If 'm'
@@ -151,17 +154,19 @@ static MALLOC_DEFINE(M_SWAP, "SWAP", "Swap space");
  * in the 'meta' functions that process subtrees.  Since integer division
  * discards remainders, we can express this computation as
  * skip = (m * m**h) / (m - 1)
- * skip = (m * radix / BLIST_BMAP_RADIX) / (m - 1)
- * and if m divides BLIST_BMAP_RADIX, we can simplify further to
- * skip = radix / (BLIST_BMAP_RADIX / m * (m - 1))
- * so that a simple integer division is enough for the calculation.
+ * skip = (m * (radix / BLIST_BMAP_RADIX)) / (m - 1)
+ * and since m divides BLIST_BMAP_RADIX, we can simplify further to
+ * skip = (radix / (BLIST_BMAP_RADIX / m)) / (m - 1)
+ * skip = radix / ((BLIST_BMAP_RADIX / m) * (m - 1))
+ * so that simple integer division by a constant can safely be used for the
+ * calculation.
  */
 static inline daddr_t
 radix_to_skip(daddr_t radix)
 {
 
 	return (radix /
-	    (BLIST_BMAP_RADIX / BLIST_META_RADIX * (BLIST_META_RADIX - 1)));
+	    ((BLIST_BMAP_RADIX / BLIST_META_RADIX) * (BLIST_META_RADIX - 1)));
 }
 
 /*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201708040423.v744NOix022999>