OSDN Git Service

ceph: make CRUSH hash functions non-inline
authorSage Weil <sage@newdream.net>
Sat, 7 Nov 2009 00:39:26 +0000 (16:39 -0800)
committerSage Weil <sage@newdream.net>
Sat, 7 Nov 2009 00:39:26 +0000 (16:39 -0800)
These are way to big to be inline.  I missed crush/* when doing the inline
audit for akpm's review.

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/Makefile
fs/ceph/README
fs/ceph/crush/crush.c
fs/ceph/crush/crush.h
fs/ceph/crush/hash.c [new file with mode: 0644]
fs/ceph/crush/hash.h

index 7da6d69..8bad70a 100644 (file)
@@ -11,7 +11,7 @@ ceph-objs := super.o inode.o dir.o file.o addr.o ioctl.o \
        messenger.o msgpool.o buffer.o \
        mds_client.o mdsmap.o \
        mon_client.o \
-       osd_client.o osdmap.o crush/crush.o crush/mapper.o \
+       osd_client.o osdmap.o crush/crush.o crush/mapper.o crush/hash.o \
        debugfs.o \
        ceph_fs.o ceph_strings.o ceph_frag.o
 
index 231a1df..660e000 100644 (file)
@@ -15,3 +15,4 @@ src/crush/crush.h         fs/ceph/crush/crush.h
 src/crush/mapper.c         fs/ceph/crush/mapper.c
 src/crush/mapper.h         fs/ceph/crush/mapper.h
 src/crush/hash.h           fs/ceph/crush/hash.h
+src/crush/hash.c           fs/ceph/crush/hash.c
index 13755cd..fabd302 100644 (file)
 
 #include "crush.h"
 
+const char *crush_bucket_alg_name(int alg)
+{
+       switch (alg) {
+       case CRUSH_BUCKET_UNIFORM: return "uniform";
+       case CRUSH_BUCKET_LIST: return "list";
+       case CRUSH_BUCKET_TREE: return "tree";
+       case CRUSH_BUCKET_STRAW: return "straw";
+       default: return "unknown";
+       }
+}
+
 /**
  * crush_get_bucket_item_weight - Get weight of an item in given bucket
  * @b: bucket pointer
index 9ac7e09..92c6b3c 100644 (file)
@@ -97,16 +97,7 @@ enum {
        CRUSH_BUCKET_TREE = 3,
        CRUSH_BUCKET_STRAW = 4
 };
-static inline const char *crush_bucket_alg_name(int alg)
-{
-       switch (alg) {
-       case CRUSH_BUCKET_UNIFORM: return "uniform";
-       case CRUSH_BUCKET_LIST: return "list";
-       case CRUSH_BUCKET_TREE: return "tree";
-       case CRUSH_BUCKET_STRAW: return "straw";
-       default: return "unknown";
-       }
-}
+extern const char *crush_bucket_alg_name(int alg);
 
 struct crush_bucket {
        __s32 id;        /* this'll be negative */
diff --git a/fs/ceph/crush/hash.c b/fs/ceph/crush/hash.c
new file mode 100644 (file)
index 0000000..b438c5d
--- /dev/null
@@ -0,0 +1,86 @@
+
+#include <linux/types.h>
+
+/*
+ * Robert Jenkins' function for mixing 32-bit values
+ * http://burtleburtle.net/bob/hash/evahash.html
+ * a, b = random bits, c = input and output
+ */
+#define crush_hashmix(a, b, c) do {                    \
+               a = a-b;  a = a-c;  a = a^(c>>13);      \
+               b = b-c;  b = b-a;  b = b^(a<<8);       \
+               c = c-a;  c = c-b;  c = c^(b>>13);      \
+               a = a-b;  a = a-c;  a = a^(c>>12);      \
+               b = b-c;  b = b-a;  b = b^(a<<16);      \
+               c = c-a;  c = c-b;  c = c^(b>>5);       \
+               a = a-b;  a = a-c;  a = a^(c>>3);       \
+               b = b-c;  b = b-a;  b = b^(a<<10);      \
+               c = c-a;  c = c-b;  c = c^(b>>15);      \
+       } while (0)
+
+#define crush_hash_seed 1315423911
+
+__u32 crush_hash32(__u32 a)
+{
+       __u32 hash = crush_hash_seed ^ a;
+       __u32 b = a;
+       __u32 x = 231232;
+       __u32 y = 1232;
+       crush_hashmix(b, x, hash);
+       crush_hashmix(y, a, hash);
+       return hash;
+}
+
+__u32 crush_hash32_2(__u32 a, __u32 b)
+{
+       __u32 hash = crush_hash_seed ^ a ^ b;
+       __u32 x = 231232;
+       __u32 y = 1232;
+       crush_hashmix(a, b, hash);
+       crush_hashmix(x, a, hash);
+       crush_hashmix(b, y, hash);
+       return hash;
+}
+
+__u32 crush_hash32_3(__u32 a, __u32 b, __u32 c)
+{
+       __u32 hash = crush_hash_seed ^ a ^ b ^ c;
+       __u32 x = 231232;
+       __u32 y = 1232;
+       crush_hashmix(a, b, hash);
+       crush_hashmix(c, x, hash);
+       crush_hashmix(y, a, hash);
+       crush_hashmix(b, x, hash);
+       crush_hashmix(y, c, hash);
+       return hash;
+}
+
+__u32 crush_hash32_4(__u32 a, __u32 b, __u32 c, __u32 d)
+{
+       __u32 hash = crush_hash_seed ^ a ^ b ^ c ^ d;
+       __u32 x = 231232;
+       __u32 y = 1232;
+       crush_hashmix(a, b, hash);
+       crush_hashmix(c, d, hash);
+       crush_hashmix(a, x, hash);
+       crush_hashmix(y, b, hash);
+       crush_hashmix(c, x, hash);
+       crush_hashmix(y, d, hash);
+       return hash;
+}
+
+__u32 crush_hash32_5(__u32 a, __u32 b, __u32 c, __u32 d, __u32 e)
+{
+       __u32 hash = crush_hash_seed ^ a ^ b ^ c ^ d ^ e;
+       __u32 x = 231232;
+       __u32 y = 1232;
+       crush_hashmix(a, b, hash);
+       crush_hashmix(c, d, hash);
+       crush_hashmix(e, x, hash);
+       crush_hashmix(y, a, hash);
+       crush_hashmix(b, x, hash);
+       crush_hashmix(y, c, hash);
+       crush_hashmix(d, x, hash);
+       crush_hashmix(y, e, hash);
+       return hash;
+}
index 42f3312..9ce89f8 100644 (file)
@@ -1,90 +1,12 @@
 #ifndef _CRUSH_HASH_H
 #define _CRUSH_HASH_H
 
