+extern struct superswitch {
+ void (*examine_super)(void *sbv);
+ void (*brief_examine_super)(void *sbv);
+ void (*detail_super)(void *sbv);
+ void (*brief_detail_super)(void *sbv);
+ void (*uuid_from_super)(int uuid[4], void *sbv);
+ void (*getinfo_super)(struct mdinfo *info, void *sbv);
+ int (*update_super)(struct mdinfo *info, void *sbv, char *update, char *devname, int verbose);
+ __u64 (*event_super)(void *sbv);
+ int (*init_super)(void **sbp, mdu_array_info_t *info);
+ void (*add_to_super)(void *sbv, mdu_disk_info_t *dinfo);
+ int (*store_super)(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, unsigned long long size);
+ void (*locate_bitmap)(struct supertype *st, int fd);
+ int major;
+} super0, super1, *superlist[];
+
+struct supertype {
+ struct superswitch *ss;
+ int minor_version;
+};
+
+extern struct supertype *super_by_version(int vers, int minor);
+extern struct supertype *guess_super(int fd);
+
+