[PATCH] md: Fix md grow/size code to correctly find the maximum available space
authorNeilBrown <neilb@suse.de>
Mon, 27 Mar 2006 09:18:18 +0000 (01:18 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 27 Mar 2006 16:45:03 +0000 (08:45 -0800)
An md array can be asked to change the amount of each device that it is using,
and in particular can be asked to use the maximum available space.  This
currently only works if the first device is not larger than the rest.  As
'size' gets changed and so 'fit' becomes wrong.  So check if a 'fit' is
required early and don't corrupt it.

Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/md/md.c

index 92fd0104fa0432b01d9c4de125a41a8dfc5269d8..147efcb1e8ca55df300c82020c17b1acdeb6b46c 100644 (file)
@@ -3575,6 +3575,7 @@ static int update_size(mddev_t *mddev, unsigned long size)
        mdk_rdev_t * rdev;
        int rv;
        struct list_head *tmp;
+       int fit = (size == 0);
 
        if (mddev->pers->resize == NULL)
                return -EINVAL;
@@ -3592,7 +3593,6 @@ static int update_size(mddev_t *mddev, unsigned long size)
                return -EBUSY;
        ITERATE_RDEV(mddev,rdev,tmp) {
                sector_t avail;
-               int fit = (size == 0);
                if (rdev->sb_offset > rdev->data_offset)
                        avail = (rdev->sb_offset*2) - rdev->data_offset;
                else