Skip to content

Commit

Permalink
crush: sync up with userspace
Browse files Browse the repository at this point in the history
.. up to ceph.git commit 1db1abc ("crush: eliminate ad hoc diff
between kernel and userspace").  This fixes a bunch of recently pulled
coding style issues and makes includes a bit cleaner.

A patch "crush:Make the function crush_ln static" from Nicholas Krause
<[email protected]> is folded in as crush_ln() has been made static
in userspace as well.

Signed-off-by: Ilya Dryomov <[email protected]>
  • Loading branch information
idryomov committed Jun 25, 2015
1 parent 8f52979 commit b459be7
Show file tree
Hide file tree
Showing 7 changed files with 160 additions and 78 deletions.
40 changes: 38 additions & 2 deletions include/linux/crush/crush.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
#ifndef CEPH_CRUSH_CRUSH_H
#define CEPH_CRUSH_CRUSH_H

#include <linux/types.h>
#ifdef __KERNEL__
# include <linux/types.h>
#else
# include "crush_compat.h"
#endif

/*
* CRUSH is a pseudo-random data distribution algorithm that
Expand All @@ -20,7 +24,11 @@
#define CRUSH_MAGIC 0x00010000ul /* for detecting algorithm revisions */

#define CRUSH_MAX_DEPTH 10 /* max crush hierarchy depth */
#define CRUSH_MAX_RULESET (1<<8) /* max crush ruleset number */
#define CRUSH_MAX_RULES CRUSH_MAX_RULESET /* should be the same as max rulesets */

#define CRUSH_MAX_DEVICE_WEIGHT (100u * 0x10000u)
#define CRUSH_MAX_BUCKET_WEIGHT (65535u * 0x10000u)

#define CRUSH_ITEM_UNDEF 0x7ffffffe /* undefined result (internal use only) */
#define CRUSH_ITEM_NONE 0x7fffffff /* no result */
Expand Down Expand Up @@ -108,6 +116,15 @@ enum {
};
extern const char *crush_bucket_alg_name(int alg);

/*
* although tree was a legacy algorithm, it has been buggy, so
* exclude it.
*/
#define CRUSH_LEGACY_ALLOWED_BUCKET_ALGS ( \
(1 << CRUSH_BUCKET_UNIFORM) | \
(1 << CRUSH_BUCKET_LIST) | \
(1 << CRUSH_BUCKET_STRAW))

