Alex Elder cd9d9f5df6 rbd: don't hold spinlock during messenger flush
A recent change made changes to the rbd_client_list be protected by
a spinlock.  Unfortunately in rbd_put_client(), the lock is taken
before possibly dropping the last reference to an rbd_client, and on
the last reference that eventually calls flush_workqueue() which can
sleep.

The problem was flagged by a debug spinlock warning:
    BUG: spinlock wrong CPU on CPU#3, rbd/27814

The solution is to move the spinlock acquisition and release inside
rbd_client_release(), which is the spot where it's really needed for
protecting the removal of the rbd_client from the client list.

Signed-off-by: Alex Elder <elder@dreamhost.com>
Reviewed-by: Sage Weil <sage@newdream.net>
2012-04-05 15:43:58 -05:00
..
2012-01-03 22:54:07 -05:00
2012-01-03 22:54:07 -05:00
2012-01-14 15:07:24 -08:00
2011-08-08 11:40:15 +02:00
2012-03-05 15:49:43 -08:00
2012-03-22 10:47:50 -05:00
2011-12-12 12:42:12 +01:00
2009-03-26 21:15:27 +01:00
2011-12-10 19:52:46 +01:00
2012-01-14 15:07:24 -08:00
2011-03-31 11:26:23 -03:00
2008-10-21 07:48:11 -04:00
2012-01-05 08:34:29 +01:00