#include "md_u.h"
#include "md_p.h"
#include "bitmap.h"
+#include "msg.h"
#include <endian.h>
/* Redhat don't like to #include <asm/byteorder.h>, and
*/
int reshape_active;
unsigned long long reshape_progress;
+ unsigned long long resync_start;
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];
+ int container_member; /* for assembling external-metatdata arrays */
char sys_name[20];
struct mdinfo *devs;
struct mdinfo *next;
+
+ /* Device info for mdmon: */
+ int state_fd;
+ int prev_state, curr_state, next_state;
+
};
struct createinfo {
char *pattern; /* U or up, _ for down */
int percent; /* -1 if no resync */
int resync; /* 1 if resync, 0 if recovery */
+ int devcnt;
+ int raid_disks;
+ int chunk_size;
+ char * metadata_version;
struct mdstat_ent *next;
};
extern struct mdstat_ent *mdstat_read(int hold, int start);
extern void free_mdstat(struct mdstat_ent *ms);
extern void mdstat_wait(int seconds);
+extern void mdstat_wait_fd(int fd);
extern int mddev_busy(int devnum);
struct map_ent {
#define GET_CACHE 16
#define GET_MISMATCH 32
#define GET_VERSION 64
+#define GET_DISKS 128
#define GET_DEVS 1024 /* gets role, major, minor */
#define GET_OFFSET 2048
/* If fd >= 0, get the array it is open on,
* else use devnum. >=0 -> major9. <0.....
*/
+extern int sysfs_open(int devnum, char *devname, char *attr);
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,
extern char *map_dev(int major, int minor, int create);
+struct active_array;
extern struct superswitch {
void (*examine_super)(struct supertype *st, char *homehost);
struct mdinfo *(*container_content)(struct supertype *st);
+/* for mdmon */
+ int (*open_new)(struct supertype *c, struct active_array *a, int inst);
+ void (*mark_clean)(struct active_array *a, unsigned long long sync_pos);
+ void (*mark_dirty)(struct active_array *a);
+ void (*mark_sync)(struct active_array *a, unsigned long long resync);
+ void (*set_disk)(struct active_array *a, int n);
+ void (*sync_metadata)(struct active_array *a);
+
+
int major;
char *text_version;
int swapuuid; /* true if uuid is bigending rather than hostendian */
int container_member; /* numerical position in container */
void *sb;
void *info;
+
+ /* extra stuff used by mdmon */
+ struct active_array *arrays;
+ int devfd;
+ int sock; /* listen to external programs */
+ int pipe[2]; /* communicate between threads */
+ int devnum;
+ char *devname; /* e.g. md0. This appears in metadata_verison:
+ * external:/md0/12
+ */
+ int devcnt;
+
+ struct mdinfo *devs;
+
};
+extern struct supertype supertype_container_member;
extern struct supertype *super_by_fd(int fd);
extern struct supertype *guess_super(int fd);
extern struct supertype *dup_super(struct supertype *st);