mirror of
https://github.com/torvalds/linux.git
synced 2024-11-16 00:52:01 +00:00
[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: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
50f1548399
commit
e909074bb9
@ -314,16 +314,32 @@ 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 (&ccwgroup_bus_type);
|
||||
bus_unregister_notifier(&ccwgroup_bus_type, &ccwgroup_nb);
|
||||
bus_unregister(&ccwgroup_bus_type);
|
||||
}
|
||||
|
||||
module_init(init_ccwgroup);
|
||||
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user