Blame view
drivers/md/raid1.h
5.08 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 |
#ifndef _RAID1_H #define _RAID1_H |
1da177e4c Linux-2.6.12-rc2 |
3 |
struct mirror_info { |
3cb030020 md: removing type... |
4 |
struct md_rdev *rdev; |
1da177e4c Linux-2.6.12-rc2 |
5 6 7 8 9 10 11 12 13 |
sector_t head_position; }; /* * 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... |
14 15 16 |
* 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 |
17 18 19 |
*/ struct pool_info { |
fd01b88c7 md: remove typede... |
20 |
struct mddev *mddev; |
1da177e4c Linux-2.6.12-rc2 |
21 22 |
int raid_disks; }; |
e80963604 md/raid1: typedef... |
23 |
struct r1conf { |
fd01b88c7 md: remove typede... |
24 |
struct mddev *mddev; |
8f19ccb2f md/raid1: Allocat... |
25 26 27 |
struct mirror_info *mirrors; /* twice 'raid_disks' to * allow for replacements. */ |
1da177e4c Linux-2.6.12-rc2 |
28 |
int raid_disks; |
ce550c205 md/raid1: add do... |
29 30 31 32 33 |
/* When choose the best device for a read (read_balance()) * we try to keep sequential reads one the same device * using 'last_used' and 'next_seq_sect' */ |
1da177e4c Linux-2.6.12-rc2 |
34 35 |
int last_used; sector_t next_seq_sect; |
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; |
1da177e4c Linux-2.6.12-rc2 |
41 |
spinlock_t device_lock; |
9f2c9d12b md: remove typede... |
42 43 44 |
/* 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... |
45 |
*/ |
1da177e4c Linux-2.6.12-rc2 |
46 |
struct list_head retry_list; |
191ea9b2c [PATCH] md: raid1... |
47 |
|
ce550c205 md/raid1: add do... |
48 49 |
/* queue pending writes to be submitted on unplug */ struct bio_list pending_bio_list; |
34db0cd60 md: add proper wr... |
50 |
int pending_count; |
1da177e4c Linux-2.6.12-rc2 |
51 |
|
ce550c205 md/raid1: add do... |
52 53 54 55 56 57 58 |
/* 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 |
59 |
spinlock_t resync_lock; |
191ea9b2c [PATCH] md: raid1... |
60 |
int nr_pending; |
17999be4a [PATCH] md: impro... |
61 |
int nr_waiting; |
ddaf22aba [PATCH] md: attem... |
62 |
int nr_queued; |
191ea9b2c [PATCH] md: raid1... |
63 |
int barrier; |
1da177e4c Linux-2.6.12-rc2 |
64 |
|
ce550c205 md/raid1: add do... |
65 66 67 68 |
/* 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 |
69 |
|
ce550c205 md/raid1: add do... |
70 71 72 73 |
/* 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 |
74 |
|
ddaf22aba [PATCH] md: attem... |
75 |
|
ce550c205 md/raid1: add do... |
76 77 78 79 |
/* 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... |
80 81 |
mempool_t *r1bio_pool; mempool_t *r1buf_pool; |
709ae4879 md/raid1: add tak... |
82 |
|
ce550c205 md/raid1: add do... |
83 84 85 86 |
/* temporary buffer to synchronous IO when attempting to repair * a read error. */ struct page *tmppage; |
709ae4879 md/raid1: add tak... |
87 88 89 |
/* 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... |
90 |
struct md_thread *thread; |
1da177e4c Linux-2.6.12-rc2 |
91 |
}; |
1da177e4c Linux-2.6.12-rc2 |
92 |
/* |
1da177e4c Linux-2.6.12-rc2 |
93 94 95 96 97 |
* 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... |
98 |
struct r1bio { |
1da177e4c Linux-2.6.12-rc2 |
99 100 101 |
atomic_t remaining; /* 'have we finished' count, * used from IRQ handlers */ |
4b6d287f6 [PATCH] md: add w... |
102 103 104 |
atomic_t behind_remaining; /* number of write-behind ios remaining * in this BehindIO request */ |
1da177e4c Linux-2.6.12-rc2 |
105 106 107 |
sector_t sector; int sectors; unsigned long state; |
fd01b88c7 md: remove typede... |
108 |
struct mddev *mddev; |
1da177e4c Linux-2.6.12-rc2 |
109 110 111 112 113 114 115 116 117 118 |
/* * 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... |
119 |
/* Next two are only valid when R1BIO_BehindIO is set */ |
2ca68f5ed md/raid1: store b... |
120 |
struct bio_vec *behind_bvecs; |
af6d7b760 md/raid1: improve... |
121 |
int behind_page_count; |
1da177e4c Linux-2.6.12-rc2 |
122 123 124 125 126 |
/* * 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... |
127 |
/* DO NOT PUT ANY NEW FIELDS HERE - bios array is contiguously alloced*/ |
1da177e4c Linux-2.6.12-rc2 |
128 |
}; |
cf30a473a [PATCH] md: handl... |
129 130 131 132 133 |
/* when we get a read error on a read-only array, we redirect to another * device without failing the first device, or trying to over-write to * correct the read error. To keep track of bad blocks on a per-bio * level, we store IO_BLOCKED in the appropriate 'bios' pointer */ |
4367af556 md/raid1: clear b... |
134 135 136 137 138 139 140 141 |
#define IO_BLOCKED ((struct bio *)1) /* When we successfully write to a known bad-block, we need to remove the * bad-block marking which must be done from process context. So we record * the success by setting bios[n] to IO_MADE_GOOD */ #define IO_MADE_GOOD ((struct bio *)2) #define BIO_SPECIAL(bio) ((unsigned long)bio <= 2) |
cf30a473a [PATCH] md: handl... |
142 |
|
1da177e4c Linux-2.6.12-rc2 |
143 144 145 |
/* bits for r1bio.state */ #define R1BIO_Uptodate 0 #define R1BIO_IsSync 1 |
191ea9b2c [PATCH] md: raid1... |
146 |
#define R1BIO_Degraded 2 |
a9701a304 [PATCH] md: suppo... |
147 |
#define R1BIO_BehindIO 3 |
d2eb35acf md/raid1: avoid r... |
148 149 150 151 |
/* 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... |
152 153 154 155 156 157 158 |
/* 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... |
159 |
#define R1BIO_Returned 6 |
4367af556 md/raid1: clear b... |
160 161 162 |
/* If a write for this request means we can clear some * known-bad-block records, we set this flag */ |
cd5ff9a16 md/raid1: Handle... |
163 164 |
#define R1BIO_MadeGood 7 #define R1BIO_WriteError 8 |
4b6d287f6 [PATCH] md: add w... |
165 |
|
fd01b88c7 md: remove typede... |
166 |
extern int md_raid1_congested(struct mddev *mddev, int bits); |
1ed7242e5 MD: raid1 changes... |
167 |
|
1da177e4c Linux-2.6.12-rc2 |
168 |
#endif |