Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / 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 }