1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
/****************************************************************************
****************************************************************************
***
*** This header was automatically generated from a Linux kernel header
*** of the same name, to make information necessary for userspace to
*** call into the kernel available to libc. It contains only constants,
*** structures, and macros generated from the original header, and thus,
*** contains no copyrightable information.
***
****************************************************************************
****************************************************************************/
#ifndef _MD_K_H
#define _MD_K_H
#include "../../../drivers/md/dm-bio-list.h"
#define LEVEL_MULTIPATH (-4)
#define LEVEL_LINEAR (-1)
#define LEVEL_FAULTY (-5)
#define LEVEL_NONE (-1000000)
#define MaxSector (~(sector_t)0)
#define MD_THREAD_NAME_MAX 14
typedef struct mddev_s mddev_t;
typedef struct mdk_rdev_s mdk_rdev_t;
#define MAX_MD_DEVS 256
#define MAX_CHUNK_SIZE (1<<30)
struct mdk_rdev_s
{
struct list_head same_set;
sector_t size;
mddev_t *mddev;
unsigned long last_events;
struct block_device *bdev;
struct page *sb_page;
int sb_loaded;
__u64 sb_events;
sector_t data_offset;
sector_t sb_offset;
int sb_size;
int preferred_minor;
struct kobject kobj;
unsigned long flags;
#define Faulty 1
#define In_sync 2
#define WriteMostly 4
#define BarriersNotsupp 5
int desc_nr;
int raid_disk;
int saved_raid_disk;
sector_t recovery_offset;
atomic_t nr_pending;
atomic_t read_errors;
atomic_t corrected_errors;
};
struct mddev_s
{
void *private;
struct mdk_personality *pers;
dev_t unit;
int md_minor;
struct list_head disks;
int sb_dirty;
int ro;
struct gendisk *gendisk;
struct kobject kobj;
int major_version,
minor_version,
patch_version;
int persistent;
int chunk_size;
time_t ctime, utime;
int level, layout;
char clevel[16];
int raid_disks;
int max_disks;
sector_t size;
sector_t array_size;
__u64 events;
char uuid[16];
sector_t reshape_position;
int delta_disks, new_level, new_layout, new_chunk;
struct mdk_thread_s *thread;
struct mdk_thread_s *sync_thread;
sector_t curr_resync;
unsigned long resync_mark;
sector_t resync_mark_cnt;
sector_t curr_mark_cnt;
sector_t resync_max_sectors;
sector_t resync_mismatches;
sector_t suspend_lo;
sector_t suspend_hi;
int sync_speed_min;
int sync_speed_max;
int ok_start_degraded;
#define MD_RECOVERY_RUNNING 0
#define MD_RECOVERY_SYNC 1
#define MD_RECOVERY_ERR 2
#define MD_RECOVERY_INTR 3
#define MD_RECOVERY_DONE 4
#define MD_RECOVERY_NEEDED 5
#define MD_RECOVERY_REQUESTED 6
#define MD_RECOVERY_CHECK 7
#define MD_RECOVERY_RESHAPE 8
#define MD_RECOVERY_FROZEN 9
unsigned long recovery;
int in_sync;
struct mutex reconfig_mutex;
atomic_t active;
int changed;
int degraded;
int barriers_work;
struct bio *biolist;
atomic_t recovery_active;
wait_queue_head_t recovery_wait;
sector_t recovery_cp;
spinlock_t write_lock;
wait_queue_head_t sb_wait;
atomic_t pending_writes;
unsigned int safemode;
unsigned int safemode_delay;
struct timer_list safemode_timer;
atomic_t writes_pending;
request_queue_t *queue;
atomic_t write_behind;
unsigned int max_write_behind;
struct bitmap *bitmap;
struct file *bitmap_file;
long bitmap_offset;
long default_bitmap_offset;
struct list_head all_mddevs;
};
struct md_sysfs_entry {
struct attribute attr;
ssize_t (*show)(mddev_t *, char *);
ssize_t (*store)(mddev_t *, const char *, size_t);
};
#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) ; )
#define ITERATE_RDEV(mddev,rdev,tmp) ITERATE_RDEV_GENERIC((mddev)->disks,rdev,tmp)
#define ITERATE_RDEV_PENDING(rdev,tmp) ITERATE_RDEV_GENERIC(pending_raid_disks,rdev,tmp)
#define THREAD_WAKEUP 0
#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)
#define wait_event_lock_irq(wq, condition, lock, cmd) do { if (condition) break; __wait_event_lock_irq(wq, condition, lock, cmd); } while (0)
#endif
|