Sage Weil | 5cd068c | 2010-07-07 08:38:17 -0700 | [diff] [blame] | 1 | #ifndef CEPH_CRUSH_MAPPER_H |
| 2 | #define CEPH_CRUSH_MAPPER_H |
Sage Weil | 5ecc0a0 | 2009-10-06 11:31:11 -0700 | [diff] [blame] | 3 | |
| 4 | /* |
| 5 | * CRUSH functions for find rules and then mapping an input to an |
| 6 | * output set. |
| 7 | * |
| 8 | * LGPL2 |
| 9 | */ |
| 10 | |
Ilya Dryomov | b459be7 | 2015-06-12 13:21:07 +0300 | [diff] [blame] | 11 | #include "crush.h" |
Sage Weil | 5ecc0a0 | 2009-10-06 11:31:11 -0700 | [diff] [blame] | 12 | |
Sage Weil | 8b12d47 | 2012-05-07 15:38:35 -0700 | [diff] [blame] | 13 | extern int crush_find_rule(const struct crush_map *map, int ruleset, int type, int size); |
Ilya Dryomov | 069f322 | 2017-06-22 19:44:05 +0200 | [diff] [blame] | 14 | int crush_do_rule(const struct crush_map *map, |
| 15 | int ruleno, int x, int *result, int result_max, |
| 16 | const __u32 *weight, int weight_max, |
| 17 | void *cwin, const struct crush_choose_arg *choose_args); |
Ilya Dryomov | 743efcf | 2017-01-31 15:55:06 +0100 | [diff] [blame] | 18 | |
| 19 | /* |
| 20 | * Returns the exact amount of workspace that will need to be used |
| 21 | * for a given combination of crush_map and result_max. The caller can |
| 22 | * then allocate this much on its own, either on the stack, in a |
| 23 | * per-thread long-lived buffer, or however it likes. |
| 24 | */ |
| 25 | static inline size_t crush_work_size(const struct crush_map *map, |
| 26 | int result_max) |
| 27 | { |
| 28 | return map->working_size + result_max * 3 * sizeof(__u32); |
| 29 | } |
Ilya Dryomov | 66a0e2d | 2017-01-31 15:55:06 +0100 | [diff] [blame] | 30 | |
| 31 | void crush_init_workspace(const struct crush_map *map, void *v); |
Sage Weil | 5ecc0a0 | 2009-10-06 11:31:11 -0700 | [diff] [blame] | 32 | |
| 33 | #endif |