1ef740c37SChristoph Hellwig #ifndef _RAID1_H 2ef740c37SChristoph Hellwig #define _RAID1_H 3ef740c37SChristoph Hellwig 4ef740c37SChristoph Hellwig typedef struct mirror_info mirror_info_t; 5ef740c37SChristoph Hellwig 6ef740c37SChristoph Hellwig struct mirror_info { 7ef740c37SChristoph Hellwig mdk_rdev_t *rdev; 8ef740c37SChristoph Hellwig sector_t head_position; 9ef740c37SChristoph Hellwig }; 10ef740c37SChristoph Hellwig 11ef740c37SChristoph Hellwig /* 12ef740c37SChristoph Hellwig * memory pools need a pointer to the mddev, so they can force an unplug 13ef740c37SChristoph Hellwig * when memory is tight, and a count of the number of drives that the 14ef740c37SChristoph Hellwig * pool was allocated for, so they know how much to allocate and free. 15ef740c37SChristoph Hellwig * mddev->raid_disks cannot be used, as it can change while a pool is active 16ef740c37SChristoph Hellwig * These two datums are stored in a kmalloced struct. 17ef740c37SChristoph Hellwig */ 18ef740c37SChristoph Hellwig 19ef740c37SChristoph Hellwig struct pool_info { 20ef740c37SChristoph Hellwig mddev_t *mddev; 21ef740c37SChristoph Hellwig int raid_disks; 22ef740c37SChristoph Hellwig }; 23ef740c37SChristoph Hellwig 24ef740c37SChristoph Hellwig 25ef740c37SChristoph Hellwig typedef struct r1bio_s r1bio_t; 26ef740c37SChristoph Hellwig 27ef740c37SChristoph Hellwig struct r1_private_data_s { 28ef740c37SChristoph Hellwig mddev_t *mddev; 29ef740c37SChristoph Hellwig mirror_info_t *mirrors; 30ef740c37SChristoph Hellwig int raid_disks; 31ef740c37SChristoph Hellwig int last_used; 32ef740c37SChristoph Hellwig sector_t next_seq_sect; 33ef740c37SChristoph Hellwig spinlock_t device_lock; 34ef740c37SChristoph Hellwig 35ef740c37SChristoph Hellwig struct list_head retry_list; 36ef740c37SChristoph Hellwig /* queue pending writes and submit them on unplug */ 37ef740c37SChristoph Hellwig struct bio_list pending_bio_list; 38ef740c37SChristoph Hellwig 39ef740c37SChristoph Hellwig /* for use when syncing mirrors: */ 40ef740c37SChristoph Hellwig 41ef740c37SChristoph Hellwig spinlock_t resync_lock; 42ef740c37SChristoph Hellwig int nr_pending; 43ef740c37SChristoph Hellwig int nr_waiting; 44ef740c37SChristoph Hellwig int nr_queued; 45ef740c37SChristoph Hellwig int barrier; 46ef740c37SChristoph Hellwig sector_t next_resync; 47ef740c37SChristoph Hellwig int fullsync; /* set to 1 if a full sync is needed, 48ef740c37SChristoph Hellwig * (fresh device added). 49ef740c37SChristoph Hellwig * Cleared when a sync completes. 50ef740c37SChristoph Hellwig */ 515389042fSNeilBrown int recovery_disabled; /* when the same as 525389042fSNeilBrown * mddev->recovery_disabled 535389042fSNeilBrown * we don't allow recovery 545389042fSNeilBrown * to be attempted as we 555389042fSNeilBrown * expect a read error 565389042fSNeilBrown */ 57ef740c37SChristoph Hellwig 58ef740c37SChristoph Hellwig wait_queue_head_t wait_barrier; 59ef740c37SChristoph Hellwig 60ef740c37SChristoph Hellwig struct pool_info *poolinfo; 61ef740c37SChristoph Hellwig 62ef740c37SChristoph Hellwig struct page *tmppage; 63ef740c37SChristoph Hellwig 64ef740c37SChristoph Hellwig mempool_t *r1bio_pool; 65ef740c37SChristoph Hellwig mempool_t *r1buf_pool; 66709ae487SNeilBrown 67709ae487SNeilBrown /* When taking over an array from a different personality, we store 68709ae487SNeilBrown * the new thread here until we fully activate the array. 69709ae487SNeilBrown */ 70709ae487SNeilBrown struct mdk_thread_s *thread; 71ef740c37SChristoph Hellwig }; 72ef740c37SChristoph Hellwig 73ef740c37SChristoph Hellwig typedef struct r1_private_data_s conf_t; 74ef740c37SChristoph Hellwig 75ef740c37SChristoph Hellwig /* 76ef740c37SChristoph Hellwig * this is our 'private' RAID1 bio. 77ef740c37SChristoph Hellwig * 78ef740c37SChristoph Hellwig * it contains information about what kind of IO operations were started 79ef740c37SChristoph Hellwig * for this RAID1 operation, and about their status: 80ef740c37SChristoph Hellwig */ 81ef740c37SChristoph Hellwig 82ef740c37SChristoph Hellwig struct r1bio_s { 83ef740c37SChristoph Hellwig atomic_t remaining; /* 'have we finished' count, 84ef740c37SChristoph Hellwig * used from IRQ handlers 85ef740c37SChristoph Hellwig */ 86ef740c37SChristoph Hellwig atomic_t behind_remaining; /* number of write-behind ios remaining 87ef740c37SChristoph Hellwig * in this BehindIO request 88ef740c37SChristoph Hellwig */ 89ef740c37SChristoph Hellwig sector_t sector; 90ef740c37SChristoph Hellwig int sectors; 91ef740c37SChristoph Hellwig unsigned long state; 92ef740c37SChristoph Hellwig mddev_t *mddev; 93ef740c37SChristoph Hellwig /* 94ef740c37SChristoph Hellwig * original bio going to /dev/mdx 95ef740c37SChristoph Hellwig */ 96ef740c37SChristoph Hellwig struct bio *master_bio; 97ef740c37SChristoph Hellwig /* 98ef740c37SChristoph Hellwig * if the IO is in READ direction, then this is where we read 99ef740c37SChristoph Hellwig */ 100ef740c37SChristoph Hellwig int read_disk; 101ef740c37SChristoph Hellwig 102ef740c37SChristoph Hellwig struct list_head retry_list; 103af6d7b76SNeilBrown /* Next two are only valid when R1BIO_BehindIO is set */ 104af6d7b76SNeilBrown struct page **behind_pages; 105af6d7b76SNeilBrown int behind_page_count; 106ef740c37SChristoph Hellwig /* 107ef740c37SChristoph Hellwig * if the IO is in WRITE direction, then multiple bios are used. 108ef740c37SChristoph Hellwig * We choose the number when they are allocated. 109ef740c37SChristoph Hellwig */ 110ef740c37SChristoph Hellwig struct bio *bios[0]; 111ef740c37SChristoph Hellwig /* DO NOT PUT ANY NEW FIELDS HERE - bios array is contiguously alloced*/ 112ef740c37SChristoph Hellwig }; 113ef740c37SChristoph Hellwig 114ef740c37SChristoph Hellwig /* when we get a read error on a read-only array, we redirect to another 115ef740c37SChristoph Hellwig * device without failing the first device, or trying to over-write to 116ef740c37SChristoph Hellwig * correct the read error. To keep track of bad blocks on a per-bio 117ef740c37SChristoph Hellwig * level, we store IO_BLOCKED in the appropriate 'bios' pointer 118ef740c37SChristoph Hellwig */ 119ef740c37SChristoph Hellwig #define IO_BLOCKED ((struct bio *)1) 120*4367af55SNeilBrown /* When we successfully write to a known bad-block, we need to remove the 121*4367af55SNeilBrown * bad-block marking which must be done from process context. So we record 122*4367af55SNeilBrown * the success by setting bios[n] to IO_MADE_GOOD 123*4367af55SNeilBrown */ 124*4367af55SNeilBrown #define IO_MADE_GOOD ((struct bio *)2) 125*4367af55SNeilBrown 126*4367af55SNeilBrown #define BIO_SPECIAL(bio) ((unsigned long)bio <= 2) 127ef740c37SChristoph Hellwig 128ef740c37SChristoph Hellwig /* bits for r1bio.state */ 129ef740c37SChristoph Hellwig #define R1BIO_Uptodate 0 130ef740c37SChristoph Hellwig #define R1BIO_IsSync 1 131ef740c37SChristoph Hellwig #define R1BIO_Degraded 2 132ef740c37SChristoph Hellwig #define R1BIO_BehindIO 3 133d2eb35acSNeilBrown /* Set ReadError on bios that experience a readerror so that 134d2eb35acSNeilBrown * raid1d knows what to do with them. 135d2eb35acSNeilBrown */ 136d2eb35acSNeilBrown #define R1BIO_ReadError 4 137ef740c37SChristoph Hellwig /* For write-behind requests, we call bi_end_io when 138ef740c37SChristoph Hellwig * the last non-write-behind device completes, providing 139ef740c37SChristoph Hellwig * any write was successful. Otherwise we call when 140ef740c37SChristoph Hellwig * any write-behind write succeeds, otherwise we call 141ef740c37SChristoph Hellwig * with failure when last write completes (and all failed). 142ef740c37SChristoph Hellwig * Record that bi_end_io was called with this flag... 143ef740c37SChristoph Hellwig */ 144ef740c37SChristoph Hellwig #define R1BIO_Returned 6 145*4367af55SNeilBrown /* If a write for this request means we can clear some 146*4367af55SNeilBrown * known-bad-block records, we set this flag 147*4367af55SNeilBrown */ 148*4367af55SNeilBrown #define R1BIO_MadeGood 7 149ef740c37SChristoph Hellwig 1501ed7242eSJonathan Brassow extern int md_raid1_congested(mddev_t *mddev, int bits); 1511ed7242eSJonathan Brassow 152ef740c37SChristoph Hellwig #endif 153