From 54e9073d906313e16b9dde0673b7789a19881a98 Mon Sep 17 00:00:00 2001 From: David Teigland Date: Mon, 23 Apr 2012 13:58:42 -0500 Subject: [PATCH] --- yaml --- r: 305195 b: refs/heads/master c: d6e24788d21c4f1a8f00c811c31dd4e9a58679ac h: refs/heads/master i: 305193: 3a2bb91aff675e63222baaed176489eea23e594b 305191: 677faf9071156d015912635214b68bf36ae867d1 v: v3 --- [refs] | 2 +- trunk/fs/dlm/dlm_internal.h | 8 +++++++ trunk/fs/dlm/rcom.c | 48 ++++++++++++++++--------------------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/[refs] b/[refs] index 9a50e5b45adf..713055714530 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 13ef11110fa2173b9d03e6616574914e12e2a90f +refs/heads/master: d6e24788d21c4f1a8f00c811c31dd4e9a58679ac diff --git a/trunk/fs/dlm/dlm_internal.h b/trunk/fs/dlm/dlm_internal.h index 3a564d197e99..0e74832c021b 100644 --- a/trunk/fs/dlm/dlm_internal.h +++ b/trunk/fs/dlm/dlm_internal.h @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -74,6 +75,13 @@ do { \ (ls)->ls_name , ##args); \ } while (0) +#define log_limit(ls, fmt, args...) \ +do { \ + if (dlm_config.ci_log_debug) \ + printk_ratelimited(KERN_DEBUG "dlm: %s: " fmt "\n", \ + (ls)->ls_name , ##args); \ +} while (0) + #define DLM_ASSERT(x, do) \ { \ if (!(x)) \ diff --git a/trunk/fs/dlm/rcom.c b/trunk/fs/dlm/rcom.c index ac5c616c9696..6565fd5e28ef 100644 --- a/trunk/fs/dlm/rcom.c +++ b/trunk/fs/dlm/rcom.c @@ -486,47 +486,39 @@ int dlm_send_ls_not_ready(int nodeid, struct dlm_rcom *rc_in) return 0; } -static int is_old_reply(struct dlm_ls *ls, struct dlm_rcom *rc) +/* Called by dlm_recv; corresponds to dlm_receive_message() but special + recovery-only comms are sent through here. */ + +void dlm_receive_rcom(struct dlm_ls *ls, struct dlm_rcom *rc, int nodeid) { + int lock_size = sizeof(struct dlm_rcom) + sizeof(struct rcom_lock); + int stop, reply = 0; uint64_t seq; - int rv = 0; switch (rc->rc_type) { case DLM_RCOM_STATUS_REPLY: case DLM_RCOM_NAMES_REPLY: case DLM_RCOM_LOOKUP_REPLY: case DLM_RCOM_LOCK_REPLY: - spin_lock(&ls->ls_recover_lock); - seq = ls->ls_recover_seq; - spin_unlock(&ls->ls_recover_lock); - if (rc->rc_seq_reply != seq) { - log_debug(ls, "ignoring old reply %x from %d " - "seq_reply %llx expect %llx", - rc->rc_type, rc->rc_header.h_nodeid, - (unsigned long long)rc->rc_seq_reply, - (unsigned long long)seq); - rv = 1; - } - } - return rv; -} + reply = 1; + }; -/* Called by dlm_recv; corresponds to dlm_receive_message() but special - recovery-only comms are sent through here. */ - -void dlm_receive_rcom(struct dlm_ls *ls, struct dlm_rcom *rc, int nodeid) -{ - int lock_size = sizeof(struct dlm_rcom) + sizeof(struct rcom_lock); + spin_lock(&ls->ls_recover_lock); + stop = test_bit(LSFL_RECOVERY_STOP, &ls->ls_flags); + seq = ls->ls_recover_seq; + spin_unlock(&ls->ls_recover_lock); - if (dlm_recovery_stopped(ls) && (rc->rc_type != DLM_RCOM_STATUS)) { - log_debug(ls, "ignoring recovery message %x from %d", - rc->rc_type, nodeid); + if ((stop && (rc->rc_type != DLM_RCOM_STATUS)) || + (reply && (rc->rc_seq_reply != seq))) { + log_limit(ls, "dlm_receive_rcom ignore msg %d " + "from %d %llu %llu seq %llu", + rc->rc_type, nodeid, + (unsigned long long)rc->rc_seq, + (unsigned long long)rc->rc_seq_reply, + (unsigned long long)seq); goto out; } - if (is_old_reply(ls, rc)) - goto out; - switch (rc->rc_type) { case DLM_RCOM_STATUS: receive_rcom_status(ls, rc);