2 * Some non-inline ceph helpers
4 #include <linux/module.h>
5 #include <linux/ceph/types.h>
8 * return true if @layout appears to be valid
10 int ceph_file_layout_is_valid(const struct ceph_file_layout *layout)
12 __u32 su = layout->stripe_unit;
13 __u32 sc = layout->stripe_count;
14 __u32 os = layout->object_size;
16 /* stripe unit, object size must be non-zero, 64k increment */
17 if (!su || (su & (CEPH_MIN_STRIPE_UNIT-1)))
19 if (!os || (os & (CEPH_MIN_STRIPE_UNIT-1)))
21 /* object size must be a multiple of stripe unit */
22 if (os < su || os % su)
24 /* stripe count must be non-zero */
30 void ceph_file_layout_from_legacy(struct ceph_file_layout *fl,
31 struct ceph_file_layout_legacy *legacy)
33 fl->stripe_unit = le32_to_cpu(legacy->fl_stripe_unit);
34 fl->stripe_count = le32_to_cpu(legacy->fl_stripe_count);
35 fl->object_size = le32_to_cpu(legacy->fl_object_size);
36 fl->pool_id = le32_to_cpu(legacy->fl_pg_pool);
37 if (fl->pool_id == 0 && fl->stripe_unit == 0 &&
38 fl->stripe_count == 0 && fl->object_size == 0)
41 EXPORT_SYMBOL(ceph_file_layout_from_legacy);
43 void ceph_file_layout_to_legacy(struct ceph_file_layout *fl,
44 struct ceph_file_layout_legacy *legacy)
46 legacy->fl_stripe_unit = cpu_to_le32(fl->stripe_unit);
47 legacy->fl_stripe_count = cpu_to_le32(fl->stripe_count);
48 legacy->fl_object_size = cpu_to_le32(fl->object_size);
50 legacy->fl_pg_pool = cpu_to_le32(fl->pool_id);
52 legacy->fl_pg_pool = 0;
54 EXPORT_SYMBOL(ceph_file_layout_to_legacy);
56 int ceph_flags_to_mode(int flags)
60 #ifdef O_DIRECTORY /* fixme */
61 if ((flags & O_DIRECTORY) == O_DIRECTORY)
62 return CEPH_FILE_MODE_PIN;
65 switch (flags & O_ACCMODE) {
67 mode = CEPH_FILE_MODE_WR;
70 mode = CEPH_FILE_MODE_RD;
73 case O_ACCMODE: /* this is what the VFS does */
74 mode = CEPH_FILE_MODE_RDWR;
79 mode |= CEPH_FILE_MODE_LAZY;
84 EXPORT_SYMBOL(ceph_flags_to_mode);
86 int ceph_caps_for_mode(int mode)
88 int caps = CEPH_CAP_PIN;
90 if (mode & CEPH_FILE_MODE_RD)
91 caps |= CEPH_CAP_FILE_SHARED |
92 CEPH_CAP_FILE_RD | CEPH_CAP_FILE_CACHE;
93 if (mode & CEPH_FILE_MODE_WR)
94 caps |= CEPH_CAP_FILE_EXCL |
95 CEPH_CAP_FILE_WR | CEPH_CAP_FILE_BUFFER |
96 CEPH_CAP_AUTH_SHARED | CEPH_CAP_AUTH_EXCL |
97 CEPH_CAP_XATTR_SHARED | CEPH_CAP_XATTR_EXCL;
98 if (mode & CEPH_FILE_MODE_LAZY)
99 caps |= CEPH_CAP_FILE_LAZYIO;
103 EXPORT_SYMBOL(ceph_caps_for_mode);