net/ceph/ceph_hash.c
Source file repositories/reference/linux-study-clean/net/ceph/ceph_hash.c
File Facts
- System
- Linux kernel
- Corpus path
net/ceph/ceph_hash.c- Extension
.c- Size
- 2952 bytes
- Lines
- 132
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
Dependency Surface
linux/ceph/types.hlinux/module.h
Detected Declarations
function ceph_str_hash_rjenkinsfunction ceph_str_hash_linuxfunction ceph_str_hashexport ceph_str_hashexport ceph_str_hash_name
Annotated Snippet
#include <linux/ceph/types.h>
#include <linux/module.h>
/*
* Robert Jenkin's hash function.
* https://burtleburtle.net/bob/hash/evahash.html
* This is in the public domain.
*/
#define mix(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)
unsigned int ceph_str_hash_rjenkins(const char *str, unsigned int length)
{
const unsigned char *k = (const unsigned char *)str;
__u32 a, b, c; /* the internal state */
__u32 len; /* how many key bytes still need mixing */
/* Set up the internal state */
len = length;
a = 0x9e3779b9; /* the golden ratio; an arbitrary value */
b = a;
c = 0; /* variable initialization of internal state */
/* handle most of the key */
while (len >= 12) {
a = a + (k[0] + ((__u32)k[1] << 8) + ((__u32)k[2] << 16) +
((__u32)k[3] << 24));
b = b + (k[4] + ((__u32)k[5] << 8) + ((__u32)k[6] << 16) +
((__u32)k[7] << 24));
c = c + (k[8] + ((__u32)k[9] << 8) + ((__u32)k[10] << 16) +
((__u32)k[11] << 24));
mix(a, b, c);
k = k + 12;
len = len - 12;
}
/* handle the last 11 bytes */
c = c + length;
switch (len) {
case 11:
c = c + ((__u32)k[10] << 24);
fallthrough;
case 10:
c = c + ((__u32)k[9] << 16);
fallthrough;
case 9:
c = c + ((__u32)k[8] << 8);
/* the first byte of c is reserved for the length */
fallthrough;
case 8:
b = b + ((__u32)k[7] << 24);
fallthrough;
case 7:
b = b + ((__u32)k[6] << 16);
fallthrough;
case 6:
b = b + ((__u32)k[5] << 8);
fallthrough;
case 5:
b = b + k[4];
fallthrough;
case 4:
a = a + ((__u32)k[3] << 24);
fallthrough;
case 3:
a = a + ((__u32)k[2] << 16);
fallthrough;
case 2:
a = a + ((__u32)k[1] << 8);
fallthrough;
case 1:
a = a + k[0];
/* case 0: nothing left to add */
}
mix(a, b, c);
return c;
}
/*
Annotation
- Immediate include surface: `linux/ceph/types.h`, `linux/module.h`.
- Detected declarations: `function ceph_str_hash_rjenkins`, `function ceph_str_hash_linux`, `function ceph_str_hash`, `export ceph_str_hash`, `export ceph_str_hash_name`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.