Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
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
Show file tree
Hide file tree
Showing 6 changed files with 1,402 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 7ad920b504a980adcab4d3f6b85695526e6fd7bb
refs/heads/master: 0dee3c28af2fbe22ca62739a7f57da5435d35793
80 changes: 80 additions & 0 deletions trunk/fs/ceph/ceph_fs.c
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);
}

Loading

0 comments on commit 293d411

Please sign in to comment.