X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=mdadm.h;h=71903768f21eedb4cf32e80e6bad464ddda69205;hp=a001e9f9615a02b4fe3e2585d139077948574881;hb=111d01fcc76d2e7d0b05f78fae67e89cdf6856ad;hpb=1686dc25ecf60a9b7691d73fc2b5a7e08184c940 diff --git a/mdadm.h b/mdadm.h index a001e9f9..71903768 100644 --- a/mdadm.h +++ b/mdadm.h @@ -28,6 +28,7 @@ */ #define _GNU_SOURCE +#define _FILE_OFFSET_BITS 64 #include #if !defined(__dietlibc__) && !defined(__KLIBC__) extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence)); @@ -105,6 +106,13 @@ extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence)); #define __le16_to_cpu(_x) (_x) #define __le32_to_cpu(_x) (_x) #define __le64_to_cpu(_x) (_x) + +#define __cpu_to_be16(_x) bswap_16(_x) +#define __cpu_to_be32(_x) bswap_32(_x) +#define __cpu_to_be64(_x) bswap_64(_x) +#define __be16_to_cpu(_x) bswap_16(_x) +#define __be32_to_cpu(_x) bswap_32(_x) +#define __be64_to_cpu(_x) bswap_64(_x) #elif BYTE_ORDER == BIG_ENDIAN #define __cpu_to_le16(_x) bswap_16(_x) #define __cpu_to_le32(_x) bswap_32(_x) @@ -112,6 +120,13 @@ extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence)); #define __le16_to_cpu(_x) bswap_16(_x) #define __le32_to_cpu(_x) bswap_32(_x) #define __le64_to_cpu(_x) bswap_64(_x) + +#define __cpu_to_be16(_x) (_x) +#define __cpu_to_be32(_x) (_x) +#define __cpu_to_be64(_x) (_x) +#define __be16_to_cpu(_x) (_x) +#define __be32_to_cpu(_x) (_x) +#define __be64_to_cpu(_x) (_x) #else # error "unknown endianness." #endif @@ -131,6 +146,14 @@ struct mdinfo { int reshape_active; unsigned long long reshape_progress; int new_level, delta_disks, new_layout, new_chunk; + int errors; + int cache_size; /* size of raid456 stripe cache*/ + int mismatch_cnt; + char text_version[50]; + + char sys_name[20]; + struct mdinfo *devs; + struct mdinfo *next; }; struct createinfo { @@ -268,28 +291,6 @@ extern void map_free(struct map_ent *map); extern void map_add(struct map_ent **melp, int devnum, int major, int minor, int uuid[4], char *path); -/* Data structure for holding info read from sysfs */ -struct sysdev { - char name[20]; - int role; - int major, minor; - unsigned long long offset, size; - int state; - int errors; - struct sysdev *next; -}; -struct sysarray { - char name[20]; - struct sysdev *devs; - int chunk; - unsigned long long component_size; - int layout; - int level; - int spares; - int cache_size; - int mismatch_cnt; - int major_version, minor_version; -}; /* various details can be requested */ #define GET_LEVEL 1 #define GET_LAYOUT 2 @@ -308,13 +309,13 @@ struct sysarray { /* If fd >= 0, get the array it is open on, * else use devnum. >=0 -> major9. <0..... */ -extern void sysfs_free(struct sysarray *sra); -extern struct sysarray *sysfs_read(int fd, int devnum, unsigned long options); -extern int sysfs_set_str(struct sysarray *sra, struct sysdev *dev, +extern void sysfs_free(struct mdinfo *sra); +extern struct mdinfo *sysfs_read(int fd, int devnum, unsigned long options); +extern int sysfs_set_str(struct mdinfo *sra, struct mdinfo *dev, char *name, char *val); -extern int sysfs_set_num(struct sysarray *sra, struct sysdev *dev, +extern int sysfs_set_num(struct mdinfo *sra, struct mdinfo *dev, char *name, unsigned long long val); -extern int sysfs_get_ll(struct sysarray *sra, struct sysdev *dev, +extern int sysfs_get_ll(struct mdinfo *sra, struct mdinfo *dev, char *name, unsigned long long *val); @@ -343,9 +344,10 @@ extern char *map_dev(int major, int minor, int create); extern struct superswitch { void (*examine_super)(struct supertype *st, char *homehost); void (*brief_examine_super)(struct supertype *st); + void (*export_examine_super)(struct supertype *st); void (*detail_super)(struct supertype *st, char *homehost); - void (*export_super)(struct supertype *st); void (*brief_detail_super)(struct supertype *st); + void (*export_detail_super)(struct supertype *st); void (*uuid_from_super)(struct supertype *st, int uuid[4]); void (*getinfo_super)(struct supertype *st, struct mdinfo *info); int (*match_home)(struct supertype *st, char *homehost); @@ -356,10 +358,10 @@ extern struct superswitch { int (*init_super)(struct supertype *st, mdu_array_info_t *info, unsigned long long size, char *name, char *homehost, int *uuid); - void (*add_to_super)(struct supertype *st, mdu_disk_info_t *dinfo); + void (*add_to_super)(struct supertype *st, mdu_disk_info_t *dinfo, + int fd, char *devname); int (*store_super)(struct supertype *st, int fd); - int (*write_init_super)(struct supertype *st, mdu_disk_info_t *dinfo, - char *devname); + int (*write_init_super)(struct supertype *st); int (*compare_super)(struct supertype *st, struct supertype *tst); int (*load_super)(struct supertype *st, int fd, char *devname); struct supertype * (*match_metadata_desc)(char *arg); @@ -370,6 +372,10 @@ extern struct superswitch { void (*locate_bitmap)(struct supertype *st, int fd); int (*write_bitmap)(struct supertype *st, int fd); void (*free_super)(struct supertype *st); + int (*validate_geometry)(struct supertype *st, int level, int layout, + int raiddisks, + int chunk, unsigned long long size, + char *subdev, unsigned long long *freesize); int major; int swapuuid; /* true if uuid is bigending rather than hostendian */ } super0, super1, *superlist[]; @@ -379,6 +385,7 @@ struct supertype { int minor_version; int max_devs; void *sb; + void *info; }; extern struct supertype *super_by_fd(int fd); @@ -464,14 +471,14 @@ extern int Create(struct supertype *st, char *mddev, int mdfd, extern int Detail(char *dev, int brief, int export, int test, char *homehost); extern int Query(char *dev); -extern int Examine(mddev_dev_t devlist, int brief, int scan, int SparcAdjust, - struct supertype *forcest, char *homehost); +extern int Examine(mddev_dev_t devlist, int brief, int export, int scan, + int SparcAdjust, struct supertype *forcest, char *homehost); extern int Monitor(mddev_dev_t devlist, char *mailaddr, char *alert_cmd, int period, int daemonise, int scan, int oneshot, int dosyslog, int test, char *pidfile); -extern int Kill(char *dev, int force, int quiet); +extern int Kill(char *dev, int force, int quiet, int noexcl); extern int Wait(char *dev); extern int Incremental(char *devname, int verbose, int runstop, @@ -526,6 +533,9 @@ extern void remove_partitions(int fd); extern char *human_size(long long bytes); char *human_size_brief(long long bytes); +#define NoMdDev (1<<23) +extern int find_free_devnum(int use_partitions); + extern void put_md_name(char *name); extern char *get_md_name(int dev); @@ -533,13 +543,16 @@ extern char DefaultConfFile[]; extern int open_mddev(char *dev, int autof); extern int open_mddev_devnum(char *devname, int devnum, char *name, - char *chosen_name); + char *chosen_name, int parts); #define LEVEL_MULTIPATH (-4) #define LEVEL_LINEAR (-1) #define LEVEL_FAULTY (-5) +/* kernel module doesn't know about these */ +#define LEVEL_CONTAINER (-100) + /* faulty stuff */