Sage Weil f818a73674 ceph: fix cap removal races
The iterate_session_caps helper traverses the session caps list and tries
to grab an inode reference.  However, the __ceph_remove_cap was clearing
the inode backpointer _before_ removing itself from the session list,
causing a null pointer dereference.

Clear cap->ci under protection of s_cap_lock to avoid the race, and to
tightly couple the list and backpointer state.  Use a local flag to
indicate whether we are releasing the cap, as cap->session may be modified
by a racing thread in iterate_session_caps.

Signed-off-by: Sage Weil <sage@newdream.net>
2010-05-11 20:56:31 -07:00
..
2010-04-22 11:42:00 +02:00
2010-05-11 20:56:31 -07:00
2010-04-26 15:39:08 -04:00
2010-04-27 16:26:03 -07:00
2010-01-26 22:22:26 -05:00
2010-04-08 15:35:20 +02:00
2010-03-12 15:52:35 -08:00
2009-12-16 07:20:13 -08:00
2010-03-06 11:26:29 -08:00
2010-03-19 08:05:10 +01:00
2009-09-24 07:21:03 -07:00
2010-03-03 14:13:08 -05:00
2009-12-17 04:52:13 -05:00
2010-03-06 11:26:29 -08:00
2010-03-06 11:26:29 -08:00
2010-03-03 14:07:59 -05:00
2010-04-23 10:39:48 -07:00
2010-03-08 16:55:37 +01:00
2009-12-17 10:51:40 -05:00
2010-03-12 15:52:32 -08:00
2010-04-25 08:54:42 +02:00
2009-12-16 12:16:49 -05:00