X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=mdadm.h;h=61d0469c456907b015cdd9d55e9ca0aac56bd21f;hb=e86c9dd6d847ec57ec400b118efaf2c1808f10bc;hp=015d4707cce7e3e7a716eca9d4c84b4dbb45dce5;hpb=dab6685f3d9982b697d938d99737897ea8ac768c;p=thirdparty%2Fmdadm.git diff --git a/mdadm.h b/mdadm.h index 015d4707..61d0469c 100644 --- a/mdadm.h +++ b/mdadm.h @@ -43,6 +43,7 @@ extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence)); #include #include #include +#include #ifdef __dietlibc__NONO int strncmp(const char *s1, const char *s2, size_t n) __THROW __pure__; char *strncpy(char *dest, const char *src, size_t n) __THROW; @@ -70,6 +71,20 @@ char *strncpy(char *dest, const char *src, size_t n) __THROW; #include "md_p.h" #include "bitmap.h" +#include +/* #include "asm/byteorder.h" Redhat don't like this so... */ +#if __BYTE_ORDER == __LITTLE_ENDIAN +# include +#elif __BYTE_ORDER == __BIG_ENDIAN +# include +#elif __BYTE_ORDER == __PDP_ENDIAN +# include +#else +# error "unknown endianness." +#endif + + + /* general information that might be extracted from a superblock */ struct mdinfo { mdu_array_info_t array; @@ -91,6 +106,7 @@ enum mode { }; extern char short_options[]; +extern char short_bitmap_auto_options[]; extern struct option long_options[]; extern char Version[], Usage[], Help[], OptionHelp[], Help_create[], Help_build[], Help_assemble[], Help_grow[], @@ -137,6 +153,7 @@ typedef struct mddev_dev_s { * Not set for names read from .config */ char writemostly; + char re_add; struct mddev_dev_s *next; } *mddev_dev_t; @@ -157,14 +174,64 @@ struct mdstat_ent { struct mdstat_ent *next; }; -extern struct mdstat_ent *mdstat_read(int); +extern struct mdstat_ent *mdstat_read(int hold, int start); extern void free_mdstat(struct mdstat_ent *ms); extern void mdstat_wait(int seconds); +/* 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; +}; +/* various details can be requested */ +#define GET_LEVEL 1 +#define GET_LAYOUT 2 +#define GET_COMPONENT 4 +#define GET_CHUNK 8 + +#define GET_DEVS 1024 /* gets role, major, minor */ +#define GET_OFFSET 2048 +#define GET_SIZE 4096 +#define GET_STATE 8192 +#define GET_ERROR 16384 + +/* If fd >= 0, get the array it is open on, + * else use devnum. >=0 -> major9. <0..... + */ +extern struct sysarray *sysfs_read(int fd, int devnum, unsigned long options); +extern int sysfs_set_str(struct sysarray *sra, struct sysdev *dev, + char *name, char *val); +extern int sysfs_set_num(struct sysarray *sra, struct sysdev *dev, + char *name, unsigned long long val); +extern int sysfs_get_ll(struct sysarray *sra, struct sysdev *dev, + char *name, unsigned long long *val); + + +extern int save_stripes(int *source, unsigned long long *offsets, + int raid_disks, int chunk_size, int level, int layout, + int nwrites, int *dest, + unsigned long long start, unsigned long long length); + #ifndef Sendmail #define Sendmail "/usr/lib/sendmail -t" #endif +#define SYSLOG_FACILITY LOG_DAEMON + extern char *map_num(mapping_t *map, int num); extern int map_name(mapping_t *map, char *name); extern mapping_t r5layout[], pers[], modes[], faultylayout[]; @@ -181,16 +248,17 @@ extern struct superswitch { void (*getinfo_super)(struct mdinfo *info, mddev_ident_t ident, void *sbv); int (*update_super)(struct mdinfo *info, void *sbv, char *update, char *devname, int verbose); __u64 (*event_super)(void *sbv); - int (*init_super)(struct supertype *st, void **sbp, mdu_array_info_t *info, char *name); + int (*init_super)(struct supertype *st, void **sbp, mdu_array_info_t *info, unsigned long long size, char *name); void (*add_to_super)(void *sbv, mdu_disk_info_t *dinfo); int (*store_super)(struct supertype *st, int fd, void *sbv); int (*write_init_super)(struct supertype *st, void *sbv, mdu_disk_info_t *dinfo, char *devname); int (*compare_super)(void **firstp, void *secondv); int (*load_super)(struct supertype *st, int fd, void **sbp, char *devname); struct supertype * (*match_metadata_desc)(char *arg); - __u64 (*avail_size)(__u64 size); - int (*add_internal_bitmap)(void *sbv, int chunk, int delay, int write_behind, unsigned long long size); - void (*locate_bitmap)(struct supertype *st, int fd); + __u64 (*avail_size)(struct supertype *st, __u64 size); + int (*add_internal_bitmap)(struct supertype *st, void *sbv, int chunk, int delay, int write_behind, + unsigned long long size, int may_change, int major); + void (*locate_bitmap)(struct supertype *st, int fd, void *sbv); int (*write_bitmap)(struct supertype *st, int fd, void *sbv); int major; int swapuuid; /* true if uuid is bigending rather than hostendian */ @@ -205,6 +273,10 @@ struct supertype { extern struct supertype *super_by_version(int vers, int minor); extern struct supertype *guess_super(int fd); +#if __GNUC__ < 3 +struct stat64; +#endif + #ifdef UCLIBC struct FTW {}; # define FTW_PHYS 1 @@ -226,7 +298,10 @@ extern int Manage_reconfig(char *devname, int fd, int layout); extern int Manage_subdevs(char *devname, int fd, mddev_dev_t devlist, int verbose); extern int Grow_Add_device(char *devname, int fd, char *newdev); -extern int Grow_addbitmap(char *devname, int fd, char *file, int chunk, int delay, int write_behind); +extern int Grow_addbitmap(char *devname, int fd, char *file, int chunk, int delay, int write_behind, int force); +extern int Grow_reshape(char *devname, int fd, int quiet, + long long size, + int level, int layout, int chunksize, int raid_disks); extern int Assemble(struct supertype *st, char *mddev, int mdfd, @@ -244,10 +319,10 @@ extern int Build(char *mddev, int mdfd, int chunk, int level, int layout, extern int Create(struct supertype *st, char *mddev, int mdfd, - int chunk, int level, int layout, unsigned long size, int raiddisks, int sparedisks, + int chunk, int level, int layout, unsigned long long size, int raiddisks, int sparedisks, char *name, int subdevs, mddev_dev_t devlist, - int runstop, int verbose, int force, + int runstop, int verbose, int force, int assume_clean, char *bitmap_file, int bitmap_chunk, int write_behind, int delay); extern int Detail(char *dev, int brief, int test); @@ -257,14 +332,15 @@ extern int Examine(mddev_dev_t devlist, int brief, int scan, int SparcAdjust, extern int Monitor(mddev_dev_t devlist, char *mailaddr, char *alert_cmd, int period, int daemonise, int scan, int oneshot, - char *config, int test, char *pidfile); + int dosyslog, char *config, int test, char *pidfile); extern int Kill(char *dev, int force); extern int CreateBitmap(char *filename, int force, char uuid[16], unsigned long chunksize, unsigned long daemon_sleep, unsigned long write_behind, - unsigned long long array_size); + unsigned long long array_size, + int major); extern int ExamineBitmap(char *filename, int brief, struct supertype *st); extern int md_get_version(int fd); @@ -275,6 +351,7 @@ extern int check_reiser(int fd, char *name); extern int check_raid(int fd, char *name); extern int get_mdp_major(void); +extern int dev_open(char *dev, int flags); extern int is_standard(char *dev, int *nump); @@ -290,8 +367,10 @@ extern void uuid_from_super(int uuid[4], mdp_super_t *super); extern int same_uuid(int a[4], int b[4], int swapuuid); /* extern int compare_super(mdp_super_t *first, mdp_super_t *second);*/ extern unsigned long calc_csum(void *super, int bytes); -extern int enough(int level, int raid_disks, int avail_disks); +extern int enough(int level, int raid_disks, int layout, + char *avail, int avail_disks); extern int ask(char *mesg); +extern unsigned long long get_component_size(int fd); extern char *human_size(long long bytes); @@ -339,3 +418,8 @@ extern int open_mddev(char *dev, int autof); #define makedev(M,m) (((M)<<8) | (m)) #endif +/* for raid5 */ +#define ALGORITHM_LEFT_ASYMMETRIC 0 +#define ALGORITHM_RIGHT_ASYMMETRIC 1 +#define ALGORITHM_LEFT_SYMMETRIC 2 +#define ALGORITHM_RIGHT_SYMMETRIC 3