Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/net/ceph/ceph_fs.c
15109 views
1
/*
2
* Some non-inline ceph helpers
3
*/
4
#include <linux/module.h>
5
#include <linux/ceph/types.h>
6
7
/*
8
* return true if @layout appears to be valid
9
*/
10
int ceph_file_layout_is_valid(const struct ceph_file_layout *layout)
11
{
12
__u32 su = le32_to_cpu(layout->fl_stripe_unit);
13
__u32 sc = le32_to_cpu(layout->fl_stripe_count);
14
__u32 os = le32_to_cpu(layout->fl_object_size);
15
16
/* stripe unit, object size must be non-zero, 64k increment */
17
if (!su || (su & (CEPH_MIN_STRIPE_UNIT-1)))
18
return 0;
19
if (!os || (os & (CEPH_MIN_STRIPE_UNIT-1)))
20
return 0;
21
/* object size must be a multiple of stripe unit */
22
if (os < su || os % su)
23
return 0;
24
/* stripe count must be non-zero */
25
if (!sc)
26
return 0;
27
return 1;
28
}
29
30
31
int ceph_flags_to_mode(int flags)
32
{
33
int mode;
34
35
#ifdef O_DIRECTORY /* fixme */
36
if ((flags & O_DIRECTORY) == O_DIRECTORY)
37
return CEPH_FILE_MODE_PIN;
38
#endif
39
40
switch (flags & O_ACCMODE) {
41
case O_WRONLY:
42
mode = CEPH_FILE_MODE_WR;
43
break;
44
case O_RDONLY:
45
mode = CEPH_FILE_MODE_RD;
46
break;
47
case O_RDWR:
48
case O_ACCMODE: /* this is what the VFS does */
49
mode = CEPH_FILE_MODE_RDWR;
50
break;
51
}
52
#ifdef O_LAZY
53
if (flags & O_LAZY)
54
mode |= CEPH_FILE_MODE_LAZY;
55
#endif
56
57
return mode;
58
}
59
EXPORT_SYMBOL(ceph_flags_to_mode);
60
61
int ceph_caps_for_mode(int mode)
62
{
63
int caps = CEPH_CAP_PIN;
64
65
if (mode & CEPH_FILE_MODE_RD)
66
caps |= CEPH_CAP_FILE_SHARED |
67
CEPH_CAP_FILE_RD | CEPH_CAP_FILE_CACHE;
68
if (mode & CEPH_FILE_MODE_WR)
69
caps |= CEPH_CAP_FILE_EXCL |
70
CEPH_CAP_FILE_WR | CEPH_CAP_FILE_BUFFER |
71
CEPH_CAP_AUTH_SHARED | CEPH_CAP_AUTH_EXCL |
72
CEPH_CAP_XATTR_SHARED | CEPH_CAP_XATTR_EXCL;
73
if (mode & CEPH_FILE_MODE_LAZY)
74
caps |= CEPH_CAP_FILE_LAZYIO;
75
76
return caps;
77
}
78
EXPORT_SYMBOL(ceph_caps_for_mode);
79
80