rdev->alias_device = !!i;
rdev->desc_nr = i++;
rdev->raid_disk = rdev->desc_nr;
+ rdev->in_sync = 1;
} else {
+ mdp_disk_t *desc;
rdev->desc_nr = rdev->sb->this_disk.number;
- rdev->raid_disk = sb->disks[rdev->desc_nr].raid_disk;
+ desc = sb->disks + rdev->desc_nr;
+ rdev->raid_disk = desc->raid_disk;
+ rdev->in_sync = rdev->faulty = 0;
+
+ if (desc->state & (1<<MD_DISK_FAULTY))
+ rdev->faulty = 1;
+ else if (desc->state & (1<<MD_DISK_SYNC) &&
+ rdev->raid_disk < mddev->sb-raid_disks)
+ rdev->in_sync = 1;
}
}
/*
rdev->old_dev = dev;
rdev->desc_nr = info->number;
rdev->raid_disk = info->raid_disk;
+ rdev->faulty = 0;
+ if (rdev->raid_disk < mddev->sb->raid_disks)
+ rdev->in_sync = (info->state & (1<<MD_DISK_SYNC));
+ else
+ rdev->in_sync = 0;
bind_rdev_to_array(rdev, mddev);
err = -EINVAL;
goto abort_export;
}
+ rdev->in_sync = 0;
bind_rdev_to_array(rdev, mddev);
/*
if (!mddev->pers->error_handler
|| mddev->pers->error_handler(mddev,bdev) <= 0) {
rrdev->faulty = 1;
+ rrdev->in_sync = 0;
} else
return 1;
/*
failed_rdev->desc_nr = spare_desc->number;
failed_rdev->raid_disk = spare_disk;
}
+ spare_rdev->in_sync = 1;
xchg_values(*spare_desc, *failed_desc);
xchg_values(*fdisk, *sdisk);
failed_rdev->desc_nr = spare_desc->number;
failed_rdev->raid_disk = spare_disk;
}
+ spare_rdev->in_sync = 1;
xchg_values(*spare_desc, *failed_desc);
xchg_values(*fdisk, *sdisk);
int alias_device; /* device alias to the same disk */
int faulty; /* if faulty do not issue IO requests */
+ int in_sync; /* device is a full member of the array */
+
int desc_nr; /* descriptor index in the superblock */
int raid_disk; /* role of device in array */
};