md/raid1: Initialize conf->raid_disks before using it.
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.
Signed-off-by Jianpeng Ma <[email protected]>
--- drivers/md/raid1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/md/raid1.c +1 -1
@@ -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
Quoted 21 lines · On Wed, 24 Oct 2012 16:00:53 +0800 majianpeng <[email protected]> wrote:
Because the
conf->raid_disksis zero at first,so if there is a replacement disk, funcsetup_confwill abort.Signed-off-by Jianpeng Ma <[email protected]>--- drivers/md/raid1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/md/raid1.c +1
-0@@ -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