2 * ceph_fs.cc - Some Ceph functions that are shared between kernel space and
8 * Some non-inline ceph helpers
10 #include "include/types.h"
12 int ceph_flags_to_mode(int flags)
14 /* because CEPH_FILE_MODE_PIN is zero, so mode = -1 is error */
17 #ifdef O_DIRECTORY /* fixme */
18 if ((flags & CEPH_O_DIRECTORY) == CEPH_O_DIRECTORY)
19 return CEPH_FILE_MODE_PIN;
22 switch (flags & O_ACCMODE) {
24 mode = CEPH_FILE_MODE_WR;
27 mode = CEPH_FILE_MODE_RD;
30 case O_ACCMODE: /* this is what the VFS does */
31 mode = CEPH_FILE_MODE_RDWR;
38 int ceph_caps_for_mode(int mode)
40 int caps = CEPH_CAP_PIN;
42 if (mode & CEPH_FILE_MODE_RD)
43 caps |= CEPH_CAP_FILE_SHARED |
44 CEPH_CAP_FILE_RD | CEPH_CAP_FILE_CACHE;
45 if (mode & CEPH_FILE_MODE_WR)
46 caps |= CEPH_CAP_FILE_EXCL |
47 CEPH_CAP_FILE_WR | CEPH_CAP_FILE_BUFFER |
48 CEPH_CAP_AUTH_SHARED | CEPH_CAP_AUTH_EXCL |
49 CEPH_CAP_XATTR_SHARED | CEPH_CAP_XATTR_EXCL;
50 if (mode & CEPH_FILE_MODE_LAZY)
51 caps |= CEPH_CAP_FILE_LAZYIO;
56 int ceph_flags_sys2wire(int flags)
60 switch (flags & O_ACCMODE) {
62 wire_flags |= CEPH_O_RDONLY;
65 wire_flags |= CEPH_O_WRONLY;
68 wire_flags |= CEPH_O_RDWR;
73 #define ceph_sys2wire(a) if (flags & a) { wire_flags |= CEPH_##a; flags &= ~a; }
75 ceph_sys2wire(O_CREAT);
76 ceph_sys2wire(O_EXCL);
77 ceph_sys2wire(O_TRUNC);
78 ceph_sys2wire(O_DIRECTORY);
79 ceph_sys2wire(O_NOFOLLOW);