X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=mdadm.h;h=b6102aaa3acf4147446d46573184432989ce2e07;hp=20ed452027d63afeaadbc1fa9746ea563587eea8;hb=ed9d66aadec7ae41751e3a95352628814b47fbad;hpb=1ed3f38758ff23dabfa3f67e2a02ff98d9d0fea8 diff --git a/mdadm.h b/mdadm.h index 20ed4520..b6102aaa 100644 --- a/mdadm.h +++ b/mdadm.h @@ -411,16 +411,15 @@ extern struct superswitch { /* for mdmon */ int (*open_new)(struct supertype *c, struct active_array *a, int inst); - /* This tells the metadata handler that all data up to sync_pos is - * known to be insync, and will stay insync until told otherwise. - * All data beyond sync_pos may not be insync. - * If sync_pos == 0, this marks the array as 'dirty'. - * If sync_pos == ~0, this marks it as fully 'clean'. - * If other numbers cannot be stored, they should be treated as 0. - * mark_clean is always called with a sync_pos of 0 before any - * write to an array with redundancy is allowed. + + /* Tell the metadata handler the current state of the array. + * This covers whether it is known to be consistent (no pending writes) + * when how far along a resync is known to have progressed + * (in a->resync_start). + * resync status is really irrelevant if the array is not consistent, + * but some metadata (DDF!) have a place to record the distinction. */ - void (*mark_clean)(struct active_array *a, unsigned long long sync_pos); + void (*set_array_state)(struct active_array *a, int consistent); /* When the state of a device might have changed, we call set_disk to * tell the metadata what the current state is. @@ -452,7 +451,6 @@ struct supertype { /* extra stuff used by mdmon */ struct active_array *arrays; - int devfd; int sock; /* listen to external programs */ int mgr_pipe[2]; /* communicate between threads */ int mon_pipe[2]; /* communicate between threads */ @@ -461,6 +459,7 @@ struct supertype { * external:/md0/12 */ int devcnt; + char *device_name; /* e.g. /dev/md/whatever */ struct mdinfo *devs; @@ -584,6 +583,7 @@ extern int check_raid(int fd, char *name); extern int get_mdp_major(void); extern int dev_open(char *dev, int flags); +extern int open_dev_excl(int devnum); extern int is_standard(char *dev, int *nump); extern int parse_auto(char *str, char *msg, int config); @@ -629,9 +629,27 @@ extern int open_mddev_devnum(char *devname, int devnum, char *name, char *chosen_name, int parts); extern int open_container(int fd); +extern int mdmon_running(int devnum); +extern int signal_mdmon(int devnum); + extern char *devnum2devname(int num); extern int fd2devnum(int fd); +static inline int dev2major(int d) +{ + if (d >= 0) + return MD_MAJOR; + else + return get_mdp_major(); +} + +static inline int dev2minor(int d) +{ + if (d >= 0) + return d; + return (-1-d) << MdpMinorShift; +} + #define LEVEL_MULTIPATH (-4) #define LEVEL_LINEAR (-1) #define LEVEL_FAULTY (-5)