* Email: <neilb@suse.de>
*/
+#include <stddef.h>
#include "mdadm.h"
/*
* The version-1 superblock :
|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;
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;
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;
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: