]> git.baikalelectronics.ru Git - kernel.git/commit
wusbcore: clean up list locking in urb enqueue
authorThomas Pugliese <thomas.pugliese@gmail.com>
Mon, 12 Aug 2013 15:10:53 +0000 (10:10 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 12 Aug 2013 20:13:33 +0000 (13:13 -0700)
commitf53bf7d182dea6de7a0de84bcf9f0a9c3e74cbb2
tree809f203ad57304ee888532b0af93d29d01ed368f
parent12c2d6eae1344a1dc1c06cc0a5b18c54da8dae2c
wusbcore: clean up list locking in urb enqueue

wa_urb_enqueue_run locks and unlocks its list lock as it traverses the
list of queued transfers.  This was done to prevent deadlocking due to
acquiring locks in reverse order in different places.  The problem is that
releasing the lock during the list traversal could allow the dequeue
routine to corrupt the list while it is being iterated over.  This patch
moves all list entries to a temp list while holding the list lock, then
traverses the temp list with no lock held.

Signed-off-by: Thomas Pugliese <thomas.pugliese@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/wusbcore/wa-xfer.c