Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
ceph
osdmap.h
Go to the documentation of this file.
1
#ifndef _FS_CEPH_OSDMAP_H
2
#define _FS_CEPH_OSDMAP_H
3
4
#include <linux/rbtree.h>
5
#include <
linux/ceph/types.h
>
6
#include <
linux/ceph/ceph_fs.h
>
7
#include <
linux/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_pool(l) \
69
((__s32)le32_to_cpu((l).fl_pg_pool))
70
71
static
inline
unsigned
ceph_file_layout_stripe_width(
struct
ceph_file_layout
*
l
)
72
{
73
return
le32_to_cpu
(l->
fl_stripe_unit
) *
74
le32_to_cpu
(l->
fl_stripe_count
);
75
}
76
77
/* "period" == bytes before i start on a new set of objects */
78
static
inline
unsigned
ceph_file_layout_period(
struct
ceph_file_layout
*
l
)
79
{
80
return
le32_to_cpu
(l->
fl_object_size
) *
81
le32_to_cpu
(l->
fl_stripe_count
);
82
}
83
84
85
static
inline
int
ceph_osd_is_up(
struct
ceph_osdmap
*
map
,
int
osd)
86
{
87
return
(osd < map->max_osd) && (map->
osd_state
[osd] &
CEPH_OSD_UP
);
88
}
89
90
static
inline
bool
ceph_osdmap_flag(
struct
ceph_osdmap
*map,
int
flag
)
91
{
92
return
map && (map->
flags
&
flag
);
93
}
94
95
extern
char
*
ceph_osdmap_state_str
(
char
*
str
,
int
len,
int
state
);
96
97
static
inline
struct
ceph_entity_addr
*ceph_osd_addr(
struct
ceph_osdmap
*map,
98
int
osd)
99
{
100
if
(osd >= map->
max_osd
)
101
return
NULL
;
102
return
&map->
osd_addr
[osd];
103
}
104
105
extern
struct
ceph_osdmap
*
osdmap_decode
(
void
**
p
,
void
*
end
);
106
extern
struct
ceph_osdmap
*
osdmap_apply_incremental
(
void
**
p
,
void
*
end
,
107
struct
ceph_osdmap
*map,
108
struct
ceph_messenger
*msgr);
109
extern
void
ceph_osdmap_destroy
(
struct
ceph_osdmap
*map);
110
111
/* calculate mapping of a file extent to an object */
112
extern
int
ceph_calc_file_object_mapping
(
struct
ceph_file_layout
*
layout
,
113
u64
off,
u64
*
plen
,
114
u64
*bno,
u64
*oxoff,
u64
*oxlen);
115
116
/* calculate mapping of object to a placement group */
117
extern
int
ceph_calc_object_layout
(
struct
ceph_object_layout
*ol,
118
const
char
*
oid
,
119
struct
ceph_file_layout
*
fl
,
120
struct
ceph_osdmap
*osdmap);
121
extern
int
ceph_calc_pg_acting
(
struct
ceph_osdmap
*osdmap,
struct
ceph_pg
pgid
,
122
int
*acting);
123
extern
int
ceph_calc_pg_primary
(
struct
ceph_osdmap
*osdmap,
124
struct
ceph_pg
pgid
);
125
126
extern
int
ceph_pg_poolid_by_name
(
struct
ceph_osdmap
*map,
const
char
*
name
);
127
128
#endif
Generated on Thu Jan 10 2013 14:51:11 for Linux Kernel by
1.8.2