Skip to contentSkip to conversation

md/raid1: Initialize conf->raid_disks before using it.

PATCH In review majianpeng 2 participants 2 messages Oct 24, 2012 MD RAID

lore
Share & tools
lore

majianpeng

author
#0 lore raw

PATCH 1/1 md/raid1: Initialize conf->raid_disks before using it.

Because the conf->raid_disks is zero at first,so if there is a replacement disk, func setup_conf will abort.

---
 drivers/md/raid1.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/md/raid1.c +1 -1
index 8034fbd..4eec567 100644
@@ -2703,6 +2703,7 @@ static struct r1conf *setup_conf(struct mddev *mddev)
 
 	err = -EINVAL;
 	spin_lock_init(&conf->device_lock);
+	conf->raid_disks = mddev->raid_disks;
 	rdev_for_each(rdev, mddev) {
 		struct request_queue *q;
 		int disk_idx = rdev->raid_disk;
@@ -2724,7 +2725,6 @@ static struct r1conf *setup_conf(struct mddev *mddev)
 		disk->head_position = 0;
 		disk->seq_start = MaxSector;
 	}
-	conf->raid_disks = mddev->raid_disks;
 	conf->mddev = mddev;
 	INIT_LIST_HEAD(&conf->retry_list);
 
Signature · 1 line
1.7.9.5
#1 lore raw
Quoted 21 lines · On Wed, 24 Oct 2012 16:00:53 +0800 majianpeng <[email protected]> wrote:

Because the conf->raid_disks is zero at first,so if there is a replacement disk, func setup_conf will abort.

---
 drivers/md/raid1.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/md/raid1.c +1 -0
index 8034fbd..4eec567 100644
@@ -2703,6 +2703,7 @@ static struct r1conf *setup_conf(struct mddev *mddev)
 
 	err = -EINVAL;
 	spin_lock_init(&conf->device_lock);
+	conf->raid_disks = mddev->raid_disks;
 	rdev_for_each(rdev, mddev) {
 		struct request_queue *q;
 		int disk_idx = rdev->raid_disk;

drivers/md/raid1.c static struct r1conf *setup_conf(struct mddev *mddev) · line 2730

Quoted 7 lines
drivers/md/raid1.c +0 -1
@@ -2724,7 +2725,6 @@ static struct r1conf *setup_conf(struct mddev *mddev)
 		disk->head_position = 0;
 		disk->seq_start = MaxSector;
 	}
-	conf->raid_disks = mddev->raid_disks;
 	conf->mddev = mddev;
 	INIT_LIST_HEAD(&conf->retry_list);
 

Thanks. I had already discovered that bug and have a fix in my tree. I just haven't pushed it out yet.

NeilBrown