diff options
Diffstat (limited to 'include/linux/ceph/osdmap.h')
-rw-r--r-- | include/linux/ceph/osdmap.h | 66 |
1 files changed, 41 insertions, 25 deletions
diff --git a/include/linux/ceph/osdmap.h b/include/linux/ceph/osdmap.h index d05cc4451af6..49ff69f0746b 100644 --- a/include/linux/ceph/osdmap.h +++ b/include/linux/ceph/osdmap.h | |||
@@ -35,13 +35,26 @@ struct ceph_pg_pool_info { | |||
35 | u8 object_hash; | 35 | u8 object_hash; |
36 | u32 pg_num, pgp_num; | 36 | u32 pg_num, pgp_num; |
37 | int pg_num_mask, pgp_num_mask; | 37 | int pg_num_mask, pgp_num_mask; |
38 | s64 read_tier; | ||
39 | s64 write_tier; /* wins for read+write ops */ | ||
38 | u64 flags; | 40 | u64 flags; |
39 | char *name; | 41 | char *name; |
40 | }; | 42 | }; |
41 | 43 | ||
42 | struct ceph_object_locator { | 44 | struct ceph_object_locator { |
43 | uint64_t pool; | 45 | s64 pool; |
44 | char *key; | 46 | }; |
47 | |||
48 | /* | ||
49 | * Maximum supported by kernel client object name length | ||
50 | * | ||
51 | * (probably outdated: must be >= RBD_MAX_MD_NAME_LEN -- currently 100) | ||
52 | */ | ||
53 | #define CEPH_MAX_OID_NAME_LEN 100 | ||
54 | |||
55 | struct ceph_object_id { | ||
56 | char name[CEPH_MAX_OID_NAME_LEN]; | ||
57 | int name_len; | ||
45 | }; | 58 | }; |
46 | 59 | ||
47 | struct ceph_pg_mapping { | 60 | struct ceph_pg_mapping { |
@@ -73,33 +86,30 @@ struct ceph_osdmap { | |||
73 | struct crush_map *crush; | 86 | struct crush_map *crush; |
74 | }; | 87 | }; |
75 | 88 | ||
76 | /* | 89 | static inline void ceph_oid_set_name(struct ceph_object_id *oid, |
77 | * file layout helpers | 90 | const char *name) |
78 | */ | ||
79 | #define ceph_file_layout_su(l) ((__s32)le32_to_cpu((l).fl_stripe_unit)) | ||
80 | #define ceph_file_layout_stripe_count(l) \ | ||
81 | ((__s32)le32_to_cpu((l).fl_stripe_count)) | ||
82 | #define ceph_file_layout_object_size(l) ((__s32)le32_to_cpu((l).fl_object_size)) | ||
83 | #define ceph_file_layout_cas_hash(l) ((__s32)le32_to_cpu((l).fl_cas_hash)) | ||
84 | #define ceph_file_layout_object_su(l) \ | ||
85 | ((__s32)le32_to_cpu((l).fl_object_stripe_unit)) | ||
86 | #define ceph_file_layout_pg_pool(l) \ | ||
87 | ((__s32)le32_to_cpu((l).fl_pg_pool)) | ||
88 | |||
89 | static inline unsigned ceph_file_layout_stripe_width(struct ceph_file_layout *l) | ||
90 | { | 91 | { |
91 | return le32_to_cpu(l->fl_stripe_unit) * | 92 | int len; |
92 | le32_to_cpu(l->fl_stripe_count); | 93 | |
94 | len = strlen(name); | ||
95 | if (len > sizeof(oid->name)) { | ||
96 | WARN(1, "ceph_oid_set_name '%s' len %d vs %zu, truncating\n", | ||
97 | name, len, sizeof(oid->name)); | ||
98 | len = sizeof(oid->name); | ||
99 | } | ||
100 | |||
101 | memcpy(oid->name, name, len); | ||
102 | oid->name_len = len; | ||
93 | } | 103 | } |
94 | 104 | ||
95 | /* "period" == bytes before i start on a new set of objects */ | 105 | static inline void ceph_oid_copy(struct ceph_object_id *dest, |
96 | static inline unsigned ceph_file_layout_period(struct ceph_file_layout *l) | 106 | struct ceph_object_id *src) |
97 | { | 107 | { |
98 | return le32_to_cpu(l->fl_object_size) * | 108 | BUG_ON(src->name_len > sizeof(dest->name)); |
99 | le32_to_cpu(l->fl_stripe_count); | 109 | memcpy(dest->name, src->name, src->name_len); |
110 | dest->name_len = src->name_len; | ||
100 | } | 111 | } |
101 | 112 | ||
102 | |||
103 | static inline int ceph_osd_is_up(struct ceph_osdmap *map, int osd) | 113 | static inline int ceph_osd_is_up(struct ceph_osdmap *map, int osd) |
104 | { | 114 | { |
105 | return (osd < map->max_osd) && (map->osd_state[osd] & CEPH_OSD_UP); | 115 | return (osd < map->max_osd) && (map->osd_state[osd] & CEPH_OSD_UP); |
@@ -155,14 +165,20 @@ extern int ceph_calc_file_object_mapping(struct ceph_file_layout *layout, | |||
155 | u64 *bno, u64 *oxoff, u64 *oxlen); | 165 | u64 *bno, u64 *oxoff, u64 *oxlen); |
156 | 166 | ||
157 | /* calculate mapping of object to a placement group */ | 167 | /* calculate mapping of object to a placement group */ |
158 | extern int ceph_calc_ceph_pg(struct ceph_pg *pg, const char *oid, | 168 | extern int ceph_oloc_oid_to_pg(struct ceph_osdmap *osdmap, |
159 | struct ceph_osdmap *osdmap, uint64_t pool); | 169 | struct ceph_object_locator *oloc, |
170 | struct ceph_object_id *oid, | ||
171 | struct ceph_pg *pg_out); | ||
172 | |||
160 | extern int ceph_calc_pg_acting(struct ceph_osdmap *osdmap, | 173 | extern int ceph_calc_pg_acting(struct ceph_osdmap *osdmap, |
161 | struct ceph_pg pgid, | 174 | struct ceph_pg pgid, |
162 | int *acting); | 175 | int *acting); |
163 | extern int ceph_calc_pg_primary(struct ceph_osdmap *osdmap, | 176 | extern int ceph_calc_pg_primary(struct ceph_osdmap *osdmap, |
164 | struct ceph_pg pgid); | 177 | struct ceph_pg pgid); |
165 | 178 | ||
179 | extern struct ceph_pg_pool_info *ceph_pg_pool_by_id(struct ceph_osdmap *map, | ||
180 | u64 id); | ||
181 | |||
166 | extern const char *ceph_pg_pool_name_by_id(struct ceph_osdmap *map, u64 id); | 182 | extern const char *ceph_pg_pool_name_by_id(struct ceph_osdmap *map, u64 id); |
167 | extern int ceph_pg_poolid_by_name(struct ceph_osdmap *map, const char *name); | 183 | extern int ceph_pg_poolid_by_name(struct ceph_osdmap *map, const char *name); |
168 | 184 | ||