ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / include / linux / raid / multipath.h
1 #ifndef _MULTIPATH_H
2 #define _MULTIPATH_H
3
4 #include <linux/raid/md.h>
5
6 struct multipath_info {
7         mdk_rdev_t      *rdev;
8 };
9
10 struct multipath_private_data {
11         mddev_t                 *mddev;
12         struct multipath_info   *multipaths;
13         int                     raid_disks;
14         int                     working_disks;
15         spinlock_t              device_lock;
16
17         mempool_t               *pool;
18 };
19
20 typedef struct multipath_private_data multipath_conf_t;
21
22 /*
23  * this is the only point in the RAID code where we violate
24  * C type safety. mddev->private is an 'opaque' pointer.
25  */
26 #define mddev_to_conf(mddev) ((multipath_conf_t *) mddev->private)
27
28 /*
29  * this is our 'private' 'collective' MULTIPATH buffer head.
30  * it contains information about what kind of IO operations were started
31  * for this MULTIPATH operation, and about their status:
32  */
33
34 struct multipath_bh {
35         mddev_t                 *mddev;
36         struct bio              *master_bio;
37         struct bio              bio;
38         int                     path;
39         struct multipath_bh     *next_mp; /* next for retry */
40 };
41 #endif