]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdadm.h
Create: warn when a metadata format's platform components are missing
[thirdparty/mdadm.git] / mdadm.h
diff --git a/mdadm.h b/mdadm.h
index e76bc4d33c0f20b35c36b141a1fe8df2f6347b05..7c8c2f127534e3230a65c39666d89f245c502549 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -225,6 +225,7 @@ enum special_options {
        Symlinks,
        AutoDetect,
        Waitclean,
+       DetailPlatform,
 };
 
 /* structures read from config file */
@@ -278,6 +279,8 @@ typedef struct mddev_dev_s {
        char writemostly;       /* 1 for 'set writemostly', 2 for 'clear writemostly' */
        char re_add;
        char used;              /* set when used */
+       struct mdinfo *content; /* If devname is a container, this might list
+                                * the remaining member arrays. */
        struct mddev_dev_s *next;
 } *mddev_dev_t;
 
@@ -313,12 +316,14 @@ struct map_ent {
        int     devnum;
        char    metadata[20];
        int     uuid[4];
+       int     bad;
        char    *path;
 };
 extern int map_update(struct map_ent **mpp, int devnum, char *metadata,
                      int uuid[4], char *path);
 extern struct map_ent *map_by_uuid(struct map_ent **map, int uuid[4]);
-struct map_ent *map_by_devnum(struct map_ent **map, int devnum);
+extern struct map_ent *map_by_devnum(struct map_ent **map, int devnum);
+extern struct map_ent *map_by_name(struct map_ent **map, char *name);
 extern void map_read(struct map_ent **melp);
 extern int map_write(struct map_ent *mel);
 extern void map_delete(struct map_ent **mapp, int devnum);
@@ -437,6 +442,9 @@ extern struct superswitch {
        void (*brief_detail_super)(struct supertype *st);
        void (*export_detail_super)(struct supertype *st);
 
+       /* Optional: platform hardware / firmware details */
+       int (*detail_platform)(int verbose, int enumerate_only);
+
        /* Used:
         *   to get uuid to storing in bitmap metadata
         *   and 'reshape' backup-data metadata
@@ -444,7 +452,7 @@ extern struct superswitch {
         */
        void (*uuid_from_super)(struct supertype *st, int uuid[4]);
 
-       /* Extra generic details from metadata.  This could be details about
+       /* Extract generic details from metadata.  This could be details about
         * the container, or about an individual array within the container.
         * The determination is made either by:
         *   load_super being given a 'component' string.
@@ -499,7 +507,7 @@ extern struct superswitch {
        /* update the metadata to include new device, either at create or
         * when hot-adding a spare.
         */
-       void (*add_to_super)(struct supertype *st, mdu_disk_info_t *dinfo,
+       int (*add_to_super)(struct supertype *st, mdu_disk_info_t *dinfo,
                             int fd, char *devname);
 
        /* Write metadata to one device when fixing problems or adding
@@ -528,6 +536,7 @@ extern struct superswitch {
         * added to validate changing size and new devices.  If there are
         * inter-device dependencies, it should record sufficient details
         * so these can be validated.
+        * Both 'size' and '*freesize' are in sectors.  chunk is bytes.
         */
        int (*validate_geometry)(struct supertype *st, int level, int layout,
                                 int raiddisks,
@@ -536,6 +545,8 @@ extern struct superswitch {
                                 int verbose);
 
        struct mdinfo *(*container_content)(struct supertype *st);
+       /* Allow a metadata handler to override mdadm's default layouts */
+       int (*default_layout)(int level); /* optional */
 
 /* for mdmon */
        int (*open_new)(struct supertype *c, struct active_array *a,
@@ -580,6 +591,7 @@ extern struct superswitch {
 
        int swapuuid; /* true if uuid is bigending rather than hostendian */
        int external;
+       const char *name; /* canonical metadata name */
 } super0, super1, super_ddf, *superlist[];
 
 extern struct superswitch super_imsm;
@@ -630,7 +642,6 @@ struct supertype {
                        *  external:/md0/12
                        */
        int devcnt;
-       char *device_name; /* e.g. /dev/md/whatever */
 
        struct mdinfo *devs;
 
@@ -642,6 +653,7 @@ extern struct supertype *dup_super(struct supertype *st);
 extern int get_dev_size(int fd, char *dname, unsigned long long *sizep);
 extern void get_one_disk(int mdfd, mdu_array_info_t *ainf,
                         mdu_disk_info_t *disk);
+void wait_for(char *dev);
 
 #if __GNUC__ < 3
 struct stat64;
@@ -718,6 +730,7 @@ extern int Create(struct supertype *st, char *mddev,
                  char *bitmap_file, int bitmap_chunk, int write_behind, int delay, int autof);
 
 extern int Detail(char *dev, int brief, int export, int test, char *homehost);
+extern int Detail_Platform(struct superswitch *ss, int scan, int verbose);
 extern int Query(char *dev);
 extern int Examine(mddev_dev_t devlist, int brief, int export, int scan,
                   int SparcAdjust, struct supertype *forcest, char *homehost);
@@ -756,8 +769,10 @@ 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(int devnum);
 extern int open_dev_excl(int devnum);
 extern int is_standard(char *dev, int *nump);
+extern int same_dev(char *one, char *two);
 
 extern int parse_auto(char *str, char *msg, int config);
 extern mddev_ident_t conf_get_ident(char *dev);
@@ -867,6 +882,17 @@ static inline int is_subarray(char *vers)
 #define dprintf(fmt, arg...) \
         ({ if (0) fprintf(stderr, fmt, ##arg); 0; })
 #endif
+#include <assert.h>
+#include <stdarg.h>
+static inline int xasprintf(char **strp, const char *fmt, ...) {
+       va_list ap;
+       int ret;
+       va_start(ap, fmt);
+       ret = asprintf(strp, fmt, ap);
+       va_end(ap);
+       assert(ret >= 0);
+       return ret;
+}
 
 #define        LEVEL_MULTIPATH         (-4)
 #define        LEVEL_LINEAR            (-1)