[ovs-dev] [PATCH] multipath: Fix off-by-one in hash_threshold multipath calculation.

Ben Pfaff blp at nicira.com
Sat Jan 22 00:42:32 UTC 2011


0xffffffff / (0xffffffff / n) can have a value as large as n (consider the
n == 1 case), but we need a value no bigger than n-1.  So add 1 before
dividing to fix the problem.

This caused a test failure on Debian "lenny" amd64 when apparently
unrelated code changed.

Reported-by: Justin Pettit <jpettit at nicira.com>
---
 lib/multipath.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/multipath.c b/lib/multipath.c
index af0ebff..3b9c54d 100644
--- a/lib/multipath.c
+++ b/lib/multipath.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010 Nicira Networks.
+ * Copyright (c) 2010, 2011 Nicira Networks.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -195,7 +195,7 @@ multipath_algorithm(uint32_t hash, enum nx_mp_algorithm algorithm,
         return hash % n_links;
 
     case NX_MP_ALG_HASH_THRESHOLD:
-        return hash / (UINT32_MAX / n_links);
+        return hash / (UINT32_MAX / n_links + 1);
 
     case NX_MP_ALG_HRW:
         return (n_links <= 64
-- 
1.7.1





More information about the dev mailing list