Lines Matching refs:bucket
73 static int bucket_perm_choose(struct crush_bucket *bucket, in bucket_perm_choose() argument
76 unsigned int pr = r % bucket->size; in bucket_perm_choose()
80 if (bucket->perm_x != (__u32)x || bucket->perm_n == 0) { in bucket_perm_choose()
81 dprintk("bucket %d new x=%d\n", bucket->id, x); in bucket_perm_choose()
82 bucket->perm_x = x; in bucket_perm_choose()
86 s = crush_hash32_3(bucket->hash, x, bucket->id, 0) % in bucket_perm_choose()
87 bucket->size; in bucket_perm_choose()
88 bucket->perm[0] = s; in bucket_perm_choose()
89 bucket->perm_n = 0xffff; /* magic value, see below */ in bucket_perm_choose()
93 for (i = 0; i < bucket->size; i++) in bucket_perm_choose()
94 bucket->perm[i] = i; in bucket_perm_choose()
95 bucket->perm_n = 0; in bucket_perm_choose()
96 } else if (bucket->perm_n == 0xffff) { in bucket_perm_choose()
98 for (i = 1; i < bucket->size; i++) in bucket_perm_choose()
99 bucket->perm[i] = i; in bucket_perm_choose()
100 bucket->perm[bucket->perm[0]] = 0; in bucket_perm_choose()
101 bucket->perm_n = 1; in bucket_perm_choose()
105 for (i = 0; i < bucket->perm_n; i++) in bucket_perm_choose()
106 dprintk(" perm_choose have %d: %d\n", i, bucket->perm[i]); in bucket_perm_choose()
107 while (bucket->perm_n <= pr) { in bucket_perm_choose()
108 unsigned int p = bucket->perm_n; in bucket_perm_choose()
110 if (p < bucket->size - 1) { in bucket_perm_choose()
111 i = crush_hash32_3(bucket->hash, x, bucket->id, p) % in bucket_perm_choose()
112 (bucket->size - p); in bucket_perm_choose()
114 unsigned int t = bucket->perm[p + i]; in bucket_perm_choose()
115 bucket->perm[p + i] = bucket->perm[p]; in bucket_perm_choose()
116 bucket->perm[p] = t; in bucket_perm_choose()
120 bucket->perm_n++; in bucket_perm_choose()
122 for (i = 0; i < bucket->size; i++) in bucket_perm_choose()
123 dprintk(" perm_choose %d: %d\n", i, bucket->perm[i]); in bucket_perm_choose()
125 s = bucket->perm[pr]; in bucket_perm_choose()
127 dprintk(" perm_choose %d sz=%d x=%d r=%d (%d) s=%d\n", bucket->id, in bucket_perm_choose()
128 bucket->size, x, r, pr, s); in bucket_perm_choose()
129 return bucket->items[s]; in bucket_perm_choose()
133 static int bucket_uniform_choose(struct crush_bucket_uniform *bucket, in bucket_uniform_choose() argument
136 return bucket_perm_choose(&bucket->h, x, r); in bucket_uniform_choose()
140 static int bucket_list_choose(struct crush_bucket_list *bucket, in bucket_list_choose() argument
145 for (i = bucket->h.size-1; i >= 0; i--) { in bucket_list_choose()
146 __u64 w = crush_hash32_4(bucket->h.hash, x, bucket->h.items[i], in bucket_list_choose()
147 r, bucket->h.id); in bucket_list_choose()
151 i, x, r, bucket->h.items[i], bucket->item_weights[i], in bucket_list_choose()
152 bucket->sum_weights[i], w); in bucket_list_choose()
153 w *= bucket->sum_weights[i]; in bucket_list_choose()
156 if (w < bucket->item_weights[i]) in bucket_list_choose()
157 return bucket->h.items[i]; in bucket_list_choose()
160 dprintk("bad list sums for bucket %d\n", bucket->h.id); in bucket_list_choose()
161 return bucket->h.items[0]; in bucket_list_choose()
193 static int bucket_tree_choose(struct crush_bucket_tree *bucket, in bucket_tree_choose() argument
201 n = bucket->num_nodes >> 1; in bucket_tree_choose()
206 w = bucket->node_weights[n]; in bucket_tree_choose()
207 t = (__u64)crush_hash32_4(bucket->h.hash, x, n, r, in bucket_tree_choose()
208 bucket->h.id) * (__u64)w; in bucket_tree_choose()
213 if (t < bucket->node_weights[l]) in bucket_tree_choose()
219 return bucket->h.items[n >> 1]; in bucket_tree_choose()
225 static int bucket_straw_choose(struct crush_bucket_straw *bucket, in bucket_straw_choose() argument
233 for (i = 0; i < bucket->h.size; i++) { in bucket_straw_choose()
234 draw = crush_hash32_3(bucket->h.hash, x, bucket->h.items[i], r); in bucket_straw_choose()
236 draw *= bucket->straws[i]; in bucket_straw_choose()
242 return bucket->h.items[high]; in bucket_straw_choose()
297 static int bucket_straw2_choose(struct crush_bucket_straw2 *bucket, in bucket_straw2_choose() argument
305 for (i = 0; i < bucket->h.size; i++) { in bucket_straw2_choose()
306 w = bucket->item_weights[i]; in bucket_straw2_choose()
308 u = crush_hash32_3(bucket->h.hash, x, in bucket_straw2_choose()
309 bucket->h.items[i], r); in bucket_straw2_choose()
340 return bucket->h.items[high]; in bucket_straw2_choose()
411 struct crush_bucket *bucket, in crush_choose_firstn() argument
428 struct crush_bucket *in = bucket; in crush_choose_firstn()
438 bucket->id, x, outpos, numrep, in crush_choose_firstn()
448 in = bucket; /* initial bucket */ in crush_choose_firstn()
593 struct crush_bucket *bucket, in crush_choose_indep() argument
603 struct crush_bucket *in = bucket; in crush_choose_indep()
614 bucket->id, x, outpos, numrep); in crush_choose_indep()
642 in = bucket; /* initial bucket */ in crush_choose_indep()