]> pilppa.org Git - linux-2.6-omap-h63xx.git/blob - include/linux/raid/raid10.h
[PATCH] md: write intent bitmap support for raid10
[linux-2.6-omap-h63xx.git] / include / linux / raid / raid10.h
1 #ifndef _RAID10_H
2 #define _RAID10_H
3
4 #include <linux/raid/md.h>
5
6 typedef struct mirror_info mirror_info_t;
7
8 struct mirror_info {
9         mdk_rdev_t      *rdev;
10         sector_t        head_position;
11 };
12
13 typedef struct r10bio_s r10bio_t;
14
15 struct r10_private_data_s {
16         mddev_t                 *mddev;
17         mirror_info_t           *mirrors;
18         int                     raid_disks;
19         int                     working_disks;
20         spinlock_t              device_lock;
21
22         /* geometry */
23         int                     near_copies;  /* number of copies layed out raid0 style */
24         int                     far_copies;   /* number of copies layed out
25                                                * at large strides across drives
26                                                */
27         int                     copies;       /* near_copies * far_copies.
28                                                * must be <= raid_disks
29                                                */
30         sector_t                stride;       /* distance between far copies.
31                                                * This is size / far_copies
32                                                */
33
34         int chunk_shift; /* shift from chunks to sectors */
35         sector_t chunk_mask;
36
37         struct list_head        retry_list;
38         /* queue pending writes and submit them on unplug */
39         struct bio_list         pending_bio_list;
40
41
42         spinlock_t              resync_lock;
43         int nr_pending;
44         int nr_waiting;
45         int barrier;
46         sector_t                next_resync;
47         int                     fullsync;  /* set to 1 if a full sync is needed,
48                                             * (fresh device added).
49                                             * Cleared when a sync completes.
50                                             */
51
52         wait_queue_head_t       wait_barrier;
53
54         mempool_t *r10bio_pool;
55         mempool_t *r10buf_pool;
56 };
57
58 typedef struct r10_private_data_s conf_t;
59
60 /*
61  * this is the only point in the RAID code where we violate
62  * C type safety. mddev->private is an 'opaque' pointer.
63  */
64 #define mddev_to_conf(mddev) ((conf_t *) mddev->private)
65
66 /*
67  * this is our 'private' RAID10 bio.
68  *
69  * it contains information about what kind of IO operations were started
70  * for this RAID10 operation, and about their status:
71  */
72
73 struct r10bio_s {
74         atomic_t                remaining; /* 'have we finished' count,
75                                             * used from IRQ handlers
76                                             */
77         sector_t                sector; /* virtual sector number */
78         int                     sectors;
79         unsigned long           state;
80         mddev_t                 *mddev;
81         /*
82          * original bio going to /dev/mdx
83          */
84         struct bio              *master_bio;
85         /*
86          * if the IO is in READ direction, then this is where we read
87          */
88         int                     read_slot;
89
90         struct list_head        retry_list;
91         /*
92          * if the IO is in WRITE direction, then multiple bios are used,
93          * one for each copy.
94          * When resyncing we also use one for each copy.
95          * When reconstructing, we use 2 bios, one for read, one for write.
96          * We choose the number when they are allocated.
97          */
98         struct {
99                 struct bio              *bio;
100                 sector_t addr;
101                 int devnum;
102         } devs[0];
103 };
104
105 /* bits for r10bio.state */
106 #define R10BIO_Uptodate 0
107 #define R10BIO_IsSync   1
108 #define R10BIO_IsRecover 2
109 #define R10BIO_Degraded 3
110 #endif