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

Commit a649a675 authored by Ian Abbott's avatar Ian Abbott Committed by Greg Kroah-Hartman
Browse files

staging: comedi: adjust module count on device cleanup



`comedi_device_cleanup()` is called just before freeing a comedi device.
It is possible for the device to still be open in which case the module
reference counts for the core comedi module and possibly the low-level
driver module will remain out of whack because `comedi_close()` will not
find the comedi device and so will not decrement the module counts.

This really needs to be handled better, but for now decrement the module
counts in `comedi_device_cleanup()` according to the number of
outstanding opens.

Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
Reviewed-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 4ca7da6e
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -2256,10 +2256,20 @@ static void comedi_device_init(struct comedi_device *dev)

static void comedi_device_cleanup(struct comedi_device *dev)
{
	struct module *driver_module = NULL;

	if (dev == NULL)
		return;
	mutex_lock(&dev->mutex);
	if (dev->attached)
		driver_module = dev->driver->module;
	comedi_device_detach(dev);
	while (dev->use_count > 0) {
		if (driver_module)
			module_put(driver_module);
		module_put(THIS_MODULE);
		dev->use_count--;
	}
	mutex_unlock(&dev->mutex);
	mutex_destroy(&dev->mutex);
}