Root/
1 | #ifndef _FS_CEPH_OSDMAP_H |
2 | #define _FS_CEPH_OSDMAP_H |
3 | |
4 | #include <linux/rbtree.h> |
5 | #include "types.h" |
6 | #include "ceph_fs.h" |
7 | #include "crush/crush.h" |
8 | |
9 | /* |
10 | * The osd map describes the current membership of the osd cluster and |
11 | * specifies the mapping of objects to placement groups and placement |
12 | * groups to (sets of) osds. That is, it completely specifies the |
13 | * (desired) distribution of all data objects in the system at some |
14 | * point in time. |
15 | * |
16 | * Each map version is identified by an epoch, which increases monotonically. |
17 | * |
18 | * The map can be updated either via an incremental map (diff) describing |
19 | * the change between two successive epochs, or as a fully encoded map. |
20 | */ |
21 | struct ceph_pg_pool_info { |
22 | struct rb_node node; |
23 | int id; |
24 | struct ceph_pg_pool v; |
25 | int pg_num_mask, pgp_num_mask, lpg_num_mask, lpgp_num_mask; |
26 | char *name; |
27 | }; |
28 | |
29 | struct ceph_pg_mapping { |
30 | struct rb_node node; |
31 | struct ceph_pg pgid; |
32 | int len; |
33 | int osds[]; |
34 | }; |
35 | |
36 | struct ceph_osdmap { |
37 | struct ceph_fsid fsid; |
38 | u32 epoch; |
39 | u32 mkfs_epoch; |
40 | struct ceph_timespec created, modified; |
41 | |
42 | u32 flags; /* CEPH_OSDMAP_* */ |
43 | |
44 | u32 max_osd; /* size of osd_state, _offload, _addr arrays */ |
45 | u8 *osd_state; /* CEPH_OSD_* */ |
46 | u32 *osd_weight; /* 0 = failed, 0x10000 = 100% normal */ |
47 | struct ceph_entity_addr *osd_addr; |
48 | |
49 | struct rb_root pg_temp; |
50 | struct rb_root pg_pools; |
51 | u32 pool_max; |
52 | |
53 | /* the CRUSH map specifies the mapping of placement groups to |
54 | * the list of osds that store+replicate them. */ |
55 | struct crush_map *crush; |
56 | }; |
57 | |
58 | /* |
59 | * file layout helpers |
60 | */ |
61 | #define ceph_file_layout_su(l) ((__s32)le32_to_cpu((l).fl_stripe_unit)) |
62 | #define ceph_file_layout_stripe_count(l) \ |
63 | ((__s32)le32_to_cpu((l).fl_stripe_count)) |
64 | #define ceph_file_layout_object_size(l) ((__s32)le32_to_cpu((l).fl_object_size)) |
65 | #define ceph_file_layout_cas_hash(l) ((__s32)le32_to_cpu((l).fl_cas_hash)) |
66 | #define ceph_file_layout_object_su(l) \ |
67 | ((__s32)le32_to_cpu((l).fl_object_stripe_unit)) |
68 | #define ceph_file_layout_pg_preferred(l) \ |
69 | ((__s32)le32_to_cpu((l).fl_pg_preferred)) |
70 | #define ceph_file_layout_pg_pool(l) \ |
71 | ((__s32)le32_to_cpu((l).fl_pg_pool)) |
72 | |
73 | static inline unsigned ceph_file_layout_stripe_width(struct ceph_file_layout *l) |
74 | { |
75 | return le32_to_cpu(l->fl_stripe_unit) * |
76 | le32_to_cpu(l->fl_stripe_count); |
77 | } |
78 | |
79 | /* "period" == bytes before i start on a new set of objects */ |
80 | static inline unsigned ceph_file_layout_period(struct ceph_file_layout *l) |
81 | { |
82 | return le32_to_cpu(l->fl_object_size) * |
83 | le32_to_cpu(l->fl_stripe_count); |
84 | } |
85 | |
86 | |
87 | static inline int ceph_osd_is_up(struct ceph_osdmap *map, int osd) |
88 | { |
89 | return (osd < map->max_osd) && (map->osd_state[osd] & CEPH_OSD_UP); |
90 | } |
91 | |
92 | static inline bool ceph_osdmap_flag(struct ceph_osdmap *map, int flag) |
93 | { |
94 | return map && (map->flags & flag); |
95 | } |
96 | |
97 | extern char *ceph_osdmap_state_str(char *str, int len, int state); |
98 | |
99 | static inline struct ceph_entity_addr *ceph_osd_addr(struct ceph_osdmap *map, |
100 | int osd) |
101 | { |
102 | if (osd >= map->max_osd) |
103 | return NULL; |
104 | return &map->osd_addr[osd]; |
105 | } |
106 | |
107 | extern struct ceph_osdmap *osdmap_decode(void **p, void *end); |
108 | extern struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end, |
109 | struct ceph_osdmap *map, |
110 | struct ceph_messenger *msgr); |
111 | extern void ceph_osdmap_destroy(struct ceph_osdmap *map); |
112 | |
113 | /* calculate mapping of a file extent to an object */ |
114 | extern void ceph_calc_file_object_mapping(struct ceph_file_layout *layout, |
115 | u64 off, u64 *plen, |
116 | u64 *bno, u64 *oxoff, u64 *oxlen); |
117 | |
118 | /* calculate mapping of object to a placement group */ |
119 | extern int ceph_calc_object_layout(struct ceph_object_layout *ol, |
120 | const char *oid, |
121 | struct ceph_file_layout *fl, |
122 | struct ceph_osdmap *osdmap); |
123 | extern int ceph_calc_pg_primary(struct ceph_osdmap *osdmap, |
124 | struct ceph_pg pgid); |
125 | |
126 | #endif |
127 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9