-/*
- * Robert Jenkins' function for mixing 32-bit values
- * http://burtleburtle.net/bob/hash/evahash.html
- * a, b = random bits, c = input and output
- */
-#define crush_hashmix(a, b, c) do {                    \
-               a = a-b;  a = a-c;  a = a^(c>>13);      \
-               b = b-c;  b = b-a;  b = b^(a<<8);       \
-               c = c-a;  c = c-b;  c = c^(b>>13);      \
-               a = a-b;  a = a-c;  a = a^(c>>12);      \
-               b = b-c;  b = b-a;  b = b^(a<<16);      \
-               c = c-a;  c = c-b;  c = c^(b>>5);       \
-               a = a-b;  a = a-c;  a = a^(c>>3);       \
-               b = b-c;  b = b-a;  b = b^(a<<10);      \
-               c = c-a;  c = c-b;  c = c^(b>>15);      \
-       } while (0)
-
-#define crush_hash_seed 1315423911
-
-static inline __u32 crush_hash32(__u32 a)
-{
-       __u32 hash = crush_hash_seed ^ a;
-       __u32 b = a;
-       __u32 x = 231232;
-       __u32 y = 1232;
-       crush_hashmix(b, x, hash);
-       crush_hashmix(y, a, hash);
-       return hash;
-}
-
-static inline __u32 crush_hash32_2(__u32 a, __u32 b)
-{
-       __u32 hash = crush_hash_seed ^ a ^ b;
-       __u32 x = 231232;
-       __u32 y = 1232;
-       crush_hashmix(a, b, hash);
-       crush_hashmix(x, a, hash);
-       crush_hashmix(b, y, hash);
-       return hash;
-}
-
-static inline __u32 crush_hash32_3(__u32 a, __u32 b, __u32 c)
-{
-       __u32 hash = crush_hash_seed ^ a ^ b ^ c;
-       __u32 x = 231232;
-       __u32 y = 1232;
-       crush_hashmix(a, b, hash);
-       crush_hashmix(c, x, hash);
-       crush_hashmix(y, a, hash);
-       crush_hashmix(b, x, hash);
-       crush_hashmix(y, c, hash);
-       return hash;
-}
-
-static inline __u32 crush_hash32_4(__u32 a, __u32 b, __u32 c,
-                                  __u32 d)
-{
-       __u32 hash = crush_hash_seed ^ a ^ b ^ c ^ d;
-       __u32 x = 231232;
-       __u32 y = 1232;
-       crush_hashmix(a, b, hash);
-       crush_hashmix(c, d, hash);
-       crush_hashmix(a, x, hash);
-       crush_hashmix(y, b, hash);
-       crush_hashmix(c, x, hash);
-       crush_hashmix(y, d, hash);
-       return hash;
-}
-
-static inline __u32 crush_hash32_5(__u32 a, __u32 b, __u32 c,
-                                  __u32 d, __u32 e)
-{
-       __u32 hash = crush_hash_seed ^ a ^ b ^ c ^ d ^ e;
-       __u32 x = 231232;
-       __u32 y = 1232;
-       crush_hashmix(a, b, hash);
-       crush_hashmix(c, d, hash);
-       crush_hashmix(e, x, hash);
-       crush_hashmix(y, a, hash);
-       crush_hashmix(b, x, hash);
-       crush_hashmix(y, c, hash);
-       crush_hashmix(d, x, hash);
-       crush_hashmix(y, e, hash);
-       return hash;
-}
+extern __u32 crush_hash32(__u32 a);
+extern __u32 crush_hash32_2(__u32 a, __u32 b);
+extern __u32 crush_hash32_3(__u32 a, __u32 b, __u32 c);
+extern __u32 crush_hash32_4(__u32 a, __u32 b, __u32 c,
+                           __u32 d);
+extern __u32 crush_hash32_5(__u32 a, __u32 b, __u32 c,
+                           __u32 d, __u32 e);
 
 #endif