From d45e66f897ebf5a1b7bf80181c225596c7cbb3da Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Tue, 20 Jan 2004 03:13:01 -0800 Subject: [PATCH] [PATCH] md: Discard the mddev_map array. From: NeilBrown We only need it occasionally to map unit number to mddev, and we can use a linear search for that. This reduces dependance on MAX_MD_DEVS --- drivers/md/md.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/md/md.c b/drivers/md/md.c index c363ce0e77e78..c4a0c957464f3 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -126,7 +126,7 @@ static struct block_device_operations md_fops; /* * Enables to iterate over all existing md arrays - * all_mddevs_lock protects this list as well as mddev_map. + * all_mddevs_lock protects this list. */ static LIST_HEAD(all_mddevs); static spinlock_t all_mddevs_lock = SPIN_LOCK_UNLOCKED; @@ -154,8 +154,6 @@ static spinlock_t all_mddevs_lock = SPIN_LOCK_UNLOCKED; tmp = tmp->next;}) \ ) -static mddev_t *mddev_map[MAX_MD_DEVS]; - static int md_fail_request (request_queue_t *q, struct bio *bio) { bio_io_error(bio, bio->bi_size); @@ -174,7 +172,6 @@ static void mddev_put(mddev_t *mddev) return; if (!mddev->raid_disks && list_empty(&mddev->disks)) { list_del(&mddev->all_mddevs); - mddev_map[mdidx(mddev)] = NULL; blk_put_queue(mddev->queue); kfree(mddev); } @@ -187,15 +184,16 @@ static mddev_t * mddev_find(int unit) retry: spin_lock(&all_mddevs_lock); - if (mddev_map[unit]) { - mddev = mddev_get(mddev_map[unit]); - spin_unlock(&all_mddevs_lock); - if (new) - kfree(new); - return mddev; - } + list_for_each_entry(mddev, &all_mddevs, all_mddevs) + if (mdidx(mddev) == unit) { + mddev_get(mddev); + spin_unlock(&all_mddevs_lock); + if (new) + kfree(new); + return mddev; + } + if (new) { - mddev_map[unit] = new; list_add(&new->all_mddevs, &all_mddevs); spin_unlock(&all_mddevs_lock); return new; -- 2.53.0