97 lines
2.6 KiB
Diff
97 lines
2.6 KiB
Diff
--- evms-2.5.5/plugins/md/md_super.c 2006-02-22 14:34:53.000000000 -0600
|
|
+++ evms-2.5.5.fix/plugins/md/md_super.c 2006-04-20 11:00:40.733364216 -0500
|
|
@@ -1312,13 +1312,13 @@
|
|
|
|
static int sb0_zero_superblock(md_member_t *member, boolean now)
|
|
{
|
|
- mdp_super_t sb;
|
|
+ char buf[MD_SB_BYTES];
|
|
|
|
LOG_ENTRY();
|
|
|
|
if (now == TRUE) {
|
|
- memset(&sb, 0, MD_SB_BYTES);
|
|
- if ( WRITE(member->obj, member->super_offset, MD_SB_SECTORS, (char*)&sb)) {
|
|
+ memset(buf, 0, MD_SB_BYTES);
|
|
+ if ( WRITE(member->obj, member->super_offset, MD_SB_SECTORS, buf)) {
|
|
LOG_EXIT_INT(EIO);
|
|
return EIO;
|
|
}
|
|
@@ -1332,7 +1332,7 @@
|
|
|
|
static int sb0_zero_saved_info(md_member_t *member, boolean now)
|
|
{
|
|
- md_saved_info_t info;
|
|
+ char buf[MD_SAVED_INFO_BYTES];
|
|
u_int64_t location;
|
|
|
|
LOG_ENTRY();
|
|
@@ -1341,8 +1341,8 @@
|
|
location += MD_SB0_SAVED_INFO_SECTOR_OFFSET;
|
|
|
|
if (now == TRUE) {
|
|
- memset(&info, 0, sizeof(md_saved_info_t));
|
|
- if ( WRITE(member->obj, location, MD_SAVED_INFO_SECTS, (char*)&info)) {
|
|
+ memset(buf, 0, MD_SAVED_INFO_BYTES);
|
|
+ if ( WRITE(member->obj, location, MD_SAVED_INFO_SECTS, buf)) {
|
|
LOG_EXIT_INT(EIO);
|
|
return EIO;
|
|
}
|
|
@@ -2451,6 +2451,7 @@
|
|
{
|
|
int rc = 0;
|
|
mdp_sb_1_t *duplicate = NULL;
|
|
+ mdp_sb_1_t *master;
|
|
md_volume_t *vol;
|
|
|
|
LOG_ENTRY();
|
|
@@ -2462,9 +2463,16 @@
|
|
}
|
|
|
|
vol = member->vol;
|
|
+ master = (mdp_sb_1_t *)vol->sb;
|
|
+
|
|
+ if (vol->flags & (MD_NEW_REGION | MD_DEGRADED)) {
|
|
+ LOG_WARNING("%s: Creating new array with missing disk,"
|
|
+ " set resync_offset to -1.\n", vol->name);
|
|
+ master->resync_offset = -1;
|
|
+ }
|
|
|
|
/* Copy from master superblock */
|
|
- rc = sb1_duplicate_sb(&member->sb, vol->sb);
|
|
+ rc = sb1_duplicate_sb(&member->sb, master);
|
|
if (rc) {
|
|
goto out;
|
|
}
|
|
@@ -2602,8 +2610,8 @@
|
|
member->obj->name, member->super_offset);
|
|
|
|
if (now == TRUE) {
|
|
- memset(&sb, 0, MD_SB_1_BYTES);
|
|
- if ( WRITE(member->obj, member->super_offset, MD_SB_1_SECTORS, (char*)&sb)) {
|
|
+ memset(sb, 0, MD_SB_1_BYTES);
|
|
+ if ( WRITE(member->obj, member->super_offset, MD_SB_1_SECTORS, sb)) {
|
|
LOG_EXIT_INT(EIO);
|
|
return EIO;
|
|
}
|
|
@@ -2616,7 +2624,7 @@
|
|
|
|
static int sb1_zero_saved_info(md_member_t *member, boolean now)
|
|
{
|
|
- md_saved_info_t info;
|
|
+ char buf[MD_SAVED_INFO_BYTES];
|
|
u_int64_t location;
|
|
|
|
LOG_ENTRY();
|
|
@@ -2627,8 +2635,8 @@
|
|
member->obj->name, location);
|
|
|
|
if (now == TRUE) {
|
|
- memset(&info, 0, sizeof(md_saved_info_t));
|
|
- if ( WRITE(member->obj, location, MD_SAVED_INFO_SECTS, (char*)&info)) {
|
|
+ memset(buf, 0, MD_SAVED_INFO_BYTES);
|
|
+ if ( WRITE(member->obj, location, MD_SAVED_INFO_SECTS, buf) ) {
|
|
LOG_EXIT_INT(EIO);
|
|
return EIO;
|
|
}
|