]>
git.proxmox.com Git - ceph.git/blob - ceph/src/common/ceph_fs.cc
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
);