struct crush_bucket {
__s32 id; /* this'll be negative */
__u16 type; /* non-zero; type=0 is reserved for devices */
Expand Down Expand Up @@ -174,7 +191,7 @@ struct crush_map {
/* choose local attempts using a fallback permutation before
* re-descent */
__u32 choose_local_fallback_tries;
/* choose attempts before giving up */
/* choose attempts before giving up */
__u32 choose_total_tries;
/* attempt chooseleaf inner descent once for firstn mode; on
* reject retry outer descent. Note that this does *not*
Expand All @@ -187,6 +204,25 @@ struct crush_map {
* that want to limit reshuffling, a value of 3 or 4 will make the
* mappings line up a bit better with previous mappings. */
__u8 chooseleaf_vary_r;

#ifndef __KERNEL__
/*
* version 0 (original) of straw_calc has various flaws. version 1
* fixes a few of them.
*/
__u8 straw_calc_version;

/*
* allowed bucket algs is a bitmask, here the bit positions
* are CRUSH_BUCKET_*. note that these are *bits* and
* CRUSH_BUCKET_* values are not, so we need to or together (1
* << CRUSH_BUCKET_WHATEVER). The 0th bit is not used to
* minimize confusion (bucket type values start at 1).
*/
__u32 allowed_bucket_algs;

__u32 *choose_tries;
#endif
};


Expand Down
6 changes: 6 additions & 0 deletions include/linux/crush/hash.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
#ifndef CEPH_CRUSH_HASH_H
#define CEPH_CRUSH_HASH_H

#ifdef __KERNEL__
# include <linux/types.h>
#else
# include "crush_compat.h"
#endif

#define CRUSH_HASH_RJENKINS1 0

#define CRUSH_HASH_DEFAULT CRUSH_HASH_RJENKINS1
Expand Down
2 changes: 1 addition & 1 deletion include/linux/crush/mapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
* LGPL2
*/

#include <linux/crush/crush.h>
#include "crush.h"

extern int crush_find_rule(const struct crush_map *map, int ruleset, int type, int size);
extern int crush_do_rule(const struct crush_map *map,
Expand Down
13 changes: 6 additions & 7 deletions net/ceph/crush/crush.c
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@

#ifdef __KERNEL__
# include <linux/slab.h>
# include <linux/crush/crush.h>
#else
# include <stdlib.h>
# include <assert.h>
# define kfree(x) do { if (x) free(x); } while (0)
# define BUG_ON(x) assert(!(x))
# include "crush_compat.h"
# include "crush.h"
#endif

#include <linux/crush/crush.h>

const char *crush_bucket_alg_name(int alg)
{
switch (alg) {
Expand Down Expand Up @@ -134,6 +130,9 @@ void crush_destroy(struct crush_map *map)
kfree(map->rules);
}

#ifndef __KERNEL__
kfree(map->choose_tries);
#endif
kfree(map);
}

Expand Down
32 changes: 15 additions & 17 deletions net/ceph/crush/crush_ln_table.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,20 @@
*
*/

#if defined(__linux__)
#include <linux/types.h>
#elif defined(__FreeBSD__)
#include <sys/types.h>
#endif

#ifndef CEPH_CRUSH_LN_H
#define CEPH_CRUSH_LN_H

#ifdef __KERNEL__
# include <linux/types.h>
#else
# include "crush_compat.h"
#endif

// RH_LH_tbl[2*k] = 2^48/(1.0+k/128.0)
// RH_LH_tbl[2*k+1] = 2^48*log2(1.0+k/128.0)

static int64_t __RH_LH_tbl[128*2+2] = {
/*
* RH_LH_tbl[2*k] = 2^48/(1.0+k/128.0)
* RH_LH_tbl[2*k+1] = 2^48*log2(1.0+k/128.0)
*/
static __s64 __RH_LH_tbl[128*2+2] = {
0x0001000000000000ll, 0x0000000000000000ll, 0x0000fe03f80fe040ll, 0x000002dfca16dde1ll,
0x0000fc0fc0fc0fc1ll, 0x000005b9e5a170b4ll, 0x0000fa232cf25214ll, 0x0000088e68ea899all,
0x0000f83e0f83e0f9ll, 0x00000b5d69bac77ell, 0x0000f6603d980f67ll, 0x00000e26fd5c8555ll,
Expand Down Expand Up @@ -89,11 +89,12 @@ static int64_t __RH_LH_tbl[128*2+2] = {
0x0000820820820821ll, 0x0000fa2f045e7832ll, 0x000081848da8faf1ll, 0x0000fba577877d7dll,
0x0000810204081021ll, 0x0000fd1a708bbe11ll, 0x0000808080808081ll, 0x0000fe8df263f957ll,
0x0000800000000000ll, 0x0000ffff00000000ll,
};

};

// LL_tbl[k] = 2^48*log2(1.0+k/2^15);
static int64_t __LL_tbl[256] = {
/*
* LL_tbl[k] = 2^48*log2(1.0+k/2^15)
*/
static __s64 __LL_tbl[256] = {
0x0000000000000000ull, 0x00000002e2a60a00ull, 0x000000070cb64ec5ull, 0x00000009ef50ce67ull,
0x0000000cd1e588fdull, 0x0000000fb4747e9cull, 0x0000001296fdaf5eull, 0x0000001579811b58ull,
0x000000185bfec2a1ull, 0x0000001b3e76a552ull, 0x0000001e20e8c380ull, 0x0000002103551d43ull,
Expand Down Expand Up @@ -160,7 +161,4 @@ static int64_t __LL_tbl[256] = {
0x000002d4562d2ec6ull, 0x000002d73330209dull, 0x000002da102d63b0ull, 0x000002dced24f814ull,
};




#endif
8 changes: 5 additions & 3 deletions net/ceph/crush/hash.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@

#include <linux/types.h>
#include <linux/crush/hash.h>
#ifdef __KERNEL__
# include <linux/crush/hash.h>
#else
# include "hash.h"
#endif

/*
* Robert Jenkins' function for mixing 32-bit values
Expand Down
Loading

0 comments on commit b459be7

Please sign in to comment.