+extern int mddev_busy(int devnum);
+
+struct map_ent {
+ struct map_ent *next;
+ int devnum;
+ int major,minor;
+ int uuid[4];
+ char *path;
+};
+extern int map_update(struct map_ent **mpp, int devnum, int major, int minor,
+ int uuid[4], char *path);
+extern struct map_ent *map_by_uuid(struct map_ent **map, int uuid[4]);
+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);
+extern void map_free(struct map_ent *map);
+extern void map_add(struct map_ent **melp,
+ int devnum, int major, int minor, int uuid[4], char *path);
+
+/* Data structure for holding info read from sysfs */
+struct sysdev {
+ char name[20];
+ int role;
+ int major, minor;
+ unsigned long long offset, size;
+ int state;
+ int errors;
+ struct sysdev *next;
+};
+struct sysarray {
+ char name[20];
+ struct sysdev *devs;
+ int chunk;
+ unsigned long long component_size;
+ int layout;
+ int level;
+ int spares;
+ int cache_size;
+ int mismatch_cnt;
+ int major_version, minor_version;
+};
+/* various details can be requested */
+#define GET_LEVEL 1
+#define GET_LAYOUT 2
+#define GET_COMPONENT 4
+#define GET_CHUNK 8
+#define GET_CACHE 16
+#define GET_MISMATCH 32
+#define GET_VERSION 64
+
+#define GET_DEVS 1024 /* gets role, major, minor */
+#define GET_OFFSET 2048
+#define GET_SIZE 4096
+#define GET_STATE 8192
+#define GET_ERROR 16384
+
+/* If fd >= 0, get the array it is open on,
+ * else use devnum. >=0 -> major9. <0.....
+ */
+extern void sysfs_free(struct sysarray *sra);
+extern struct sysarray *sysfs_read(int fd, int devnum, unsigned long options);
+extern int sysfs_set_str(struct sysarray *sra, struct sysdev *dev,
+ char *name, char *val);
+extern int sysfs_set_num(struct sysarray *sra, struct sysdev *dev,
+ char *name, unsigned long long val);
+extern int sysfs_get_ll(struct sysarray *sra, struct sysdev *dev,
+ char *name, unsigned long long *val);
+
+
+extern int save_stripes(int *source, unsigned long long *offsets,
+ int raid_disks, int chunk_size, int level, int layout,
+ int nwrites, int *dest,
+ unsigned long long start, unsigned long long length);
+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);