Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aece3d1f authored by Sandeep K Sinha's avatar Sandeep K Sinha Committed by NeilBrown
Browse files

md: Binary search in linear raid



Replace the linear search with binary search in which_dev.

Signed-off-by: default avatarSandeep K Sinha <sandeepksinha@gmail.com>
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 4db7cdc8
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -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;
}

/**