Commit 330a5bf4 authored by Anand Jain's avatar Anand Jain Committed by David Sterba
Browse files

btrfs: use dev_t to match device in device_matched



Commit "btrfs: add device major-minor info in the struct btrfs_device"
saved the device major-minor number in the struct btrfs_device upon
discovering it.

So no need to lookup_bdev() again just match, which means
device_matched() can go away.

Signed-off-by: default avatarAnand Jain <anand.jain@oracle.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 4889bc05
Loading
Loading
Loading
Loading
+1 −40
Original line number Diff line number Diff line
@@ -534,45 +534,6 @@ btrfs_get_bdev_and_sb(const char *device_path, fmode_t flags, void *holder,
	return ret;
}

/*
 * Check if the device in the path matches the device in the given struct device.
 *
 * Returns:
 *   true  If it is the same device.
 *   false If it is not the same device or on error.
 */
static bool device_matched(const struct btrfs_device *device, dev_t dev_new)
{
	char *device_name;
	dev_t dev_old;
	int ret;

	/*
	 * If we are looking for a device with the matching dev_t, then skip
	 * device without a name (a missing device).
	 */
	if (!device->name)
		return false;

	device_name = kzalloc(BTRFS_PATH_NAME_MAX, GFP_KERNEL);
	if (!device_name)
		return false;

	rcu_read_lock();
	scnprintf(device_name, BTRFS_PATH_NAME_MAX, "%s", rcu_str_deref(device->name));
	rcu_read_unlock();

	ret = lookup_bdev(device_name, &dev_old);
	kfree(device_name);
	if (ret)
		return false;

	if (dev_old == dev_new)
		return true;

	return false;
}

/**
 *  Search and remove all stale devices (which are not mounted).
 *  When both inputs are NULL, it will search and release all stale devices.
@@ -604,7 +565,7 @@ static int btrfs_free_stale_devices(dev_t devt, struct btrfs_device *skip_device
					 &fs_devices->devices, dev_list) {
			if (skip_device && skip_device == device)
				continue;
			if (devt && !device_matched(device, devt))
			if (devt && devt != device->devt)
				continue;
			if (fs_devices->opened) {
				/* for an already deleted device return 0 */