]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - super1.c
mdmon: don't include super0 and super1 in mdmon
[thirdparty/mdadm.git] / super1.c
index fcdb710bb28dec5b06b2d79ca33a21bf3f338f5d..7fba9be0a252a868a579f732fc4bd8a39d503797 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -22,6 +22,7 @@
  *    Email: <neilb@suse.de>
  */
 
+#include <stddef.h>
 #include "mdadm.h"
 /*
  * The version-1 superblock :
@@ -133,9 +134,6 @@ struct misc_dev_info {
                                        |MD_FEATURE_NEW_OFFSET          \
                                        )
 
-#ifndef offsetof
-#define offsetof(t,f) ((size_t)&(((t*)0)->f))
-#endif
 static unsigned int calc_sb_1_csum(struct mdp_superblock_1 * sb)
 {
        unsigned int disk_csum, csum;
@@ -1559,7 +1557,7 @@ static int write_init_super1(struct supertype *st)
        unsigned long long data_offset;
 
        for (di = st->info; di; di = di->next) {
-               if (di->disk.state == 1)
+               if (di->disk.state & (1 << MD_DISK_FAULTY))
                        continue;
                if (di->fd < 0)
                        continue;
@@ -1638,6 +1636,7 @@ static int write_init_super1(struct supertype *st)
                        sb_offset = dsize;
                        sb_offset -= 8*2;
                        sb_offset &= ~(4*2-1);
+                       sb->data_offset = __cpu_to_le64(data_offset);
                        sb->super_offset = __cpu_to_le64(sb_offset);
                        if (sb_offset < array_size + bm_space)
                                bm_space = sb_offset - array_size;
@@ -2311,7 +2310,7 @@ static int validate_geometry1(struct supertype *st, int level,
        case 0: /* metadata at end.  Round down and subtract space to reserve */
                devsize = (devsize & ~(4ULL*2-1));
                /* space for metadata, bblog, bitmap */
-               devsize -= 8*2 - 8 - bmspace;
+               devsize -= 8*2 + 8 + bmspace;
                break;
        case 1:
        case 2: