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
..
2009-12-03 14:59:44 -08:00
2010-05-03 10:49:24 -07:00
2010-05-03 10:49:25 -07:00
2010-05-03 10:49:24 -07:00
2010-02-10 15:04:47 -08:00
2010-02-10 15:04:39 -08:00
2010-05-11 20:56:31 -07:00
2009-10-06 11:31:07 -07:00
2009-10-06 11:31:07 -07:00
2009-10-06 11:31:07 -07:00
2010-02-17 13:56:07 -08:00
2009-12-03 14:59:44 -08:00
2010-02-10 15:04:39 -08:00
2010-05-03 10:49:25 -07:00
2010-05-11 20:56:31 -07:00
2009-11-20 14:24:33 -08:00
2010-05-03 10:49:23 -07:00
2010-05-03 10:49:24 -07:00

#
# The following files are shared by (and manually synchronized
# between) the Ceph userland and kernel client.
#
# userland                  kernel
src/include/ceph_fs.h	    fs/ceph/ceph_fs.h
src/include/ceph_fs.cc	    fs/ceph/ceph_fs.c
src/include/msgr.h	    fs/ceph/msgr.h
src/include/rados.h	    fs/ceph/rados.h
src/include/ceph_strings.cc fs/ceph/ceph_strings.c
src/include/ceph_frag.h	    fs/ceph/ceph_frag.h
src/include/ceph_frag.cc    fs/ceph/ceph_frag.c
src/include/ceph_hash.h	    fs/ceph/ceph_hash.h
src/include/ceph_hash.cc    fs/ceph/ceph_hash.c
src/crush/crush.c	    fs/ceph/crush/crush.c
src/crush/crush.h	    fs/ceph/crush/crush.h
src/crush/mapper.c	    fs/ceph/crush/mapper.c
src/crush/mapper.h	    fs/ceph/crush/mapper.h
src/crush/hash.h	    fs/ceph/crush/hash.h
src/crush/hash.c	    fs/ceph/crush/hash.c