]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/dlm/recover.c
Merge branch 'hysdn' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/misc-2.6
[linux-2.6-omap-h63xx.git] / fs / dlm / recover.c
index 1a86dfc8034eb2e1daef7b0772458670dec3be50..c2cc7694cd164b6847f35c12257b6a783bf82525 100644 (file)
@@ -44,7 +44,7 @@
 static void dlm_wait_timer_fn(unsigned long data)
 {
        struct dlm_ls *ls = (struct dlm_ls *) data;
-       mod_timer(&ls->ls_timer, jiffies + (dlm_config.recover_timer * HZ));
+       mod_timer(&ls->ls_timer, jiffies + (dlm_config.ci_recover_timer * HZ));
        wake_up(&ls->ls_wait_general);
 }
 
@@ -55,7 +55,7 @@ int dlm_wait_function(struct dlm_ls *ls, int (*testfn) (struct dlm_ls *ls))
        init_timer(&ls->ls_timer);
        ls->ls_timer.function = dlm_wait_timer_fn;
        ls->ls_timer.data = (long) ls;
-       ls->ls_timer.expires = jiffies + (dlm_config.recover_timer * HZ);
+       ls->ls_timer.expires = jiffies + (dlm_config.ci_recover_timer * HZ);
        add_timer(&ls->ls_timer);
 
        wait_event(ls->ls_wait_general, testfn(ls) || dlm_recovery_stopped(ls));
@@ -252,6 +252,7 @@ static void recover_list_clear(struct dlm_ls *ls)
        spin_lock(&ls->ls_recover_list_lock);
        list_for_each_entry_safe(r, s, &ls->ls_recover_list, res_recover_list) {
                list_del_init(&r->res_recover_list);
+               r->res_recover_locks_count = 0;
                dlm_put_rsb(r);
                ls->ls_recover_list_count--;
        }
@@ -396,7 +397,9 @@ int dlm_recover_masters(struct dlm_ls *ls)
 
                if (dlm_no_directory(ls))
                        count += recover_master_static(r);
-               else if (!is_master(r) && dlm_is_removed(ls, r->res_nodeid)) {
+               else if (!is_master(r) &&
+                        (dlm_is_removed(ls, r->res_nodeid) ||
+                         rsb_flag(r, RSB_NEW_MASTER))) {
                        recover_master(r);
                        count++;
                }
@@ -473,24 +476,13 @@ static int recover_locks_queue(struct dlm_rsb *r, struct list_head *head)
        return error;
 }
 
-static int all_queues_empty(struct dlm_rsb *r)
-{
-       if (!list_empty(&r->res_grantqueue) ||
-           !list_empty(&r->res_convertqueue) ||
-           !list_empty(&r->res_waitqueue))
-               return 0;
-       return 1;
-}
-
 static int recover_locks(struct dlm_rsb *r)
 {
        int error = 0;
 
        lock_rsb(r);
-       if (all_queues_empty(r))
-               goto out;
 
-       DLM_ASSERT(!r->res_recover_locks_count, dlm_print_rsb(r););
+       DLM_ASSERT(!r->res_recover_locks_count, dlm_dump_rsb(r););
 
        error = recover_locks_queue(r, &r->res_grantqueue);
        if (error)
@@ -557,7 +549,7 @@ int dlm_recover_locks(struct dlm_ls *ls)
 
 void dlm_recovered_lock(struct dlm_rsb *r)
 {
-       DLM_ASSERT(rsb_flag(r, RSB_NEW_MASTER), dlm_print_rsb(r););
+       DLM_ASSERT(rsb_flag(r, RSB_NEW_MASTER), dlm_dump_rsb(r););
 
        r->res_recover_locks_count--;
        if (!r->res_recover_locks_count) {