Просмотр исходного кода

knet: Fix member_remove to shut down existing links first

Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
Christine Caulfield 9 лет назад
Родитель
Сommit
2d478505e5
1 измененных файлов с 19 добавлено и 0 удалено
  1. 19 0
      exec/totemknet.c

+ 19 - 0
exec/totemknet.c

@@ -1097,7 +1097,26 @@ int totemknet_member_remove (
 	int link_no)
 {
 	struct totemknet_instance *instance = (struct totemknet_instance *)knet_context;
+	int res;
+
+	knet_log_printf (LOGSYS_LEVEL_DEBUG, "knet: member_remove: %d, link=%d", token_target->nodeid, link_no);
+
+	if (token_target->nodeid == instance->our_nodeid) {
+		return 0; /* Don't remove ourself */
+	}
 
+	/* Remove the link first */
+	res = knet_link_set_enable(instance->knet_handle, token_target->nodeid, link_no, 0);
+	if (res != 0) {
+		KNET_LOGSYS_PERROR(errno, LOGSYS_LEVEL_ERROR, "knet_link_set enable(off) for nodeid %d, link %d failed", token_target->nodeid, link_no);
+		return res;
+	}
+
+	res = knet_link_clear_config(instance->knet_handle, token_target->nodeid, link_no);
+	if (res != 0) {
+		KNET_LOGSYS_PERROR(errno, LOGSYS_LEVEL_ERROR, "knet_link_clear_config for nodeid %d, link %d failed", token_target->nodeid, link_no);
+		return res;
+	}
 	return knet_host_remove(instance->knet_handle, token_target->nodeid);
 
 }