Split out the part of `comedi_free_board_minor()` that clears the `comedi_file_info_table[]` element into new function `comedi_clear_minor()`. Split out the remainder of the original function into new function `comedi_free_board_file_info()`. Also re-use a call to `comedi_clear_minor()` in `comedi_free_subdevice_minor()` instead of doing the same thing inline. Signed-off-by: Ian Abbott <abbotti@xxxxxxxxx> --- drivers/staging/comedi/comedi_fops.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 70b2034..8b5fa2f 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -2315,16 +2315,19 @@ int comedi_alloc_board_minor(struct device *hardware_device) return i; } -void comedi_free_board_minor(unsigned minor) +static struct comedi_file_info *comedi_clear_minor(unsigned minor) { struct comedi_file_info *info; - BUG_ON(minor >= COMEDI_NUM_BOARD_MINORS); spin_lock(&comedi_file_info_table_lock); info = comedi_file_info_table[minor]; comedi_file_info_table[minor] = NULL; spin_unlock(&comedi_file_info_table_lock); + return info; +} +static void comedi_free_board_file_info(struct comedi_file_info *info) +{ if (info) { struct comedi_device *dev = info->device; if (dev) { @@ -2339,6 +2342,12 @@ void comedi_free_board_minor(unsigned minor) } } +void comedi_free_board_minor(unsigned minor) +{ + BUG_ON(minor >= COMEDI_NUM_BOARD_MINORS); + comedi_free_board_file_info(comedi_clear_minor(minor)); +} + int comedi_find_board_minor(struct device *hardware_device) { int minor; @@ -2407,11 +2416,7 @@ void comedi_free_subdevice_minor(struct comedi_subdevice *s) BUG_ON(s->minor >= COMEDI_NUM_MINORS); BUG_ON(s->minor < COMEDI_FIRST_SUBDEVICE_MINOR); - spin_lock(&comedi_file_info_table_lock); - info = comedi_file_info_table[s->minor]; - comedi_file_info_table[s->minor] = NULL; - spin_unlock(&comedi_file_info_table_lock); - + info = comedi_clear_minor(s->minor); if (s->class_dev) { device_destroy(comedi_class, MKDEV(COMEDI_MAJOR, s->minor)); s->class_dev = NULL; -- 1.8.1.5 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel