md: remove typedefs: mdk_thread_t -> struct md_thread
[pandora-kernel.git] / drivers / md / raid1.h
1 #ifndef _RAID1_H
2 #define _RAID1_H
3
4 typedef struct mirror_info mirror_info_t;
5
6 struct mirror_info {
7         struct md_rdev  *rdev;
8         sector_t        head_position;
9 };
10
11 /*
12  * memory pools need a pointer to the mddev, so they can force an unplug
13  * when memory is tight, and a count of the number of drives that the
14  * pool was allocated for, so they know how much to allocate and free.
15  * mddev->raid_disks cannot be used, as it can change while a pool is active
16  * These two datums are stored in a kmalloced struct.
17  */
18
19 struct pool_info {
20         struct mddev *mddev;
21         int     raid_disks;
22 };
23
24
25 typedef struct r1bio_s r1bio_t;
26
27 struct r1_private_data_s {
28         struct mddev            *mddev;
29         mirror_info_t           *mirrors;
30         int                     raid_disks;
31
32         /* When choose the best device for a read (read_balance())
33          * we try to keep sequential reads one the same device
34          * using 'last_used' and 'next_seq_sect'
35          */
36         int                     last_used;
37         sector_t                next_seq_sect;
38         /* During resync, read_balancing is only allowed on the part
39          * of the array that has been resynced.  'next_resync' tells us
40          * where that is.
41          */
42         sector_t                next_resync;
43
44         spinlock_t              device_lock;
45
46         /* list of 'r1bio_t' that need to be processed by raid1d, whether
47          * to retry a read, writeout a resync or recovery block, or
48          * anything else.
49          */
50         struct list_head        retry_list;
51
52         /* queue pending writes to be submitted on unplug */
53         struct bio_list         pending_bio_list;
54
55         /* for use when syncing mirrors:
56          * We don't allow both normal IO and resync/recovery IO at
57          * the same time - resync/recovery can only happen when there
58          * is no other IO.  So when either is active, the other has to wait.
59          * See more details description in raid1.c near raise_barrier().
60          */
61         wait_queue_head_t       wait_barrier;
62         spinlock_t              resync_lock;
63         int                     nr_pending;
64         int                     nr_waiting;
65         int                     nr_queued;
66         int                     barrier;
67
68         /* Set to 1 if a full sync is needed, (fresh device added).
69          * Cleared when a sync completes.
70          */
71         int                     fullsync;
72
73         /* When the same as mddev->recovery_disabled we don't allow
74          * recovery to be attempted as we expect a read error.
75          */
76         int                     recovery_disabled;
77
78
79         /* poolinfo contains information about the content of the
80          * mempools - it changes when the array grows or shrinks
81          */
82         struct pool_info        *poolinfo;
83         mempool_t *r1bio_pool;
84         mempool_t *r1buf_pool;
85
86         /* temporary buffer to synchronous IO when attempting to repair
87          * a read error.
88          */
89         struct page             *tmppage;
90
91
92         /* When taking over an array from a different personality, we store
93          * the new thread here until we fully activate the array.
94          */
95         struct md_thread        *thread;
96 };
97
98 typedef struct r1_private_data_s conf_t;
99
100 /*
101  * this is our 'private' RAID1 bio.
102  *
103  * it contains information about what kind of IO operations were started
104  * for this RAID1 operation, and about their status:
105  */
106
107 struct r1bio_s {
108         atomic_t                remaining; /* 'have we finished' count,
109                                             * used from IRQ handlers
110                                             */
111         atomic_t                behind_remaining; /* number of write-behind ios remaining
112                                                  * in this BehindIO request
113                                                  */
114         sector_t                sector;
115         int                     sectors;
116         unsigned long           state;
117         struct mddev            *mddev;
118         /*
119          * original bio going to /dev/mdx
120          */
121         struct bio              *master_bio;
122         /*
123          * if the IO is in READ direction, then this is where we read
124          */
125         int                     read_disk;
126
127         struct list_head        retry_list;
128         /* Next two are only valid when R1BIO_BehindIO is set */
129         struct bio_vec          *behind_bvecs;
130         int                     behind_page_count;
131         /*
132          * if the IO is in WRITE direction, then multiple bios are used.
133          * We choose the number when they are allocated.
134          */
135         struct bio              *bios[0];
136         /* DO NOT PUT ANY NEW FIELDS HERE - bios array is contiguously alloced*/
137 };
138
139 /* when we get a read error on a read-only array, we redirect to another
140  * device without failing the first device, or trying to over-write to
141  * correct the read error.  To keep track of bad blocks on a per-bio
142  * level, we store IO_BLOCKED in the appropriate 'bios' pointer
143  */
144 #define IO_BLOCKED ((struct bio *)1)
145 /* When we successfully write to a known bad-block, we need to remove the
146  * bad-block marking which must be done from process context.  So we record
147  * the success by setting bios[n] to IO_MADE_GOOD
148  */
149 #define IO_MADE_GOOD ((struct bio *)2)
150
151 #define BIO_SPECIAL(bio) ((unsigned long)bio <= 2)
152
153 /* bits for r1bio.state */
154 #define R1BIO_Uptodate  0
155 #define R1BIO_IsSync    1
156 #define R1BIO_Degraded  2
157 #define R1BIO_BehindIO  3
158 /* Set ReadError on bios that experience a readerror so that
159  * raid1d knows what to do with them.
160  */
161 #define R1BIO_ReadError 4
162 /* For write-behind requests, we call bi_end_io when
163  * the last non-write-behind device completes, providing
164  * any write was successful.  Otherwise we call when
165  * any write-behind write succeeds, otherwise we call
166  * with failure when last write completes (and all failed).
167  * Record that bi_end_io was called with this flag...
168  */
169 #define R1BIO_Returned 6
170 /* If a write for this request means we can clear some
171  * known-bad-block records, we set this flag
172  */
173 #define R1BIO_MadeGood 7
174 #define R1BIO_WriteError 8
175
176 extern int md_raid1_congested(struct mddev *mddev, int bits);
177
178 #endif