-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 188543 b: refs/heads/master c: 0dee3c2 h: refs/heads/master i: 188541: 63f3b84 188539: 8c2e5d6 188535: 61af4d1 188527: b8fc511 188511: b854c30 188479: 4dddfed 188415: 57c45dd v: v3
- Loading branch information
Sage Weil
committed
Oct 6, 2009
1 parent
12fc97c
commit 293d411
Showing
6 changed files
with
1,402 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 7ad920b504a980adcab4d3f6b85695526e6fd7bb | ||
refs/heads/master: 0dee3c28af2fbe22ca62739a7f57da5435d35793 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* | ||
* Some non-inline ceph helpers | ||
*/ | ||
#include "types.h" | ||
|
||
int ceph_flags_to_mode(int flags) | ||
{ | ||
#ifdef O_DIRECTORY /* fixme */ | ||
if ((flags & O_DIRECTORY) == O_DIRECTORY) | ||
return CEPH_FILE_MODE_PIN; | ||
#endif | ||
#ifdef O_LAZY | ||
if (flags & O_LAZY) | ||
return CEPH_FILE_MODE_LAZY; | ||
#endif | ||
if ((flags & O_APPEND) == O_APPEND) | ||
flags |= O_WRONLY; | ||
|
||
flags &= O_ACCMODE; | ||
if ((flags & O_RDWR) == O_RDWR) | ||
return CEPH_FILE_MODE_RDWR; | ||
if ((flags & O_WRONLY) == O_WRONLY) | ||
return CEPH_FILE_MODE_WR; | ||
return CEPH_FILE_MODE_RD; | ||
} | ||
|
||
int ceph_caps_for_mode(int mode) | ||
{ | ||
switch (mode) { | ||
case CEPH_FILE_MODE_PIN: | ||
return CEPH_CAP_PIN; | ||
case CEPH_FILE_MODE_RD: | ||
return CEPH_CAP_PIN | CEPH_CAP_FILE_SHARED | | ||
CEPH_CAP_FILE_RD | CEPH_CAP_FILE_CACHE; | ||
case CEPH_FILE_MODE_RDWR: | ||
return CEPH_CAP_PIN | CEPH_CAP_FILE_SHARED | | ||
CEPH_CAP_FILE_EXCL | | ||
CEPH_CAP_FILE_RD | CEPH_CAP_FILE_CACHE | | ||
CEPH_CAP_FILE_WR | CEPH_CAP_FILE_BUFFER | | ||
CEPH_CAP_AUTH_SHARED | CEPH_CAP_AUTH_EXCL | | ||
CEPH_CAP_XATTR_SHARED | CEPH_CAP_XATTR_EXCL; | ||
case CEPH_FILE_MODE_WR: | ||
return CEPH_CAP_PIN | CEPH_CAP_FILE_SHARED | | ||
CEPH_CAP_FILE_EXCL | | ||
CEPH_CAP_FILE_WR | CEPH_CAP_FILE_BUFFER | | ||
CEPH_CAP_AUTH_SHARED | CEPH_CAP_AUTH_EXCL | | ||
CEPH_CAP_XATTR_SHARED | CEPH_CAP_XATTR_EXCL; | ||
} | ||
return 0; | ||
} | ||
|
||
/* Name hashing routines. Initial hash value */ | ||
/* Hash courtesy of the R5 hash in reiserfs modulo sign bits */ | ||
#define ceph_init_name_hash() 0 | ||
|
||
/* partial hash update function. Assume roughly 4 bits per character */ | ||
static unsigned long ceph_partial_name_hash(unsigned long c, | ||
unsigned long prevhash) | ||
{ | ||
return (prevhash + (c << 4) + (c >> 4)) * 11; | ||
} | ||
|
||
/* | ||
* Finally: cut down the number of bits to a int value (and try to avoid | ||
* losing bits) | ||
*/ | ||
static unsigned long ceph_end_name_hash(unsigned long hash) | ||
{ | ||
return hash & 0xffffffff; | ||
} | ||
|
||
/* Compute the hash for a name string. */ | ||
unsigned int ceph_full_name_hash(const char *name, unsigned int len) | ||
{ | ||
unsigned long hash = ceph_init_name_hash(); | ||
while (len--) | ||
hash = ceph_partial_name_hash(*name++, hash); | ||
return ceph_end_name_hash(hash); | ||
} | ||
|
Oops, something went wrong.