Blame view
drivers/md/raid1.h
5.06 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 |
#ifndef _RAID1_H #define _RAID1_H |
0eaf822cb MD RAID1: rename ... |
3 |
struct raid1_info { |
3cb030020 md: removing type... |
4 |
struct md_rdev *rdev; |
1da177e4c Linux-2.6.12-rc2 |
5 |
sector_t head_position; |
be4d3280b md/raid1: make se... |
6 7 8 9 10 |
/* When choose the best device for a read (read_balance()) * we try to keep sequential reads one the same device */ sector_t next_seq_sect; |
12cee5a8a md/raid1: prevent... |
11 |
sector_t seq_start; |
1da177e4c Linux-2.6.12-rc2 |
12 13 14 15 16 17 18 19 |
}; /* * memory pools need a pointer to the mddev, so they can force an unplug * when memory is tight, and a count of the number of drives that the * pool was allocated for, so they know how much to allocate and free. * mddev->raid_disks cannot be used, as it can change while a pool is active * These two datums are stored in a kmalloced struct. |
8f19ccb2f md/raid1: Allocat... |
20 21 22 |
* The 'raid_disks' here is twice the raid_disks in r1conf. * This allows space for each 'real' device can have a replacement in the * second half of the array. |
1da177e4c Linux-2.6.12-rc2 |
23 24 25 |
*/ struct pool_info { |
fd01b88c7 md: remove typede... |
26 |
struct mddev *mddev; |
1da177e4c Linux-2.6.12-rc2 |
27 28 |
int raid_disks; }; |
e80963604 md/raid1: typedef... |
29 |
struct r1conf { |
fd01b88c7 md: remove typede... |
30 |
struct mddev *mddev; |
0eaf822cb MD RAID1: rename ... |
31 |
struct raid1_info *mirrors; /* twice 'raid_disks' to |
8f19ccb2f md/raid1: Allocat... |
32 33 |
* allow for replacements. */ |
1da177e4c Linux-2.6.12-rc2 |
34 |
int raid_disks; |
ce550c205 md/raid1: add do... |
35 |
|
ce550c205 md/raid1: add do... |
36 37 38 39 40 |
/* During resync, read_balancing is only allowed on the part * of the array that has been resynced. 'next_resync' tells us * where that is. */ sector_t next_resync; |
79ef3a8aa raid1: Rewrite th... |
41 42 43 44 45 46 47 48 49 50 51 52 |
/* When raid1 starts resync, we divide array into four partitions * |---------|--------------|---------------------|-------------| * next_resync start_next_window end_window * start_next_window = next_resync + NEXT_NORMALIO_DISTANCE * end_window = start_next_window + NEXT_NORMALIO_DISTANCE * current_window_requests means the count of normalIO between * start_next_window and end_window. * next_window_requests means the count of normalIO after end_window. * */ sector_t start_next_window; int current_window_requests; int next_window_requests; |
1da177e4c Linux-2.6.12-rc2 |
53 |
spinlock_t device_lock; |
9f2c9d12b md: remove typede... |
54 55 56 |
/* list of 'struct r1bio' that need to be processed by raid1d, * whether to retry a read, writeout a resync or recovery * block, or anything else. |
ce550c205 md/raid1: add do... |
57 |
*/ |
1da177e4c Linux-2.6.12-rc2 |
58 |
struct list_head retry_list; |
191ea9b2c [PATCH] md: raid1... |
59 |
|
ce550c205 md/raid1: add do... |
60 61 |
/* queue pending writes to be submitted on unplug */ struct bio_list pending_bio_list; |
34db0cd60 md: add proper wr... |
62 |
int pending_count; |
1da177e4c Linux-2.6.12-rc2 |
63 |
|
ce550c205 md/raid1: add do... |
64 65 66 67 68 69 70 |
/* for use when syncing mirrors: * We don't allow both normal IO and resync/recovery IO at * the same time - resync/recovery can only happen when there * is no other IO. So when either is active, the other has to wait. * See more details description in raid1.c near raise_barrier(). */ wait_queue_head_t wait_barrier; |
1da177e4c Linux-2.6.12-rc2 |
71 |
spinlock_t resync_lock; |
191ea9b2c [PATCH] md: raid1... |
72 |
int nr_pending; |
17999be4a [PATCH] md: impro... |
73 |
int nr_waiting; |
ddaf22aba [PATCH] md: attem... |
74 |
int nr_queued; |
191ea9b2c [PATCH] md: raid1... |
75 |
int barrier; |
b364e3d04 raid1: Add a fiel... |
76 |
int array_frozen; |
1da177e4c Linux-2.6.12-rc2 |
77 |
|
ce550c205 md/raid1: add do... |
78 79 80 81 |
/* Set to 1 if a full sync is needed, (fresh device added). * Cleared when a sync completes. */ int fullsync; |
1da177e4c Linux-2.6.12-rc2 |
82 |
|
ce550c205 md/raid1: add do... |
83 84 85 86 |
/* When the same as mddev->recovery_disabled we don't allow * recovery to be attempted as we expect a read error. */ int recovery_disabled; |
1da177e4c Linux-2.6.12-rc2 |
87 |
|
ddaf22aba [PATCH] md: attem... |
88 |
|
ce550c205 md/raid1: add do... |
89 90 91 92 |
/* poolinfo contains information about the content of the * mempools - it changes when the array grows or shrinks */ struct pool_info *poolinfo; |
9f2c9d12b md: remove typede... |
93 94 |
mempool_t *r1bio_pool; mempool_t *r1buf_pool; |
709ae4879 md/raid1: add tak... |
95 |
|
ce550c205 md/raid1: add do... |
96 97 98 99 |
/* temporary buffer to synchronous IO when attempting to repair * a read error. */ struct page *tmppage; |
709ae4879 md/raid1: add tak... |
100 101 102 |
/* When taking over an array from a different personality, we store * the new thread here until we fully activate the array. */ |
2b8bf3451 md: remove typede... |
103 |
struct md_thread *thread; |
1da177e4c Linux-2.6.12-rc2 |
104 |
}; |
1da177e4c Linux-2.6.12-rc2 |
105 |
/* |
1da177e4c Linux-2.6.12-rc2 |
106 107 108 109 110 |
* this is our 'private' RAID1 bio. * * it contains information about what kind of IO operations were started * for this RAID1 operation, and about their status: */ |
9f2c9d12b md: remove typede... |
111 |
struct r1bio { |
1da177e4c Linux-2.6.12-rc2 |
112 113 114 |
atomic_t remaining; /* 'have we finished' count, * used from IRQ handlers */ |
4b6d287f6 [PATCH] md: add w... |
115 116 117 |
atomic_t behind_remaining; /* number of write-behind ios remaining * in this BehindIO request */ |
1da177e4c Linux-2.6.12-rc2 |
118 |
sector_t sector; |
79ef3a8aa raid1: Rewrite th... |
119 |
sector_t start_next_window; |
1da177e4c Linux-2.6.12-rc2 |
120 121 |
int sectors; unsigned long state; |
fd01b88c7 md: remove typede... |
122 |
struct mddev *mddev; |
1da177e4c Linux-2.6.12-rc2 |
123 124 125 126 127 128 129 130 131 132 |
/* * original bio going to /dev/mdx */ struct bio *master_bio; /* * if the IO is in READ direction, then this is where we read */ int read_disk; struct list_head retry_list; |
af6d7b760 md/raid1: improve... |
133 |
/* Next two are only valid when R1BIO_BehindIO is set */ |
2ca68f5ed md/raid1: store b... |
134 |
struct bio_vec *behind_bvecs; |
af6d7b760 md/raid1: improve... |
135 |
int behind_page_count; |
1da177e4c Linux-2.6.12-rc2 |
136 137 138 139 140 |
/* * if the IO is in WRITE direction, then multiple bios are used. * We choose the number when they are allocated. */ struct bio *bios[0]; |
191ea9b2c [PATCH] md: raid1... |
141 |
/* DO NOT PUT ANY NEW FIELDS HERE - bios array is contiguously alloced*/ |
1da177e4c Linux-2.6.12-rc2 |
142 143 144 145 146 |
}; /* bits for r1bio.state */ #define R1BIO_Uptodate 0 #define R1BIO_IsSync 1 |
191ea9b2c [PATCH] md: raid1... |
147 |
#define R1BIO_Degraded 2 |
a9701a304 [PATCH] md: suppo... |
148 |
#define R1BIO_BehindIO 3 |
d2eb35acf md/raid1: avoid r... |
149 150 151 152 |
/* Set ReadError on bios that experience a readerror so that * raid1d knows what to do with them. */ #define R1BIO_ReadError 4 |
4b6d287f6 [PATCH] md: add w... |
153 154 155 156 157 158 159 |
/* For write-behind requests, we call bi_end_io when * the last non-write-behind device completes, providing * any write was successful. Otherwise we call when * any write-behind write succeeds, otherwise we call * with failure when last write completes (and all failed). * Record that bi_end_io was called with this flag... */ |
9e71f9c84 [PATCH] DM: Fix b... |
160 |
#define R1BIO_Returned 6 |
4367af556 md/raid1: clear b... |
161 162 163 |
/* If a write for this request means we can clear some * known-bad-block records, we set this flag */ |
cd5ff9a16 md/raid1: Handle... |
164 165 |
#define R1BIO_MadeGood 7 #define R1BIO_WriteError 8 |
4b6d287f6 [PATCH] md: add w... |
166 |
|
fd01b88c7 md: remove typede... |
167 |
extern int md_raid1_congested(struct mddev *mddev, int bits); |
1ed7242e5 MD: raid1 changes... |
168 |
|
1da177e4c Linux-2.6.12-rc2 |
169 |
#endif |