*/
#define _GNU_SOURCE
+#define _FILE_OFFSET_BITS 64
#include <unistd.h>
#if !defined(__dietlibc__) && !defined(__KLIBC__)
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)
#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
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 {
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
/* 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);
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);
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);
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;
+ char *text_version;
int swapuuid; /* true if uuid is bigending rather than hostendian */
+ int external;
} super0, super1, *superlist[];
struct supertype {
int minor_version;
int max_devs;
void *sb;
+ void *info;
};
extern struct supertype *super_by_fd(int fd);
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,
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);
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 */