summaryrefslogtreecommitdiff
path: root/drivers/md/raid10.h
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2012-05-21 09:28:33 +1000
committerNeilBrown <neilb@suse.de>2012-05-21 09:28:33 +1000
commitf8c9e74ff0832f2244d7991d2aea13851b20a622 (patch)
treedb07ef3ecc00f83d3d9b854929a4cb13def456a7 /drivers/md/raid10.h
parentc804cdecea418c067ee7359d62139b2b3c8cec39 (diff)
md/raid10: Introduce 'prev' geometry to support reshape.
When RAID10 supports reshape it will need a 'previous' and a 'current' geometry, so introduce that here. Use the 'prev' geometry when before the reshape_position, and the current 'geo' when beyond it. At other times, use both as appropriate. For now, both are identical (And reshape_position is never set). When we use the 'prev' geometry, we must use the old data_offset. When we use the current (And a reshape is happening) we must use the new_data_offset. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/raid10.h')
-rw-r--r--drivers/md/raid10.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/md/raid10.h b/drivers/md/raid10.h
index 4c4942ac46fc..37509d7134aa 100644
--- a/drivers/md/raid10.h
+++ b/drivers/md/raid10.h
@@ -34,13 +34,14 @@ struct r10conf {
*/
int chunk_shift; /* shift from chunks to sectors */
sector_t chunk_mask;
- } geo;
+ } prev, geo;
int copies; /* near_copies * far_copies.
* must be <= raid_disks
*/
sector_t dev_sectors; /* temp copy of
* mddev->dev_sectors */
+ sector_t reshape_progress;
struct list_head retry_list;
/* queue pending writes and submit them on unplug */
@@ -147,5 +148,10 @@ enum r10bio_state {
*/
R10BIO_MadeGood,
R10BIO_WriteError,
+/* During a reshape we might be performing IO on the
+ * 'previous' part of the array, in which case this
+ * flag is set
+ */
+ R10BIO_Previous,
};
#endif