From 83e387d13a81dab114b5f818f3c4abafcb9c7d2c Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Fri, 7 Nov 2008 00:07:46 +0000 Subject: [PATCH] md: linear: Fix a division by zero bug for very small arrays. commit f1cd14ae52985634d0389e934eba25b5ecf24565 upstream Date: Thu, 6 Nov 2008 19:41:24 +1100 Subject: md: linear: Fix a division by zero bug for very small arrays. We currently oops with a divide error on starting a linear software raid array consisting of at least two very small (< 500K) devices. The bug is caused by the calculation of the hash table size which tries to compute sector_div(sz, base) with "base" being zero due to the small size of the component devices of the array. Fix this by requiring the hash spacing to be at least one which implies that also "base" is non-zero. This bug has existed since about 2.6.14. Signed-off-by: Andre Noll Signed-off-by: NeilBrown Signed-off-by: Greg Kroah-Hartman --- drivers/md/linear.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/md/linear.c b/drivers/md/linear.c index b1eebf88c209..a58a19e859ce 100644 --- a/drivers/md/linear.c +++ b/drivers/md/linear.c @@ -157,6 +157,8 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks) min_spacing = conf->array_sectors / 2; sector_div(min_spacing, PAGE_SIZE/sizeof(struct dev_info *)); + if (min_spacing == 0) + min_spacing = 1; /* min_spacing is the minimum spacing that will fit the hash * table in one PAGE. This may be much smaller than needed. -- 2.39.2