diff options
author | Ilya Dryomov | 2013-12-24 21:19:24 +0200 |
---|---|---|
committer | Ilya Dryomov | 2013-12-31 20:32:14 +0200 |
commit | e8ef19c4ad161768e1d8309d5ae18481c098eb81 (patch) | |
tree | 9ba7cd6965c530228085fba2bf23dcc132ea94d3 /net/ceph/crush | |
parent | 2a4ba74ef67ad3a1645d78487ed7ccd0f40063c0 (diff) |
crush: eliminate CRUSH_MAX_SET result size limitation
This is only present to size the temporary scratch arrays that we put on
the stack. Let the caller allocate them as they wish and remove the
limitation.
Reflects ceph.git commit 1cfe140bf2dab99517589a82a916f4c75b9492d1.
Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'net/ceph/crush')
-rw-r--r-- | net/ceph/crush/mapper.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/net/ceph/crush/mapper.c b/net/ceph/crush/mapper.c index 82cab7d3e89d..dcf48bc504ea 100644 --- a/net/ceph/crush/mapper.c +++ b/net/ceph/crush/mapper.c @@ -478,15 +478,17 @@ reject: * @result_max: maximum result size * @weight: weight vector (for map leaves) * @weight_max: size of weight vector + * @scratch: scratch vector for private use; must be >= 3 * result_max */ int crush_do_rule(const struct crush_map *map, int ruleno, int x, int *result, int result_max, - const __u32 *weight, int weight_max) + const __u32 *weight, int weight_max, + int *scratch) { int result_len; - int a[CRUSH_MAX_SET]; - int b[CRUSH_MAX_SET]; - int c[CRUSH_MAX_SET]; + int *a = scratch; + int *b = scratch + result_max; + int *c = scratch + result_max*2; int recurse_to_leaf; int *w; int wsize = 0; |