aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/md.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2011-01-30 20:10:09 -0500
committerNeilBrown <neilb@suse.de>2011-01-30 20:10:09 -0500
commitf21e9ff7f77d41ceca4e1e5ee5a4efa5ad7a5e40 (patch)
treec6bf9c0457ae891505983c1493bf15856e815c5b /drivers/md/md.c
parent50da08409654e036c4c964a473567a61a654cb83 (diff)
md: Remove the AllReserved flag for component devices.
This flag is not needed and is used badly. Devices that are included in a native-metadata array are reserved exclusively for that array - and currently have AllReserved set. They all are bd_claimed for the rdev and so cannot be shared. Devices that are included in external-metadata arrays can be shared among multiple arrays - providing there is no overlap. These are bd_claimed for md in general - not for a particular rdev. When changing the amount of a device that is used in an array we need to check for overlap. This currently includes a check on AllReserved So even without overlap, sharing with an AllReserved device is not allowed. However the bd_claim usage already precludes sharing with these devices, so the test on AllReserved is not needed. And in fact it is wrong. As this is the only use of AllReserved, simply remove all usage and definition of AllReserved. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index e636e404e9a5..f539b587ca72 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -1947,8 +1947,6 @@ static int lock_rdev(mdk_rdev_t *rdev, dev_t dev, int shared)
1947 __bdevname(dev, b)); 1947 __bdevname(dev, b));
1948 return PTR_ERR(bdev); 1948 return PTR_ERR(bdev);
1949 } 1949 }
1950 if (!shared)
1951 set_bit(AllReserved, &rdev->flags);
1952 rdev->bdev = bdev; 1950 rdev->bdev = bdev;
1953 return err; 1951 return err;
1954} 1952}
@@ -2610,12 +2608,11 @@ rdev_size_store(mdk_rdev_t *rdev, const char *buf, size_t len)
2610 2608
2611 mddev_lock(mddev); 2609 mddev_lock(mddev);
2612 list_for_each_entry(rdev2, &mddev->disks, same_set) 2610 list_for_each_entry(rdev2, &mddev->disks, same_set)
2613 if (test_bit(AllReserved, &rdev2->flags) || 2611 if (rdev->bdev == rdev2->bdev &&
2614 (rdev->bdev == rdev2->bdev && 2612 rdev != rdev2 &&
2615 rdev != rdev2 && 2613 overlaps(rdev->data_offset, rdev->sectors,
2616 overlaps(rdev->data_offset, rdev->sectors, 2614 rdev2->data_offset,
2617 rdev2->data_offset, 2615 rdev2->sectors)) {
2618 rdev2->sectors))) {
2619 overlap = 1; 2616 overlap = 1;
2620 break; 2617 break;
2621 } 2618 }