staging: comedi: add rw_semaphore to protect against device detachment
authorIan Abbott <abbotti@mev.co.uk>
Fri, 8 Nov 2013 15:03:24 +0000 (15:03 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 12 Nov 2013 00:16:43 +0000 (16:16 -0800)
commit2f3fdcd7ce935f6f2899ceab57dc8fe5286db3e1
treee76f74a1dbd8f00650298df96cc0b5679d7e5db8
parentab3cb2e30ec8223777f6ea4696ba24191ffc5c72
staging: comedi: add rw_semaphore to protect against device detachment

The 'read' and 'write' file operations on comedi devices do not use the
main mutex in the `struct comedi_device` to avoid contention with ioctls
that may take a while to complete.  However, it is necessary to protect
against the device being detached while the operation is in progress.
Add member `struct rw_semaphore attach_lock` to `struct comedi_device`
for this purpose and initialize it on creation.

The actual locking and unlocking will be implemented by subsequent
patches.  Tasks that are attaching or detaching comedi devices will
write-acquire the new semaphore whilst also holding the main mutex in
the `struct comedi_device`.  Tasks that wish to protect against the
comedi device being detached need to acquire either the main mutex, or
read-acquire the new semaphore, or both in that order.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/comedi_fops.c
drivers/staging/comedi/comedidev.h