summaryrefslogtreecommitdiffstats
path: root/mdadm.h
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-12-30 13:42:37 +1100
committerNeilBrown <neilb@suse.de>2009-12-30 13:42:37 +1100
commitc1e3ab8c1e76f4ae71ab23bcf5e8c2bf8bd3774e (patch)
tree29f137783fd18fa14d1f96758bba3d15212a7904 /mdadm.h
parent076515ba5042459c17eb5718483ed09c9e567f5d (diff)
parent1e5c69836d4d0b6dcaef8fc187e6bf2841eb57f6 (diff)
downloadmdadm-c1e3ab8c1e76f4ae71ab23bcf5e8c2bf8bd3774e.tar.gz
mdadm-c1e3ab8c1e76f4ae71ab23bcf5e8c2bf8bd3774e.tar.xz
mdadm-c1e3ab8c1e76f4ae71ab23bcf5e8c2bf8bd3774e.zip
Merge branch 'master' of git://github.com/djbw/mdadm
Diffstat (limited to 'mdadm.h')
-rw-r--r--mdadm.h27
1 files changed, 24 insertions, 3 deletions
diff --git a/mdadm.h b/mdadm.h
index 2bfe840..7ff63cd 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -129,6 +129,22 @@ extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence));
#endif /* __KLIBC__ */
+/*
+ * min()/max()/clamp() macros that also do
+ * strict type-checking.. See the
+ * "unnecessary" pointer comparison.
+ */
+#define min(x, y) ({ \
+ typeof(x) _min1 = (x); \
+ typeof(y) _min2 = (y); \
+ (void) (&_min1 == &_min2); \
+ _min1 < _min2 ? _min1 : _min2; })
+
+#define max(x, y) ({ \
+ typeof(x) _max1 = (x); \
+ typeof(y) _max2 = (y); \
+ (void) (&_max1 == &_max2); \
+ _max1 > _max2 ? _max1 : _max2; })
/* general information that might be extracted from a superblock */
struct mdinfo {
@@ -146,7 +162,11 @@ struct mdinfo {
*/
int reshape_active;
unsigned long long reshape_progress;
- unsigned long long resync_start;
+ union {
+ unsigned long long resync_start; /* per-array resync position */
+ unsigned long long recovery_start; /* per-device rebuild position */
+ #define MaxSector (~0ULL) /* resync/recovery complete position */
+ };
unsigned long safe_mode_delay; /* ms delay to mark clean */
int new_level, delta_disks, new_layout, new_chunk;
int errors;
@@ -168,6 +188,7 @@ struct mdinfo {
struct mdinfo *next;
/* Device info for mdmon: */
+ int recovery_fd;
int state_fd;
#define DS_FAULTY 1
#define DS_INSYNC 2
@@ -380,8 +401,7 @@ extern int sysfs_get_str(struct mdinfo *sra, struct mdinfo *dev,
char *name, char *val, int size);
extern int sysfs_set_safemode(struct mdinfo *sra, unsigned long ms);
extern int sysfs_set_array(struct mdinfo *info, int vers);
-extern int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd,
- int in_sync);
+extern int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int resume);
extern int sysfs_disk_to_scsi_id(int fd, __u32 *id);
extern int sysfs_unique_holder(int devnum, long rdev);
extern int load_sys(char *path, char *buf);
@@ -839,6 +859,7 @@ extern int assemble_container_content(struct supertype *st, int mdfd,
extern int add_disk(int mdfd, struct supertype *st,
struct mdinfo *sra, struct mdinfo *info);
extern int set_array_info(int mdfd, struct supertype *st, struct mdinfo *info);
+unsigned long long min_recovery_start(struct mdinfo *array);
extern char *human_size(long long bytes);
extern char *human_size_brief(long long bytes);