Commit 616a3548 authored by Ian Abbott's avatar Ian Abbott Committed by Greg Kroah-Hartman

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: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a200fadc
...@@ -41,16 +41,20 @@ static int comedi_read(struct seq_file *m, void *v) ...@@ -41,16 +41,20 @@ static int comedi_read(struct seq_file *m, void *v)
"driver_name, board_name, n_subdevices"); "driver_name, board_name, n_subdevices");
for (i = 0; i < COMEDI_NUM_BOARD_MINORS; i++) { 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) if (!dev)
continue; continue;
down_read(&dev->attach_lock);
if (dev->attached) { if (dev->attached) {
devices_q = 1; devices_q = 1;
seq_printf(m, "%2d: %-20s %-20s %4d\n", seq_printf(m, "%2d: %-20s %-20s %4d\n",
i, dev->driver->driver_name, i, dev->driver->driver_name,
dev->board_name, dev->n_subdevices); dev->board_name, dev->n_subdevices);
} }
up_read(&dev->attach_lock);
comedi_dev_put(dev);
} }
if (!devices_q) if (!devices_q)
seq_puts(m, "no devices\n"); seq_puts(m, "no devices\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment