1 /****************************************************************************
2 ****************************************************************************
4 *** This header was automatically generated from a Linux kernel header
5 *** of the same name, to make information necessary for userspace to
6 *** call into the kernel available to libc. It contains only constants,
7 *** structures, and macros generated from the original header, and thus,
8 *** contains no copyrightable information.
10 ****************************************************************************
11 ****************************************************************************/
15 #include "../../../drivers/md/dm-bio-list.h"
17 #define LEVEL_MULTIPATH (-4)
18 #define LEVEL_LINEAR (-1)
19 #define LEVEL_FAULTY (-5)
21 #define LEVEL_NONE (-1000000)
23 #define MaxSector (~(sector_t)0)
24 #define MD_THREAD_NAME_MAX 14
26 typedef struct mddev_s mddev_t;
27 typedef struct mdk_rdev_s mdk_rdev_t;
29 #define MAX_MD_DEVS 256
31 #define MAX_CHUNK_SIZE (1<<30)
35 struct list_head same_set;
39 unsigned long last_events;
41 struct block_device *bdev;
57 #define BarriersNotsupp 5
62 sector_t recovery_offset;
66 atomic_t corrected_errors;
72 struct mdk_personality *pers;
75 struct list_head disks;
79 struct gendisk *gendisk;
99 sector_t reshape_position;
100 int delta_disks, new_level, new_layout, new_chunk;
102 struct mdk_thread_s *thread;
103 struct mdk_thread_s *sync_thread;
104 sector_t curr_resync;
105 unsigned long resync_mark;
106 sector_t resync_mark_cnt;
107 sector_t curr_mark_cnt;
109 sector_t resync_max_sectors;
111 sector_t resync_mismatches;
119 int ok_start_degraded;
121 #define MD_RECOVERY_RUNNING 0
122 #define MD_RECOVERY_SYNC 1
123 #define MD_RECOVERY_ERR 2
124 #define MD_RECOVERY_INTR 3
125 #define MD_RECOVERY_DONE 4
126 #define MD_RECOVERY_NEEDED 5
127 #define MD_RECOVERY_REQUESTED 6
128 #define MD_RECOVERY_CHECK 7
129 #define MD_RECOVERY_RESHAPE 8
130 #define MD_RECOVERY_FROZEN 9
132 unsigned long recovery;
135 struct mutex reconfig_mutex;
143 atomic_t recovery_active;
144 wait_queue_head_t recovery_wait;
145 sector_t recovery_cp;
147 spinlock_t write_lock;
148 wait_queue_head_t sb_wait;
149 atomic_t pending_writes;
151 unsigned int safemode;
152 unsigned int safemode_delay;
153 struct timer_list safemode_timer;
154 atomic_t writes_pending;
155 request_queue_t *queue;
157 atomic_t write_behind;
158 unsigned int max_write_behind;
160 struct bitmap *bitmap;
161 struct file *bitmap_file;
163 long default_bitmap_offset;
165 struct list_head all_mddevs;
168 struct md_sysfs_entry {
169 struct attribute attr;
170 ssize_t (*show)(mddev_t *, char *);
171 ssize_t (*store)(mddev_t *, const char *, size_t);
174 #define ITERATE_RDEV_GENERIC(head,rdev,tmp) for ((tmp) = (head).next; (rdev) = (list_entry((tmp), mdk_rdev_t, same_set)), (tmp) = (tmp)->next, (tmp)->prev != &(head) ; )
175 #define ITERATE_RDEV(mddev,rdev,tmp) ITERATE_RDEV_GENERIC((mddev)->disks,rdev,tmp)
176 #define ITERATE_RDEV_PENDING(rdev,tmp) ITERATE_RDEV_GENERIC(pending_raid_disks,rdev,tmp)
178 #define THREAD_WAKEUP 0
180 #define __wait_event_lock_irq(wq, condition, lock, cmd) do { wait_queue_t __wait; init_waitqueue_entry(&__wait, current); add_wait_queue(&wq, &__wait); for (;;) { set_current_state(TASK_UNINTERRUPTIBLE); if (condition) break; spin_unlock_irq(&lock); cmd; schedule(); spin_lock_irq(&lock); } current->state = TASK_RUNNING; remove_wait_queue(&wq, &__wait); } while (0)
182 #define wait_event_lock_irq(wq, condition, lock, cmd) do { if (condition) break; __wait_event_lock_irq(wq, condition, lock, cmd); } while (0)