1#ifndef _RAID10_H
2#define _RAID10_H
3
4struct raid10_info {
5 struct md_rdev *rdev, *replacement;
6 sector_t head_position;
7 int recovery_disabled;
8
9
10
11
12};
13
14struct r10conf {
15 struct mddev *mddev;
16 struct raid10_info *mirrors;
17 struct raid10_info *mirrors_new, *mirrors_old;
18 spinlock_t device_lock;
19
20
21 struct geom {
22 int raid_disks;
23 int near_copies;
24
25 int far_copies;
26
27
28 int far_offset;
29
30
31 sector_t stride;
32
33
34
35
36 int chunk_shift;
37 sector_t chunk_mask;
38 } prev, geo;
39 int copies;
40
41
42
43 sector_t dev_sectors;
44
45 sector_t reshape_progress;
46 sector_t reshape_safe;
47 unsigned long reshape_checkpoint;
48 sector_t offset_diff;
49
50 struct list_head retry_list;
51
52 struct bio_list pending_bio_list;
53 int pending_count;
54
55 spinlock_t resync_lock;
56 int nr_pending;
57 int nr_waiting;
58 int nr_queued;
59 int barrier;
60 sector_t next_resync;
61 int fullsync;
62
63
64
65 int have_replacement;
66
67
68 wait_queue_head_t wait_barrier;
69
70 mempool_t *r10bio_pool;
71 mempool_t *r10buf_pool;
72 struct page *tmppage;
73
74
75
76
77 struct md_thread *thread;
78};
79
80
81
82
83
84
85
86
87struct r10bio {
88 atomic_t remaining;
89
90
91 sector_t sector;
92 int sectors;
93 unsigned long state;
94 struct mddev *mddev;
95
96
97
98 struct bio *master_bio;
99
100
101
102 int read_slot;
103
104 struct list_head retry_list;
105
106
107
108
109
110
111
112
113 struct r10dev {
114 struct bio *bio;
115 union {
116 struct bio *repl_bio;
117
118 struct md_rdev *rdev;
119
120 };
121 sector_t addr;
122 int devnum;
123 } devs[0];
124};
125
126
127enum r10bio_state {
128 R10BIO_Uptodate,
129 R10BIO_IsSync,
130 R10BIO_IsRecover,
131 R10BIO_IsReshape,
132 R10BIO_Degraded,
133
134
135
136 R10BIO_ReadError,
137
138
139
140 R10BIO_MadeGood,
141 R10BIO_WriteError,
142
143
144
145
146 R10BIO_Previous,
147};
148
149extern int md_raid10_congested(struct mddev *mddev, int bits);
150
151#endif
152