md: Binary search in linear raid

Replace the linear search with binary search in which_dev.

Signed-off-by: Sandeep K Sinha <sandeepksinha@gmail.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Sandeep K Sinha 2009-06-16 16:57:08 +10:00 committed by NeilBrown
parent 4db7cdc859
commit aece3d1f40
1 changed files with 17 additions and 5 deletions

View File

@ -27,14 +27,26 @@
*/
static inline dev_info_t *which_dev(mddev_t *mddev, sector_t sector)
{
dev_info_t *hash;
int lo, mid, hi;
linear_conf_t *conf = mddev->private;
hash = conf->disks;
lo = 0;
hi = mddev->raid_disks - 1;
while (sector >= hash->end_sector)
hash++;
return hash;
/*
* Binary Search
*/
while (hi > lo) {
mid = (hi + lo) / 2;
if (sector < conf->disks[mid].end_sector)
hi = mid;
else
lo = mid + 1;
}
return conf->disks + lo;
}
/**