]> git.proxmox.com Git - ceph.git/blame - ceph/src/common/ceph_fs.cc
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / common / ceph_fs.cc
CommitLineData
7c673cae
FG
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
12int 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
7c673cae
FG
17 if ((flags & CEPH_O_DIRECTORY) == CEPH_O_DIRECTORY)
18 return CEPH_FILE_MODE_PIN;
7c673cae
FG
19
20 switch (flags & O_ACCMODE) {
21 case CEPH_O_WRONLY:
22 mode = CEPH_FILE_MODE_WR;
23 break;
24 case CEPH_O_RDONLY:
25 mode = CEPH_FILE_MODE_RD;
26 break;
27 case CEPH_O_RDWR:
28 case O_ACCMODE: /* this is what the VFS does */
29 mode = CEPH_FILE_MODE_RDWR;
30 break;
31 }
32
11fdf7f2
TL
33 if (flags & CEPH_O_LAZY)
34 mode |= CEPH_FILE_MODE_LAZY;
35
7c673cae
FG
36 return mode;
37}
38
39int ceph_caps_for_mode(int mode)
40{
41 int caps = CEPH_CAP_PIN;
42
43 if (mode & CEPH_FILE_MODE_RD)
44 caps |= CEPH_CAP_FILE_SHARED |
45 CEPH_CAP_FILE_RD | CEPH_CAP_FILE_CACHE;
46 if (mode & CEPH_FILE_MODE_WR)
47 caps |= CEPH_CAP_FILE_EXCL |
48 CEPH_CAP_FILE_WR | CEPH_CAP_FILE_BUFFER |
49 CEPH_CAP_AUTH_SHARED | CEPH_CAP_AUTH_EXCL |
50 CEPH_CAP_XATTR_SHARED | CEPH_CAP_XATTR_EXCL;
51 if (mode & CEPH_FILE_MODE_LAZY)
52 caps |= CEPH_CAP_FILE_LAZYIO;
53
54 return caps;
55}
56
57int ceph_flags_sys2wire(int flags)
58{
59 int wire_flags = 0;
60
61 switch (flags & O_ACCMODE) {
62 case O_RDONLY:
63 wire_flags |= CEPH_O_RDONLY;
64 break;
65 case O_WRONLY:
66 wire_flags |= CEPH_O_WRONLY;
67 break;
68 case O_RDWR:
69 wire_flags |= CEPH_O_RDWR;
70 break;
71 }
72 flags &= ~O_ACCMODE;
73
74#define ceph_sys2wire(a) if (flags & a) { wire_flags |= CEPH_##a; flags &= ~a; }
75
76 ceph_sys2wire(O_CREAT);
77 ceph_sys2wire(O_EXCL);
78 ceph_sys2wire(O_TRUNC);
f67539c2
TL
79
80 #ifndef _WIN32
7c673cae
FG
81 ceph_sys2wire(O_DIRECTORY);
82 ceph_sys2wire(O_NOFOLLOW);
f67539c2
TL
83 // In some cases, FILE_FLAG_BACKUP_SEMANTICS may be used instead
84 // of O_DIRECTORY. We may need some workarounds in order to handle
85 // the fact that those flags are not available on Windows.
86 #endif
7c673cae
FG
87
88#undef ceph_sys2wire
89
90 return wire_flags;
91}