]> git.proxmox.com Git - ceph.git/blob - ceph/src/common/ceph_fs.cc
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / common / ceph_fs.cc
1 /*
2 * ceph_fs.cc - Some Ceph functions that are shared between kernel space and
3 * user space.
4 *
5 */
6
7 /*
8 * Some non-inline ceph helpers
9 */
10 #include "include/types.h"
11
12 int ceph_flags_to_mode(int flags)
13 {
14 /* because CEPH_FILE_MODE_PIN is zero, so mode = -1 is error */
15 int mode = -1;
16
17 #ifdef O_DIRECTORY /* fixme */
18 if ((flags & CEPH_O_DIRECTORY) == CEPH_O_DIRECTORY)
19 return CEPH_FILE_MODE_PIN;
20 #endif
21
22 switch (flags & O_ACCMODE) {
23 case CEPH_O_WRONLY:
24 mode = CEPH_FILE_MODE_WR;
25 break;
26 case CEPH_O_RDONLY:
27 mode = CEPH_FILE_MODE_RD;
28 break;
29 case CEPH_O_RDWR:
30 case O_ACCMODE: /* this is what the VFS does */
31 mode = CEPH_FILE_MODE_RDWR;
32 break;
33 }
34
35 return mode;
36 }
37
38 int ceph_caps_for_mode(int mode)
39 {
40 int caps = CEPH_CAP_PIN;
41
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;
52
53 return caps;
54 }
55
56 int ceph_flags_sys2wire(int flags)
57 {
58 int wire_flags = 0;
59
60 switch (flags & O_ACCMODE) {
61 case O_RDONLY:
62 wire_flags |= CEPH_O_RDONLY;
63 break;
64 case O_WRONLY:
65 wire_flags |= CEPH_O_WRONLY;
66 break;
67 case O_RDWR:
68 wire_flags |= CEPH_O_RDWR;
69 break;
70 }
71 flags &= ~O_ACCMODE;
72
73 #define ceph_sys2wire(a) if (flags & a) { wire_flags |= CEPH_##a; flags &= ~a; }
74
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);
80
81 #undef ceph_sys2wire
82
83 return wire_flags;
84 }