Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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;
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;
19 
20  /* geometry */
21  struct geom {
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 */
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 */
47  unsigned long reshape_checkpoint;
49 
51  /* queue pending writes and submit them on unplug */
54 
58  int nr_queued;
59  int barrier;
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  */
69 
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  */
103 
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  };
122  int devnum;
123  } devs[0];
124 };
125 
126 /* bits for r10bio.state */
133 /* Set ReadError on bios that experience a read error
134  * so that raid10d knows what to do with them.
135  */
137 /* If a write for this request means we can clear some
138  * known-bad-block records, we set this flag.
139  */
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  */
147 };
148 
149 extern int md_raid10_congested(struct mddev *mddev, int bits);
150 
151 #endif