[Cluster-devel] [DLM PATCH] DLM: Add some cond_resched statements to recovery

Bob Peterson rpeterso at redhat.com
Wed Jun 21 13:53:46 UTC 2017


Hi,

This patch adds some cond_resched statements to dlm's recovery
process to allow other processes to run, such as corosync.

Signed-off-by: Bob Peterson <rpeterso at redhat.com>
---
 fs/dlm/lock.c    | 2 ++
 fs/dlm/recover.c | 5 ++++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
index d4aadde..da28be8 100644
--- a/fs/dlm/lock.c
+++ b/fs/dlm/lock.c
@@ -1736,6 +1736,7 @@ static void shrink_bucket(struct dlm_ls *ls, int b)
 	 */
 
 	for (i = 0; i < remote_count; i++) {
+		cond_resched();
 		name = ls->ls_remove_names[i];
 		len = ls->ls_remove_lens[i];
 
@@ -1914,6 +1915,7 @@ void dlm_scan_timeout(struct dlm_ls *ls)
 		unlock_rsb(r);
 		unhold_rsb(r);
 		dlm_put_lkb(lkb);
+		cond_resched();
 	}
 }
 
diff --git a/fs/dlm/recover.c b/fs/dlm/recover.c
index eaea789..3346971 100644
--- a/fs/dlm/recover.c
+++ b/fs/dlm/recover.c
@@ -23,7 +23,6 @@
 #include "member.h"
 #include "recover.h"
 
-
 /*
  * Recovery waiting routines: these functions wait for a particular reply from
  * a remote node, or for the remote node to report a certain status.  They need
@@ -651,6 +650,7 @@ static int recover_locks(struct dlm_rsb *r)
 		rsb_clear_flag(r, RSB_NEW_MASTER);
  out:
 	unlock_rsb(r);
+	cond_resched();
 	return error;
 }
 
@@ -879,6 +879,7 @@ void dlm_recover_rsbs(struct dlm_ls *ls)
 		rsb_clear_flag(r, RSB_RECOVER_LVB_INVAL);
 		rsb_clear_flag(r, RSB_NEW_MASTER2);
 		unlock_rsb(r);
+		cond_resched();
 	}
 	up_read(&ls->ls_root_sem);
 
@@ -912,6 +913,7 @@ int dlm_create_root_list(struct dlm_ls *ls)
 		if (!RB_EMPTY_ROOT(&ls->ls_rsbtbl[i].toss))
 			log_error(ls, "dlm_create_root_list toss not empty");
 		spin_unlock(&ls->ls_rsbtbl[i].lock);
+		cond_resched();
 	}
  out:
 	up_write(&ls->ls_root_sem);
@@ -947,6 +949,7 @@ void dlm_clear_toss(struct dlm_ls *ls)
 			count++;
 		}
 		spin_unlock(&ls->ls_rsbtbl[i].lock);
+		cond_resched();
 	}
 
 	if (count)




More information about the Cluster-devel mailing list