diff --git a/net/ceph/crush/mapper.c b/net/ceph/crush/mapper.c
index 96c8a58937dbc255d19514ba13923e4b316c1f99..cbd06a91941c15f3e88b9dd6671694e2fe76dbe2 100644
--- a/net/ceph/crush/mapper.c
+++ b/net/ceph/crush/mapper.c
@@ -392,7 +392,7 @@ static int crush_choose(const struct crush_map *map,
 				}
 
 				reject = 0;
-				if (recurse_to_leaf) {
+				if (!collide && recurse_to_leaf) {
 					if (item < 0) {
 						if (crush_choose(map,
 							 map->buckets[-1-item],