diff options
author | David Teigland <teigland@redhat.com> | 2008-01-08 16:24:00 -0600 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2008-01-30 11:04:42 -0600 |
commit | 46b43eed7018bab3a4e8c259eed27697b9170cb8 (patch) | |
tree | d5a1c23ba3bb40ff2fcea4e635c72f2a33ff6ba7 /fs/dlm/lock.c | |
parent | aec64e1be2225c6fc64499594d23257c6adf6168 (diff) | |
download | linux-3.10-46b43eed7018bab3a4e8c259eed27697b9170cb8.tar.gz linux-3.10-46b43eed7018bab3a4e8c259eed27697b9170cb8.tar.bz2 linux-3.10-46b43eed7018bab3a4e8c259eed27697b9170cb8.zip |
dlm: reject messages from non-members
Messages from nodes that are no longer members of the lockspace should be
ignored. When nodes are removed from the lockspace, recovery can
sometimes complete quickly enough that messages arrive from a removed node
after recovery has completed. When processed, these messages would often
cause an error message, and could in some cases change some state, causing
problems.
Signed-off-by: David Teigland <teigland@redhat.com>
Diffstat (limited to 'fs/dlm/lock.c')
-rw-r--r-- | fs/dlm/lock.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c index d5e8ea1b4f7..c3b9fca1704 100644 --- a/fs/dlm/lock.c +++ b/fs/dlm/lock.c @@ -1,7 +1,7 @@ /****************************************************************************** ******************************************************************************* ** -** Copyright (C) 2005-2007 Red Hat, Inc. All rights reserved. +** Copyright (C) 2005-2008 Red Hat, Inc. All rights reserved. ** ** This copyrighted material is made available to anyone wishing to use, ** modify, copy, or redistribute it subject to the terms and conditions @@ -3643,6 +3643,13 @@ static void receive_lookup_reply(struct dlm_ls *ls, struct dlm_message *ms) static void _receive_message(struct dlm_ls *ls, struct dlm_message *ms) { + if (!dlm_is_member(ls, ms->m_header.h_nodeid)) { + log_debug(ls, "ignore non-member message %d from %d %x %x %d", + ms->m_type, ms->m_header.h_nodeid, ms->m_lkid, + ms->m_remid, ms->m_result); + return; + } + switch (ms->m_type) { /* messages sent to a master node */ |