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

Commit e909074b authored by Sebastian Ott's avatar Sebastian Ott Committed by Martin Schwidefsky
Browse files

[S390] cio: ccw group fix unbind behaviour.



For a ccw group device unbinding it from its driver should do the
same as a call to ungroup, since this virtual device can not exist
without a driver.

Signed-off-by: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 50f15483
Loading
Loading
Loading
Loading
+36 −6
Original line number Diff line number Diff line
@@ -314,15 +314,31 @@ error:
}
EXPORT_SYMBOL(ccwgroup_create_from_string);

static int __init
init_ccwgroup (void)
static int ccwgroup_notifier(struct notifier_block *nb, unsigned long action,
			     void *data);

static struct notifier_block ccwgroup_nb = {
	.notifier_call = ccwgroup_notifier
};

static int __init init_ccwgroup(void)
{
	return bus_register (&ccwgroup_bus_type);
	int ret;

	ret = bus_register(&ccwgroup_bus_type);
	if (ret)
		return ret;

	ret = bus_register_notifier(&ccwgroup_bus_type, &ccwgroup_nb);
	if (ret)
		bus_unregister(&ccwgroup_bus_type);

	return ret;
}

static void __exit
cleanup_ccwgroup (void)
static void __exit cleanup_ccwgroup(void)
{
	bus_unregister_notifier(&ccwgroup_bus_type, &ccwgroup_nb);
	bus_unregister(&ccwgroup_bus_type);
}

@@ -455,6 +471,7 @@ ccwgroup_remove (struct device *dev)
	struct ccwgroup_driver *gdrv;

	device_remove_file(dev, &dev_attr_online);
	device_remove_file(dev, &dev_attr_ungroup);

	if (!dev->driver)
		return 0;
@@ -492,6 +509,19 @@ static struct bus_type ccwgroup_bus_type = {
	.shutdown = ccwgroup_shutdown,
};


static int ccwgroup_notifier(struct notifier_block *nb, unsigned long action,
			     void *data)
{
	struct device *dev = data;

	if (action == BUS_NOTIFY_UNBIND_DRIVER)
		device_schedule_callback(dev, ccwgroup_ungroup_callback);

	return NOTIFY_OK;
}


/**
 * ccwgroup_driver_register() - register a ccw group driver
 * @cdriver: driver to be registered