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
drivers
md
raid10.h
Go to the documentation of this file.
1
#ifndef _RAID10_H
2
#define _RAID10_H
3
4
struct
raid10_info
{
5
struct
md_rdev
*
rdev
, *
replacement
;
6
sector_t
head_position
;
7
int
recovery_disabled
;
/* matches
8
* mddev->recovery_disabled
9
* when we shouldn't try
10
* recovering this device.
11
*/
12
};
13
14
struct
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
/* geometry */
21
struct
geom
{
22
int
raid_disks
;
23
int
near_copies
;
/* number of copies laid out
24
* raid0 style */
25
int
far_copies
;
/* number of copies laid out
26
* at large strides across drives
27
*/
28
int
far_offset
;
/* far_copies are offset by 1
29
* stripe instead of many
30
*/
31
sector_t
stride
;
/* distance between far copies.
32
* This is size / far_copies unless
33
* far_offset, in which case it is
34
* 1 stripe.
35
*/
36
int
chunk_shift
;
/* shift from chunks to sectors */
37
sector_t
chunk_mask
;
38
}
prev
,
geo
;
39
int
copies
;
/* near_copies * far_copies.
40
* must be <= raid_disks
41
*/
42
43
sector_t
dev_sectors
;
/* temp copy of
44
* mddev->dev_sectors */
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
/* queue pending writes and submit them on unplug */
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
;
/* set to 1 if a full sync is needed,
62
* (fresh device added).
63
* Cleared when a sync completes.
64
*/
65
int
have_replacement
;
/* There is at least one
66
* replacement device.
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
/* When taking over an array from a different personality, we store
75
* the new thread here until we fully activate the array.
76
*/
77
struct
md_thread
*
thread
;
78
};
79
80
/*
81
* this is our 'private' RAID10 bio.
82
*
83
* it contains information about what kind of IO operations were started
84
* for this RAID10 operation, and about their status:
85
*/
86
87
struct
r10bio
{
88
atomic_t
remaining
;
/* 'have we finished' count,
89
* used from IRQ handlers
90
*/
91
sector_t
sector
;
/* virtual sector number */
92
int
sectors
;
93
unsigned
long
state
;
94
struct
mddev
*
mddev
;
95
/*
96
* original bio going to /dev/mdx
97
*/
98
struct
bio *
master_bio
;
99
/*
100
* if the IO is in READ direction, then this is where we read
101
*/
102
int
read_slot
;
103
104
struct
list_head
retry_list
;
105
/*
106
* if the IO is in WRITE direction, then multiple bios are used,
107
* one for each copy.
108
* When resyncing we also use one for each copy.
109
* When reconstructing, we use 2 bios, one for read, one for write.
110
* We choose the number when they are allocated.
111
* We sometimes need an extra bio to write to the replacement.
112
*/
113
struct
r10dev
{
114
struct
bio
*
bio
;
115
union
{
116
struct
bio
*
repl_bio
;
/* used for resync and
117
* writes */
118
struct
md_rdev
*
rdev
;
/* used for reads
119
* (read_slot >= 0) */
120
};
121
sector_t
addr
;
122
int
devnum
;
123
}
devs
[0];
124
};
125
126
/* bits for r10bio.state */
127
enum
r10bio_state
{
128
R10BIO_Uptodate
,
129
R10BIO_IsSync
,
130
R10BIO_IsRecover
,
131
R10BIO_IsReshape
,
132
R10BIO_Degraded
,
133
/* Set ReadError on bios that experience a read error
134
* so that raid10d knows what to do with them.
135
*/
136
R10BIO_ReadError
,
137
/* If a write for this request means we can clear some
138
* known-bad-block records, we set this flag.
139
*/
140
R10BIO_MadeGood
,
141
R10BIO_WriteError
,
142
/* During a reshape we might be performing IO on the
143
* 'previous' part of the array, in which case this
144
* flag is set
145
*/
146
R10BIO_Previous
,
147
};
148
149
extern
int
md_raid10_congested
(
struct
mddev
*
mddev
,
int
bits
);
150
151
#endif
Generated on Thu Jan 10 2013 13:44:21 for Linux Kernel by
1.8.2