]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdadm.h
Move code to get_data_disks() function
[thirdparty/mdadm.git] / mdadm.h
diff --git a/mdadm.h b/mdadm.h
index d3ed50a6d82e8811f5008c4ec92a2326ba1a797c..f219c959c73915b85fb205f8603d832d9bb63297 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -313,6 +313,8 @@ enum special_options {
        RebuildMapOpt,
        InvalidBackup,
        UdevRules,
+       FreezeReshape,
+       Continue,
 };
 
 /* structures read from config file */
@@ -427,6 +429,7 @@ extern void map_add(struct map_ent **melp,
                    int devnum, char *metadata, int uuid[4], char *path);
 extern int map_lock(struct map_ent **melp);
 extern void map_unlock(struct map_ent **melp);
+extern void map_fork(void);
 
 /* various details can be requested */
 enum sysfs_read_flags {
@@ -507,7 +510,8 @@ extern int save_stripes(int *source, unsigned long long *offsets,
 extern int restore_stripes(int *dest, unsigned long long *offsets,
                           int raid_disks, int chunk_size, int level, int layout,
                           int source, unsigned long long read_offset,
-                          unsigned long long start, unsigned long long length);
+                          unsigned long long start, unsigned long long length,
+                          char *src_buf);
 
 #ifndef Sendmail
 #define Sendmail "/usr/lib/sendmail -t"
@@ -616,6 +620,7 @@ extern struct superswitch {
         * (raid_disk must already be set and correct) and it is filled
         * with 1 for slots that are thought to be active and 0 for slots which
         * appear to be failed/missing.
+        * *info is zeroed out before data is added.
         */
        void (*getinfo_super)(struct supertype *st, struct mdinfo *info, char *map);
        struct mdinfo *(*getinfo_super_disks)(struct supertype *st);
@@ -644,6 +649,8 @@ extern struct superswitch {
         *   linear-grow-new - add a new device to a linear array, but don't
         *                   change the size: so superblock still matches
         *   linear-grow-update - now change the size of the array.
+        *   writemostly - set the WriteMostly1 bit in the superblock devflags
+        *   readwrite - clear the WriteMostly1 bit in the superblock devflags
         */
        int (*update_super)(struct supertype *st, struct mdinfo *info,
                            char *update,
@@ -698,6 +705,12 @@ extern struct superswitch {
         * inter-device dependencies, it should record sufficient details
         * so these can be validated.
         * Both 'size' and '*freesize' are in sectors.  chunk is KiB.
+        * Return value is:
+        *  1: everything is OK
+        *  0: not OK for some reason - if 'verbose', then error was reported.
+        * -1: st->sb was NULL, 'subdev' is a member of a container of this
+        *     types, but array is not acceptable for some reason
+        *     message was reported even if verbose is 0.
         */
        int (*validate_geometry)(struct supertype *st, int level, int layout,
                                 int raiddisks,
@@ -784,6 +797,9 @@ extern struct superswitch {
         */
        const char *(*get_disk_controller_domain)(const char *path);
 
+       /* for external backup area */
+       int (*recover_backup)(struct supertype *st, struct mdinfo *info);
+
        int swapuuid; /* true if uuid is bigending rather than hostendian */
        int external;
        const char *name; /* canonical metadata name */
@@ -827,7 +843,11 @@ struct supertype {
        int container_dev;    /* devnum of container */
        void *sb;
        void *info;
-
+       int ignore_hw_compat; /* used to inform metadata handlers that it should ignore
+                                HW/firmware related incompatability to load metadata.
+                                Used when examining metadata to display content of disk
+                                when user has no hw/firmare compatible system.
+                             */
        struct metadata_update *updates;
        struct metadata_update **update_tail;
 
@@ -1001,7 +1021,7 @@ extern int Manage_runstop(char *devname, int fd, int runstop, int quiet);
 extern int Manage_resize(char *devname, int fd, long long size, int raid_disks);
 extern int Manage_subdevs(char *devname, int fd,
                          struct mddev_dev *devlist, int verbose, int test,
-                         char *update);
+                         char *update, int force);
 extern int autodetect(void);
 extern int Grow_Add_device(char *devname, int fd, char *newdev);
 extern int Grow_addbitmap(char *devname, int fd, char *file, int chunk, int delay, int write_behind, int force);
@@ -1009,11 +1029,21 @@ extern int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
                        long long size,
                        int level, char *layout_str, int chunksize, int raid_disks,
                        struct mddev_dev *devlist,
-                       int force);
+                       int assume_clean, int force);
 extern int Grow_restart(struct supertype *st, struct mdinfo *info,
                        int *fdlist, int cnt, char *backup_file, int verbose);
 extern int Grow_continue(int mdfd, struct supertype *st,
-                        struct mdinfo *info, char *backup_file);
+                        struct mdinfo *info, char *backup_file,
+                        int freeze_reshape);
+
+extern int restore_backup(struct supertype *st,
+                         struct mdinfo *content,
+                         int working_disks,
+                         int spares,
+                         char *backup_file,
+                         int verbose);
+extern int Grow_continue_command(char *devname, int fd,
+                                char *backup_file, int verbose);
 
 extern int Assemble(struct supertype *st, char *mddev,
                    struct mddev_ident *ident,
@@ -1021,7 +1051,7 @@ extern int Assemble(struct supertype *st, char *mddev,
                    char *backup_file, int invalid_backup,
                    int readonly, int runstop,
                    char *update, char *homehost, int require_homehost,
-                   int verbose, int force);
+                   int verbose, int force, int freeze_reshape);
 
 extern int Build(char *mddev, int chunk, int level, int layout,
                 int raiddisks, struct mddev_dev *devlist, int assume_clean,
@@ -1055,7 +1085,7 @@ extern int WaitClean(char *dev, int sock, int verbose);
 
 extern int Incremental(char *devname, int verbose, int runstop,
                       struct supertype *st, char *homehost, int require_homehost,
-                      int autof);
+                      int autof, int freeze_reshape);
 extern void RebuildMap(void);
 extern int IncrementalScan(int verbose);
 extern int IncrementalRemove(char *devname, char *path, int verbose);
@@ -1086,6 +1116,7 @@ extern int check_partitions(int fd, char *dname,
 extern int get_mdp_major(void);
 extern int dev_open(char *dev, int flags);
 extern int open_dev(int devnum);
+extern int open_dev_flags(int devnum, int flags);
 extern int open_dev_excl(int devnum);
 extern int is_standard(char *dev, int *nump);
 extern int same_dev(char *one, char *two);
@@ -1126,6 +1157,7 @@ extern unsigned long long get_component_size(int fd);
 extern void remove_partitions(int fd);
 extern int test_partition(int fd);
 extern int test_partition_from_id(dev_t id);
+extern int get_data_disks(int level, int layout, int raid_disks);
 extern unsigned long long calc_array_size(int level, int raid_disks, int layout,
                                   int chunksize, unsigned long long devsize);
 extern int flush_metadata_updates(struct supertype *st);
@@ -1133,7 +1165,7 @@ extern void append_metadata_update(struct supertype *st, void *buf, int len);
 extern int assemble_container_content(struct supertype *st, int mdfd,
                                      struct mdinfo *content, int runstop,
                                      char *chosen_name, int verbose,
-                                     char *backup_file);
+                                     char *backup_file, int freeze_reshape);
 extern struct mdinfo *container_choose_spares(struct supertype *st,
                                              unsigned long long min_size,
                                              struct domainlist *domlist,
@@ -1183,6 +1215,7 @@ extern int child_monitor(int afd, struct mdinfo *sra, struct reshape *reshape,
                         struct supertype *st, unsigned long stripes,
                         int *fds, unsigned long long *offsets,
                         int dests, int *destfd, unsigned long long *destoffsets);
+void abort_reshape(struct mdinfo *sra);
 
 extern char *devnum2devname(int num);
 extern void fmt_devname(char *name, int num);
@@ -1334,3 +1367,5 @@ static inline int xasprintf(char **strp, const char *fmt, ...) {
 #define PATH_MAX       4096
 #endif
 
+#define PROCESS_DELAYED -2
+#define PROCESS_PENDING -3