linux/fs/dlm
David Teigland c36258b592 [DLM] block dlm_recv in recovery transition
Introduce a per-lockspace rwsem that's held in read mode by dlm_recv
threads while working in the dlm.  This allows dlm_recv activity to be
suspended when the lockspace transitions to, from and between recovery
cycles.

The specific bug prompting this change is one where an in-progress
recovery cycle is aborted by a new recovery cycle.  While dlm_recv was
processing a recovery message, the recovery cycle was aborted and
dlm_recoverd began cleaning up.  dlm_recv decremented recover_locks_count
on an rsb after dlm_recoverd had reset it to zero.  This is fixed by
suspending dlm_recv (taking write lock on the rwsem) before aborting the
current recovery.

The transitions to/from normal and recovery modes are simplified by using
this new ability to block dlm_recv.  The switch from normal to recovery
mode means dlm_recv goes from processing locking messages, to saving them
for later, and vice versa.  Races are avoided by blocking dlm_recv when
setting the flag that switches between modes.

Signed-off-by: David Teigland <teigland@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
2007-10-10 08:56:38 +01:00
..
ast.c [DLM] fs/dlm/ast.c should #include "ast.h" 2007-05-01 09:11:25 +01:00
ast.h [DLM] The core of the DLM for GFS2/CLVM 2006-01-18 09:30:29 +00:00
config.c configfs: Convert subsystem semaphore to mutex 2007-07-10 17:10:56 -07:00
config.h [DLM] add lock timeouts and warnings [2/6] 2007-07-09 08:22:33 +01:00
debug_fs.c [DLM] dump more lock values 2007-07-09 08:24:13 +01:00
dir.c [DLM] Update DLM to the latest patch level 2006-01-20 08:47:07 +00:00
dir.h [DLM] The core of the DLM for GFS2/CLVM 2006-01-18 09:30:29 +00:00
dlm_internal.h [DLM] block dlm_recv in recovery transition 2007-10-10 08:56:38 +01:00
Kconfig DLM must depend on SYSFS 2007-07-07 14:17:43 -07:00
lock.c [DLM] block dlm_recv in recovery transition 2007-10-10 08:56:38 +01:00
lock.h [DLM] block dlm_recv in recovery transition 2007-10-10 08:56:38 +01:00
lockspace.c [DLM] block dlm_recv in recovery transition 2007-10-10 08:56:38 +01:00
lockspace.h [DLM] dlm: user locks 2006-07-13 09:25:34 -04:00
lowcomms.c [DLM] Make dlm_sendd cond_resched more 2007-10-10 08:56:19 +01:00
lowcomms.h [DLM] Clean up lowcomms 2006-12-07 09:25:13 -05:00
lvb_table.h [DLM] The core of the DLM for GFS2/CLVM 2006-01-18 09:30:29 +00:00
main.c [DLM] add lock timeouts and warnings [2/6] 2007-07-09 08:22:33 +01:00
Makefile [DLM] add lock timeouts and warnings [2/6] 2007-07-09 08:22:33 +01:00
member.c [DLM] block dlm_recv in recovery transition 2007-10-10 08:56:38 +01:00
member.h [DLM] The core of the DLM for GFS2/CLVM 2006-01-18 09:30:29 +00:00
memory.c mm: Remove slab destructors from kmem_cache_create(). 2007-07-20 10:11:58 +09:00
memory.h [DLM] Remove range locks from the DLM 2006-02-23 09:56:38 +00:00
midcomms.c [DLM] block dlm_recv in recovery transition 2007-10-10 08:56:38 +01:00
midcomms.h [DLM] The core of the DLM for GFS2/CLVM 2006-01-18 09:30:29 +00:00
netlink.c [DLM] timeout fixes 2007-07-09 08:22:52 +01:00
rcom.c [DLM] block dlm_recv in recovery transition 2007-10-10 08:56:38 +01:00
rcom.h [DLM] block dlm_recv in recovery transition 2007-10-10 08:56:38 +01:00
recover.c [DLM] fix master recovery 2007-02-05 13:36:58 -05:00
recover.h [DLM] The core of the DLM for GFS2/CLVM 2006-01-18 09:30:29 +00:00
recoverd.c [DLM] block dlm_recv in recovery transition 2007-10-10 08:56:38 +01:00
recoverd.h [DLM] The core of the DLM for GFS2/CLVM 2006-01-18 09:30:29 +00:00
requestqueue.c [DLM] block dlm_recv in recovery transition 2007-10-10 08:56:38 +01:00
requestqueue.h [DLM] block dlm_recv in recovery transition 2007-10-10 08:56:38 +01:00
user.c [DLM] canceling deadlocked lock 2007-07-09 08:22:54 +01:00
user.h [DLM] dlm: user locks 2006-07-13 09:25:34 -04:00
util.c [DLM] fix old rcom messages 2007-02-05 13:35:50 -05:00
util.h [DLM] The core of the DLM for GFS2/CLVM 2006-01-18 09:30:29 +00:00