staging: comedi: use refcount while reading /proc/comedi
In the seq_file 'show' handler for "/proc/comedi" - `comedi_read()` in "comedi/proc.c", call `comedi_dev_get_from_minor()` instead of `comedi_dev_from_minor()` to increment the reference counter for the `struct comedi_device` while it is being examined. Call `comedi_dev_put()` to decrement the reference afterwards. Also acquire the `attach_lock` rwsem while checking whether the device is attached. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
a200fadca9
commit
616a3548e8
|
@ -41,16 +41,20 @@ static int comedi_read(struct seq_file *m, void *v)
|
|||
"driver_name, board_name, n_subdevices");
|
||||
|
||||
for (i = 0; i < COMEDI_NUM_BOARD_MINORS; i++) {
|
||||
struct comedi_device *dev = comedi_dev_from_minor(i);
|
||||
struct comedi_device *dev = comedi_dev_get_from_minor(i);
|
||||
|
||||
if (!dev)
|
||||
continue;
|
||||
|
||||
down_read(&dev->attach_lock);
|
||||
if (dev->attached) {
|
||||
devices_q = 1;
|
||||
seq_printf(m, "%2d: %-20s %-20s %4d\n",
|
||||
i, dev->driver->driver_name,
|
||||
dev->board_name, dev->n_subdevices);
|
||||
}
|
||||
up_read(&dev->attach_lock);
|
||||
comedi_dev_put(dev);
|
||||
}
|
||||
if (!devices_q)
|
||||
seq_puts(m, "no devices\n");
|
||||
|
|
Loading…
Reference in New Issue