]> git.hungrycats.org Git - linux/commitdiff
[PATCH] md: Discard the mddev_map array.
authorAndrew Morton <akpm@osdl.org>
Tue, 20 Jan 2004 11:13:01 +0000 (03:13 -0800)
committerLinus Torvalds <torvalds@home.osdl.org>
Tue, 20 Jan 2004 11:13:01 +0000 (03:13 -0800)
From: NeilBrown <neilb@cse.unsw.edu.au>

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

index c363ce0e77e785948a2061b716a61cbba2c6bc70..c4a0c957464f3cf535a0cbcb67bdba1b2df77709 100644 (file)
@@ -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;