diff options
Diffstat (limited to 'libc/kernel/common/linux/raid/md_k.h')
-rw-r--r-- | libc/kernel/common/linux/raid/md_k.h | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/libc/kernel/common/linux/raid/md_k.h b/libc/kernel/common/linux/raid/md_k.h new file mode 100644 index 0000000..c8b858c --- /dev/null +++ b/libc/kernel/common/linux/raid/md_k.h @@ -0,0 +1,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 |