at v2.6.12 2.1 kB view raw
1#ifndef _RAID1_H 2#define _RAID1_H 3 4#include <linux/raid/md.h> 5 6typedef struct mirror_info mirror_info_t; 7 8struct mirror_info { 9 mdk_rdev_t *rdev; 10 sector_t head_position; 11}; 12 13/* 14 * memory pools need a pointer to the mddev, so they can force an unplug 15 * when memory is tight, and a count of the number of drives that the 16 * pool was allocated for, so they know how much to allocate and free. 17 * mddev->raid_disks cannot be used, as it can change while a pool is active 18 * These two datums are stored in a kmalloced struct. 19 */ 20 21struct pool_info { 22 mddev_t *mddev; 23 int raid_disks; 24}; 25 26 27typedef struct r1bio_s r1bio_t; 28 29struct r1_private_data_s { 30 mddev_t *mddev; 31 mirror_info_t *mirrors; 32 int raid_disks; 33 int working_disks; 34 int last_used; 35 sector_t next_seq_sect; 36 spinlock_t device_lock; 37 38 struct list_head retry_list; 39 /* for use when syncing mirrors: */ 40 41 spinlock_t resync_lock; 42 int nr_pending; 43 int barrier; 44 sector_t next_resync; 45 46 wait_queue_head_t wait_idle; 47 wait_queue_head_t wait_resume; 48 49 struct pool_info *poolinfo; 50 51 mempool_t *r1bio_pool; 52 mempool_t *r1buf_pool; 53}; 54 55typedef struct r1_private_data_s conf_t; 56 57/* 58 * this is the only point in the RAID code where we violate 59 * C type safety. mddev->private is an 'opaque' pointer. 60 */ 61#define mddev_to_conf(mddev) ((conf_t *) mddev->private) 62 63/* 64 * this is our 'private' RAID1 bio. 65 * 66 * it contains information about what kind of IO operations were started 67 * for this RAID1 operation, and about their status: 68 */ 69 70struct r1bio_s { 71 atomic_t remaining; /* 'have we finished' count, 72 * used from IRQ handlers 73 */ 74 sector_t sector; 75 int sectors; 76 unsigned long state; 77 mddev_t *mddev; 78 /* 79 * original bio going to /dev/mdx 80 */ 81 struct bio *master_bio; 82 /* 83 * if the IO is in READ direction, then this is where we read 84 */ 85 int read_disk; 86 87 struct list_head retry_list; 88 /* 89 * if the IO is in WRITE direction, then multiple bios are used. 90 * We choose the number when they are allocated. 91 */ 92 struct bio *bios[0]; 93}; 94 95/* bits for r1bio.state */ 96#define R1BIO_Uptodate 0 97#define R1BIO_IsSync 1 98#endif