From: NeilBrown Date: Thu, 11 Oct 2012 03:24:13 +0000 (+1100) Subject: md/raid5: be careful not to resize_stripes too big. X-Git-Tag: firefly_0821_release~3680^2~1814^2~1 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e56108d65f8705170d238858616728359542aebb;p=firefly-linux-kernel-4.4.55.git md/raid5: be careful not to resize_stripes too big. When a RAID5 is reshaping, conf->raid_disks is increased before mddev->delta_disks becomes zero. This can result in check_reshape calling resize_stripes with a number that is too large. This particularly happens when md_check_recovery calls ->check_reshape(). If we use ->previous_raid_disks, we don't risk this. Signed-off-by: NeilBrown --- diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 4cc6b0e398bc..2737247d2a02 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -5871,7 +5871,8 @@ static int check_reshape(struct mddev *mddev) if (!check_stripe_cache(mddev)) return -ENOSPC; - return resize_stripes(conf, conf->raid_disks + mddev->delta_disks); + return resize_stripes(conf, (conf->previous_raid_disks + + mddev->delta_disks)); } static int raid5_start_reshape(struct mddev *mddev)