mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-25 16:25:27 +07:00
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: Ian Abbott <abbotti@mev.co.uk> Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
4ca7da6e82
commit
a649a6754d
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user