From: David Teigland During recovery, set the RESEND flag on locks waiting for a lookup so they'll be resent when recovery completes. Signed-off-by: David Teigland Signed-off-by: Andrew Morton --- drivers/dlm/lock.c | 19 +++++++++++-------- 1 files changed, 11 insertions(+), 8 deletions(-) diff -puN drivers/dlm/lock.c~dlm-core-locking-resend-lookups drivers/dlm/lock.c --- devel/drivers/dlm/lock.c~dlm-core-locking-resend-lookups 2005-07-16 13:35:38.000000000 -0700 +++ devel-akpm/drivers/dlm/lock.c 2005-07-16 13:35:38.000000000 -0700 @@ -3191,12 +3191,20 @@ void dlm_recover_waiters_pre(struct dlm_ down(&ls->ls_waiters_sem); list_for_each_entry_safe(lkb, safe, &ls->ls_waiters, lkb_wait_reply) { - if (!dlm_is_removed(ls, lkb->lkb_nodeid)) - continue; - log_debug(ls, "pre recover waiter lkid %x type %d flags %x", lkb->lkb_id, lkb->lkb_wait_type, lkb->lkb_flags); + /* all outstanding lookups, regardless of destination will be + resent after recovery is done */ + + if (lkb->lkb_wait_type == DLM_MSG_LOOKUP) { + lkb->lkb_flags |= DLM_IFL_RESEND; + continue; + } + + if (!dlm_is_removed(ls, lkb->lkb_nodeid)) + continue; + switch (lkb->lkb_wait_type) { case DLM_MSG_REQUEST: @@ -3223,11 +3231,6 @@ void dlm_recover_waiters_pre(struct dlm_ put_lkb(lkb); break; - case DLM_MSG_LOOKUP: - /* all outstanding lookups, regardless of dest. - will be resent after recovery is done */ - break; - default: log_error(ls, "invalid lkb wait_type %d", lkb->lkb_wait_type); _