Lines Matching refs:bucket
69 static int bucket_perm_choose(struct crush_bucket *bucket, in bucket_perm_choose() argument
72 unsigned int pr = r % bucket->size; in bucket_perm_choose()
76 if (bucket->perm_x != (__u32)x || bucket->perm_n == 0) { in bucket_perm_choose()
77 dprintk("bucket %d new x=%d\n", bucket->id, x); in bucket_perm_choose()
78 bucket->perm_x = x; in bucket_perm_choose()
82 s = crush_hash32_3(bucket->hash, x, bucket->id, 0) % in bucket_perm_choose()
83 bucket->size; in bucket_perm_choose()
84 bucket->perm[0] = s; in bucket_perm_choose()
85 bucket->perm_n = 0xffff; /* magic value, see below */ in bucket_perm_choose()
89 for (i = 0; i < bucket->size; i++) in bucket_perm_choose()
90 bucket->perm[i] = i; in bucket_perm_choose()
91 bucket->perm_n = 0; in bucket_perm_choose()
92 } else if (bucket->perm_n == 0xffff) { in bucket_perm_choose()
94 for (i = 1; i < bucket->size; i++) in bucket_perm_choose()
95 bucket->perm[i] = i; in bucket_perm_choose()
96 bucket->perm[bucket->perm[0]] = 0; in bucket_perm_choose()
97 bucket->perm_n = 1; in bucket_perm_choose()
101 for (i = 0; i < bucket->perm_n; i++) in bucket_perm_choose()
102 dprintk(" perm_choose have %d: %d\n", i, bucket->perm[i]); in bucket_perm_choose()
103 while (bucket->perm_n <= pr) { in bucket_perm_choose()
104 unsigned int p = bucket->perm_n; in bucket_perm_choose()
106 if (p < bucket->size - 1) { in bucket_perm_choose()
107 i = crush_hash32_3(bucket->hash, x, bucket->id, p) % in bucket_perm_choose()
108 (bucket->size - p); in bucket_perm_choose()
110 unsigned int t = bucket->perm[p + i]; in bucket_perm_choose()
111 bucket->perm[p + i] = bucket->perm[p]; in bucket_perm_choose()
112 bucket->perm[p] = t; in bucket_perm_choose()
116 bucket->perm_n++; in bucket_perm_choose()
118 for (i = 0; i < bucket->size; i++) in bucket_perm_choose()
119 dprintk(" perm_choose %d: %d\n", i, bucket->perm[i]); in bucket_perm_choose()
121 s = bucket->perm[pr]; in bucket_perm_choose()
123 dprintk(" perm_choose %d sz=%d x=%d r=%d (%d) s=%d\n", bucket->id, in bucket_perm_choose()
124 bucket->size, x, r, pr, s); in bucket_perm_choose()
125 return bucket->items[s]; in bucket_perm_choose()
129 static int bucket_uniform_choose(struct crush_bucket_uniform *bucket, in bucket_uniform_choose() argument
132 return bucket_perm_choose(&bucket->h, x, r); in bucket_uniform_choose()
136 static int bucket_list_choose(struct crush_bucket_list *bucket, in bucket_list_choose() argument
141 for (i = bucket->h.size-1; i >= 0; i--) { in bucket_list_choose()
142 __u64 w = crush_hash32_4(bucket->h.hash,x, bucket->h.items[i], in bucket_list_choose()
143 r, bucket->h.id); in bucket_list_choose()
147 i, x, r, bucket->h.items[i], bucket->item_weights[i], in bucket_list_choose()
148 bucket->sum_weights[i], w); in bucket_list_choose()
149 w *= bucket->sum_weights[i]; in bucket_list_choose()
152 if (w < bucket->item_weights[i]) in bucket_list_choose()
153 return bucket->h.items[i]; in bucket_list_choose()
156 dprintk("bad list sums for bucket %d\n", bucket->h.id); in bucket_list_choose()
157 return bucket->h.items[0]; in bucket_list_choose()
189 static int bucket_tree_choose(struct crush_bucket_tree *bucket, in bucket_tree_choose() argument
197 n = bucket->num_nodes >> 1; in bucket_tree_choose()
202 w = bucket->node_weights[n]; in bucket_tree_choose()
203 t = (__u64)crush_hash32_4(bucket->h.hash, x, n, r, in bucket_tree_choose()
204 bucket->h.id) * (__u64)w; in bucket_tree_choose()
209 if (t < bucket->node_weights[l]) in bucket_tree_choose()
215 return bucket->h.items[n >> 1]; in bucket_tree_choose()
221 static int bucket_straw_choose(struct crush_bucket_straw *bucket, in bucket_straw_choose() argument
229 for (i = 0; i < bucket->h.size; i++) { in bucket_straw_choose()
230 draw = crush_hash32_3(bucket->h.hash, x, bucket->h.items[i], r); in bucket_straw_choose()
232 draw *= bucket->straws[i]; in bucket_straw_choose()
238 return bucket->h.items[high]; in bucket_straw_choose()
290 static int bucket_straw2_choose(struct crush_bucket_straw2 *bucket, in bucket_straw2_choose() argument
298 for (i = 0; i < bucket->h.size; i++) { in bucket_straw2_choose()
299 w = bucket->item_weights[i]; in bucket_straw2_choose()
301 u = crush_hash32_3(bucket->h.hash, x, in bucket_straw2_choose()
302 bucket->h.items[i], r); in bucket_straw2_choose()
333 return bucket->h.items[high]; in bucket_straw2_choose()
404 struct crush_bucket *bucket, in crush_choose_firstn() argument
421 struct crush_bucket *in = bucket; in crush_choose_firstn()
431 bucket->id, x, outpos, numrep, in crush_choose_firstn()
441 in = bucket; /* initial bucket */ in crush_choose_firstn()
582 struct crush_bucket *bucket, in crush_choose_indep() argument
592 struct crush_bucket *in = bucket; in crush_choose_indep()
603 bucket->id, x, outpos, numrep); in crush_choose_indep()
617 in = bucket; /* initial bucket */ in crush_choose_indep()