File call_cpg_leave_before_shutdown.diff of Package device-mapper

Index: LVM2.2.02.45/daemons/clvmd/clvmd-openais.c
===================================================================
--- LVM2.2.02.45.orig/daemons/clvmd/clvmd-openais.c
+++ LVM2.2.02.45/daemons/clvmd/clvmd-openais.c
@@ -345,7 +345,7 @@ static int _init_cluster(void)
 	err = cpg_join(cpg_handle, &cpg_group_name);
 	if (err != SA_AIS_OK) {
 		cpg_finalize(cpg_handle);
-		dlm_release_lockspace(LOCKSPACE_NAME, lockspace, 0);
+		dlm_release_lockspace(LOCKSPACE_NAME, lockspace, 1);
 		syslog(LOG_ERR, "Cannot join clvmd process group");
 		DEBUGLOG("Cannot join clvmd process group: %d\n", err);
 		return ais_to_errno(err);
@@ -354,8 +354,9 @@ static int _init_cluster(void)
 	err = cpg_local_get(cpg_handle,
 			    &our_nodeid);
 	if (err != SA_AIS_OK) {
+		cpg_leave(cpg_handle, &cpg_group_name);
 		cpg_finalize(cpg_handle);
-		dlm_release_lockspace(LOCKSPACE_NAME, lockspace, 0);
+		dlm_release_lockspace(LOCKSPACE_NAME, lockspace, 1);
 		syslog(LOG_ERR, "Cannot get local node id\n");
 		return ais_to_errno(err);
 	}
@@ -372,15 +373,11 @@ static void _cluster_closedown(void)
 	unlock_all();
 
 	int r;
-	r = dlm_release_lockspace(LOCKSPACE_NAME, lockspace, 0);
-	if (r == -1) {
-	   if (errno == EBUSY) {
-		syslog(LOG_ERR, "Some locks still active, close by force\n");
-		dlm_release_lockspace(LOCKSPACE_NAME, lockspace, 1);
-	   } else {
-		   syslog(LOG_ERR, "dlm_release_lockspace failed\n");
-	   }
+	r = dlm_release_lockspace(LOCKSPACE_NAME, lockspace, 1);
+	if (r != 0) {
+	   syslog(LOG_ERR, "dlm_release_lockspace failed: %d\n", errno);
 	}
+	cpg_leave(cpg_handle, &cpg_group_name);
 	cpg_finalize(cpg_handle);
 }
 
openSUSE Build Service is sponsored by