X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=drivers%2Fmd%2Fraid1.h;h=b6bc7b1c589d8d5f7d725a575b42bbb4dd939f51;hb=fd01b88c75a718020ff77e7f560d33835e9b58de;hp=e0d676b4897498d22390600012da67e751b185ea;hpb=968e75fc13b6d582f42ce44172e13ba58157e11f;p=deliverable%2Flinux.git diff --git a/drivers/md/raid1.h b/drivers/md/raid1.h index e0d676b48974..b6bc7b1c589d 100644 --- a/drivers/md/raid1.h +++ b/drivers/md/raid1.h @@ -4,7 +4,7 @@ typedef struct mirror_info mirror_info_t; struct mirror_info { - mdk_rdev_t *rdev; + struct md_rdev *rdev; sector_t head_position; }; @@ -17,7 +17,7 @@ struct mirror_info { */ struct pool_info { - mddev_t *mddev; + struct mddev *mddev; int raid_disks; }; @@ -25,45 +25,70 @@ struct pool_info { typedef struct r1bio_s r1bio_t; struct r1_private_data_s { - mddev_t *mddev; + struct mddev *mddev; mirror_info_t *mirrors; int raid_disks; + + /* When choose the best device for a read (read_balance()) + * we try to keep sequential reads one the same device + * using 'last_used' and 'next_seq_sect' + */ int last_used; sector_t next_seq_sect; + /* During resync, read_balancing is only allowed on the part + * of the array that has been resynced. 'next_resync' tells us + * where that is. + */ + sector_t next_resync; + spinlock_t device_lock; + /* list of 'r1bio_t' that need to be processed by raid1d, whether + * to retry a read, writeout a resync or recovery block, or + * anything else. + */ struct list_head retry_list; - /* queue pending writes and submit them on unplug */ - struct bio_list pending_bio_list; - /* for use when syncing mirrors: */ + /* queue pending writes to be submitted on unplug */ + struct bio_list pending_bio_list; + /* for use when syncing mirrors: + * We don't allow both normal IO and resync/recovery IO at + * the same time - resync/recovery can only happen when there + * is no other IO. So when either is active, the other has to wait. + * See more details description in raid1.c near raise_barrier(). + */ + wait_queue_head_t wait_barrier; spinlock_t resync_lock; int nr_pending; int nr_waiting; int nr_queued; int barrier; - sector_t next_resync; - int fullsync; /* set to 1 if a full sync is needed, - * (fresh device added). - * Cleared when a sync completes. - */ - int recovery_disabled; /* when the same as - * mddev->recovery_disabled - * we don't allow recovery - * to be attempted as we - * expect a read error - */ - wait_queue_head_t wait_barrier; + /* Set to 1 if a full sync is needed, (fresh device added). + * Cleared when a sync completes. + */ + int fullsync; - struct pool_info *poolinfo; + /* When the same as mddev->recovery_disabled we don't allow + * recovery to be attempted as we expect a read error. + */ + int recovery_disabled; - struct page *tmppage; + /* poolinfo contains information about the content of the + * mempools - it changes when the array grows or shrinks + */ + struct pool_info *poolinfo; mempool_t *r1bio_pool; mempool_t *r1buf_pool; + /* temporary buffer to synchronous IO when attempting to repair + * a read error. + */ + struct page *tmppage; + + /* When taking over an array from a different personality, we store * the new thread here until we fully activate the array. */ @@ -89,7 +114,7 @@ struct r1bio_s { sector_t sector; int sectors; unsigned long state; - mddev_t *mddev; + struct mddev *mddev; /* * original bio going to /dev/mdx */ @@ -148,6 +173,6 @@ struct r1bio_s { #define R1BIO_MadeGood 7 #define R1BIO_WriteError 8 -extern int md_raid1_congested(mddev_t *mddev, int bits); +extern int md_raid1_congested(struct mddev *mddev, int bits); #endif