Commit 8b57251f authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Song Liu
Browse files

md: factor out a mddev_find_locked helper from mddev_find



Factor out a self-contained helper to just lookup a mddev by the dev_t
"unit".

Cc: stable@vger.kernel.org
Reviewed-by: default avatarHeming Zhao <heming.zhao@suse.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarSong Liu <song@kernel.org>
parent 6a4db2a6
Loading
Loading
Loading
Loading
+19 −13
Original line number Diff line number Diff line
@@ -734,6 +734,17 @@ void mddev_init(struct mddev *mddev)
}
EXPORT_SYMBOL_GPL(mddev_init);

static struct mddev *mddev_find_locked(dev_t unit)
{
	struct mddev *mddev;

	list_for_each_entry(mddev, &all_mddevs, all_mddevs)
		if (mddev->unit == unit)
			return mddev;

	return NULL;
}

static struct mddev *mddev_find(dev_t unit)
{
	struct mddev *mddev, *new = NULL;
@@ -745,8 +756,8 @@ static struct mddev *mddev_find(dev_t unit)
	spin_lock(&all_mddevs_lock);

	if (unit) {
		list_for_each_entry(mddev, &all_mddevs, all_mddevs)
			if (mddev->unit == unit) {
		mddev = mddev_find_locked(unit);
		if (mddev) {
			mddev_get(mddev);
			spin_unlock(&all_mddevs_lock);
			kfree(new);
@@ -777,12 +788,7 @@ static struct mddev *mddev_find(dev_t unit)
				return NULL;
			}

			is_free = 1;
			list_for_each_entry(mddev, &all_mddevs, all_mddevs)
				if (mddev->unit == dev) {
					is_free = 0;
					break;
				}
			is_free = !mddev_find_locked(dev);
		}
		new->unit = dev;
		new->md_minor = MINOR(dev);