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
= 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
);
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 */
31 int ceph_flags_to_mode(int flags
)
35 #ifdef O_DIRECTORY /* fixme */
36 if ((flags
& O_DIRECTORY
) == O_DIRECTORY
)
37 return CEPH_FILE_MODE_PIN
;
39 if ((flags
& O_APPEND
) == O_APPEND
)
42 if ((flags
& O_ACCMODE
) == O_RDWR
)
43 mode
= CEPH_FILE_MODE_RDWR
;
44 else if ((flags
& O_ACCMODE
) == O_WRONLY
)
45 mode
= CEPH_FILE_MODE_WR
;
47 mode
= CEPH_FILE_MODE_RD
;
51 mode
|= CEPH_FILE_MODE_LAZY
;
56 EXPORT_SYMBOL(ceph_flags_to_mode
);
58 int ceph_caps_for_mode(int mode
)
60 int caps
= CEPH_CAP_PIN
;
62 if (mode
& CEPH_FILE_MODE_RD
)
63 caps
|= CEPH_CAP_FILE_SHARED
|
64 CEPH_CAP_FILE_RD
| CEPH_CAP_FILE_CACHE
;
65 if (mode
& CEPH_FILE_MODE_WR
)
66 caps
|= CEPH_CAP_FILE_EXCL
|
67 CEPH_CAP_FILE_WR
| CEPH_CAP_FILE_BUFFER
|
68 CEPH_CAP_AUTH_SHARED
| CEPH_CAP_AUTH_EXCL
|
69 CEPH_CAP_XATTR_SHARED
| CEPH_CAP_XATTR_EXCL
;
70 if (mode
& CEPH_FILE_MODE_LAZY
)
71 caps
|= CEPH_CAP_FILE_LAZYIO
;
75 EXPORT_SYMBOL(ceph_caps_for_mode
);