Lines Matching full:node

29  * Due the fact that dlm has pre-configured node addresses on every side
35 * application layer. The version field of every node will be set on these RCOM
36 * messages as soon as they arrived and the node isn't yet part of the nodes
47 * compatibility. A node cannot send anything to another node when a DLM_FIN
51 * manager removed the node from internal lists, at this point DLM does not
52 * send any message to the other node. There exists two cases:
156 * We could send a fence signal for a specific node to the cluster
181 /* counts how many lockspaces are using this node
183 * node wants to disconnect.
196 struct midcomms_node *node; member
202 void (*ack_rcv)(struct midcomms_node *node);
245 const char *dlm_midcomms_state(struct midcomms_node *node) in dlm_midcomms_state() argument
247 return dlm_state_str(node->state); in dlm_midcomms_state()
250 unsigned long dlm_midcomms_flags(struct midcomms_node *node) in dlm_midcomms_flags() argument
252 return node->flags; in dlm_midcomms_flags()
255 int dlm_midcomms_send_queue_cnt(struct midcomms_node *node) in dlm_midcomms_send_queue_cnt() argument
257 return atomic_read(&node->send_queue_cnt); in dlm_midcomms_send_queue_cnt()
260 uint32_t dlm_midcomms_version(struct midcomms_node *node) in dlm_midcomms_version() argument
262 return node->version; in dlm_midcomms_version()
267 struct midcomms_node *node; in __find_node() local
269 hlist_for_each_entry_rcu(node, &node_hash[r], hlist) { in __find_node()
270 if (node->nodeid == nodeid) in __find_node()
271 return node; in __find_node()
285 static void dlm_mhandle_delete(struct midcomms_node *node, in dlm_mhandle_delete() argument
289 atomic_dec(&node->send_queue_cnt); in dlm_mhandle_delete()
293 static void dlm_send_queue_flush(struct midcomms_node *node) in dlm_send_queue_flush() argument
297 pr_debug("flush midcomms send queue of node %d\n", node->nodeid); in dlm_send_queue_flush()
300 spin_lock(&node->send_queue_lock); in dlm_send_queue_flush()
301 list_for_each_entry_rcu(mh, &node->send_queue, list) { in dlm_send_queue_flush()
302 dlm_mhandle_delete(node, mh); in dlm_send_queue_flush()
304 spin_unlock(&node->send_queue_lock); in dlm_send_queue_flush()
308 static void midcomms_node_reset(struct midcomms_node *node) in midcomms_node_reset() argument
310 pr_debug("reset node %d\n", node->nodeid); in midcomms_node_reset()
312 node->seq_next = DLM_SEQ_INIT; in midcomms_node_reset()
313 node->seq_send = DLM_SEQ_INIT; in midcomms_node_reset()
314 node->version = DLM_VERSION_NOT_SET; in midcomms_node_reset()
315 node->flags = 0; in midcomms_node_reset()
317 dlm_send_queue_flush(node); in midcomms_node_reset()
318 node->state = DLM_CLOSED; in midcomms_node_reset()
319 wake_up(&node->shutdown_wait); in midcomms_node_reset()
324 struct midcomms_node *node, *tmp; in nodeid2node() local
327 node = __find_node(nodeid, r); in nodeid2node()
328 if (node || !alloc) in nodeid2node()
329 return node; in nodeid2node()
331 node = kmalloc(sizeof(*node), alloc); in nodeid2node()
332 if (!node) in nodeid2node()
335 node->nodeid = nodeid; in nodeid2node()
336 spin_lock_init(&node->state_lock); in nodeid2node()
337 spin_lock_init(&node->send_queue_lock); in nodeid2node()
338 atomic_set(&node->send_queue_cnt, 0); in nodeid2node()
339 INIT_LIST_HEAD(&node->send_queue); in nodeid2node()
340 init_waitqueue_head(&node->shutdown_wait); in nodeid2node()
341 node->users = 0; in nodeid2node()
342 midcomms_node_reset(node); in nodeid2node()
346 * earlier here to add the node in nodeid2node()
351 kfree(node); in nodeid2node()
355 hlist_add_head_rcu(&node->hlist, &node_hash[r]); in nodeid2node()
358 node->debugfs = dlm_create_debug_comms_file(nodeid, node); in nodeid2node()
359 return node; in nodeid2node()
389 static int dlm_send_fin(struct midcomms_node *node, in dlm_send_fin() argument
390 void (*ack_rcv)(struct midcomms_node *node)) in dlm_send_fin() argument
397 mh = dlm_midcomms_get_mhandle(node->nodeid, mb_len, GFP_NOFS, &ppc); in dlm_send_fin()
412 pr_debug("sending fin msg to node %d\n", node->nodeid); in dlm_send_fin()
414 set_bit(DLM_NODE_FLAG_STOP_TX, &node->flags); in dlm_send_fin()
419 static void dlm_receive_ack(struct midcomms_node *node, uint32_t seq) in dlm_receive_ack() argument
424 list_for_each_entry_rcu(mh, &node->send_queue, list) { in dlm_receive_ack()
427 mh->ack_rcv(node); in dlm_receive_ack()
434 spin_lock(&node->send_queue_lock); in dlm_receive_ack()
435 list_for_each_entry_rcu(mh, &node->send_queue, list) { in dlm_receive_ack()
437 dlm_mhandle_delete(node, mh); in dlm_receive_ack()
443 spin_unlock(&node->send_queue_lock); in dlm_receive_ack()
447 static void dlm_pas_fin_ack_rcv(struct midcomms_node *node) in dlm_pas_fin_ack_rcv() argument
449 spin_lock(&node->state_lock); in dlm_pas_fin_ack_rcv()
450 pr_debug("receive passive fin ack from node %d with state %s\n", in dlm_pas_fin_ack_rcv()
451 node->nodeid, dlm_state_str(node->state)); in dlm_pas_fin_ack_rcv()
453 switch (node->state) { in dlm_pas_fin_ack_rcv()
456 midcomms_node_reset(node); in dlm_pas_fin_ack_rcv()
460 wake_up(&node->shutdown_wait); in dlm_pas_fin_ack_rcv()
463 spin_unlock(&node->state_lock); in dlm_pas_fin_ack_rcv()
465 __func__, node->state); in dlm_pas_fin_ack_rcv()
469 spin_unlock(&node->state_lock); in dlm_pas_fin_ack_rcv()
473 struct midcomms_node *node, in dlm_midcomms_receive_buffer() argument
476 if (seq == node->seq_next) { in dlm_midcomms_receive_buffer()
477 node->seq_next++; in dlm_midcomms_receive_buffer()
482 dlm_send_ack(node->nodeid, node->seq_next); in dlm_midcomms_receive_buffer()
484 spin_lock(&node->state_lock); in dlm_midcomms_receive_buffer()
485 pr_debug("receive fin msg from node %d with state %s\n", in dlm_midcomms_receive_buffer()
486 node->nodeid, dlm_state_str(node->state)); in dlm_midcomms_receive_buffer()
488 switch (node->state) { in dlm_midcomms_receive_buffer()
490 node->state = DLM_CLOSE_WAIT; in dlm_midcomms_receive_buffer()
491 pr_debug("switch node %d to state %s\n", in dlm_midcomms_receive_buffer()
492 node->nodeid, dlm_state_str(node->state)); in dlm_midcomms_receive_buffer()
494 * additional we check if the node is used by in dlm_midcomms_receive_buffer()
497 if (node->users == 0) { in dlm_midcomms_receive_buffer()
498 node->state = DLM_LAST_ACK; in dlm_midcomms_receive_buffer()
499 pr_debug("switch node %d to state %s case 1\n", in dlm_midcomms_receive_buffer()
500 node->nodeid, dlm_state_str(node->state)); in dlm_midcomms_receive_buffer()
501 spin_unlock(&node->state_lock); in dlm_midcomms_receive_buffer()
506 node->state = DLM_CLOSING; in dlm_midcomms_receive_buffer()
507 pr_debug("switch node %d to state %s\n", in dlm_midcomms_receive_buffer()
508 node->nodeid, dlm_state_str(node->state)); in dlm_midcomms_receive_buffer()
511 midcomms_node_reset(node); in dlm_midcomms_receive_buffer()
512 pr_debug("switch node %d to state %s\n", in dlm_midcomms_receive_buffer()
513 node->nodeid, dlm_state_str(node->state)); in dlm_midcomms_receive_buffer()
514 wake_up(&node->shutdown_wait); in dlm_midcomms_receive_buffer()
520 spin_unlock(&node->state_lock); in dlm_midcomms_receive_buffer()
522 __func__, node->state); in dlm_midcomms_receive_buffer()
526 spin_unlock(&node->state_lock); in dlm_midcomms_receive_buffer()
528 set_bit(DLM_NODE_FLAG_STOP_RX, &node->flags); in dlm_midcomms_receive_buffer()
531 WARN_ON(test_bit(DLM_NODE_FLAG_STOP_RX, &node->flags)); in dlm_midcomms_receive_buffer()
532 dlm_receive_buffer(p, node->nodeid); in dlm_midcomms_receive_buffer()
533 set_bit(DLM_NODE_ULP_DELIVERED, &node->flags); in dlm_midcomms_receive_buffer()
538 * current node->seq_next number as ack. in dlm_midcomms_receive_buffer()
540 if (seq < node->seq_next) in dlm_midcomms_receive_buffer()
541 dlm_send_ack(node->nodeid, node->seq_next); in dlm_midcomms_receive_buffer()
544 seq, node->seq_next, node->nodeid); in dlm_midcomms_receive_buffer()
550 set_bit(DLM_NODE_FLAG_STOP_RX, &node->flags); in dlm_midcomms_receive_buffer()
551 dlm_send_fin(node, dlm_pas_fin_ack_rcv); in dlm_midcomms_receive_buffer()
556 uint16_t msglen, int (*cb)(struct midcomms_node *node)) in dlm_midcomms_recv_node_lookup() argument
558 struct midcomms_node *node = NULL; in dlm_midcomms_recv_node_lookup() local
565 log_print("rcom msg too small: %u, will skip this message from node %d", in dlm_midcomms_recv_node_lookup()
578 node = nodeid2node(nodeid, 0); in dlm_midcomms_recv_node_lookup()
579 if (node) { in dlm_midcomms_recv_node_lookup()
580 spin_lock(&node->state_lock); in dlm_midcomms_recv_node_lookup()
581 if (node->state != DLM_ESTABLISHED) in dlm_midcomms_recv_node_lookup()
582 pr_debug("receive begin RCOM msg from node %d with state %s\n", in dlm_midcomms_recv_node_lookup()
583 node->nodeid, dlm_state_str(node->state)); in dlm_midcomms_recv_node_lookup()
585 switch (node->state) { in dlm_midcomms_recv_node_lookup()
587 node->state = DLM_ESTABLISHED; in dlm_midcomms_recv_node_lookup()
588 pr_debug("switch node %d to state %s\n", in dlm_midcomms_recv_node_lookup()
589 node->nodeid, dlm_state_str(node->state)); in dlm_midcomms_recv_node_lookup()
598 log_print("reset node %d because shutdown stuck", in dlm_midcomms_recv_node_lookup()
599 node->nodeid); in dlm_midcomms_recv_node_lookup()
601 midcomms_node_reset(node); in dlm_midcomms_recv_node_lookup()
602 node->state = DLM_ESTABLISHED; in dlm_midcomms_recv_node_lookup()
605 spin_unlock(&node->state_lock); in dlm_midcomms_recv_node_lookup()
619 node = nodeid2node(nodeid, allocation); in dlm_midcomms_recv_node_lookup()
620 if (!node) { in dlm_midcomms_recv_node_lookup()
624 log_print("opts msg too small: %u, will skip this message from node %d", in dlm_midcomms_recv_node_lookup()
629 log_print_ratelimited("received dlm opts message nextcmd %d from node %d in an invalid sequence", in dlm_midcomms_recv_node_lookup()
633 log_print_ratelimited("received dlm message cmd %d from node %d in an invalid sequence", in dlm_midcomms_recv_node_lookup()
641 ret = cb(node); in dlm_midcomms_recv_node_lookup()
645 return node; in dlm_midcomms_recv_node_lookup()
648 static int dlm_midcomms_version_check_3_2(struct midcomms_node *node) in dlm_midcomms_version_check_3_2() argument
650 switch (node->version) { in dlm_midcomms_version_check_3_2()
652 node->version = DLM_VERSION_3_2; in dlm_midcomms_version_check_3_2()
653 log_print("version 0x%08x for node %d detected", DLM_VERSION_3_2, in dlm_midcomms_version_check_3_2()
654 node->nodeid); in dlm_midcomms_version_check_3_2()
659 log_print_ratelimited("version mismatch detected, assumed 0x%08x but node %d has 0x%08x", in dlm_midcomms_version_check_3_2()
660 DLM_VERSION_3_2, node->nodeid, node->version); in dlm_midcomms_version_check_3_2()
685 log_print("fin too small: %d, will skip this message from node %d", in dlm_opts_check_msglen()
693 log_print("msg too small: %d, will skip this message from node %d", in dlm_opts_check_msglen()
701 log_print("rcom msg too small: %d, will skip this message from node %d", in dlm_opts_check_msglen()
708 log_print("unsupported o_nextcmd received: %u, will skip this message from node %d", in dlm_opts_check_msglen()
719 struct midcomms_node *node; in dlm_midcomms_receive_buffer_3_2() local
724 node = dlm_midcomms_recv_node_lookup(nodeid, p, msglen, in dlm_midcomms_receive_buffer_3_2()
726 if (!node) in dlm_midcomms_receive_buffer_3_2()
747 log_print("unsupported rcom type received: %u, will skip this message from node %d", in dlm_midcomms_receive_buffer_3_2()
752 WARN_ON(test_bit(DLM_NODE_FLAG_STOP_RX, &node->flags)); in dlm_midcomms_receive_buffer_3_2()
760 log_print("opts msg too small: %u, will skip this message from node %d", in dlm_midcomms_receive_buffer_3_2()
773 log_print("inner rcom msg too small: %u, will skip this message from node %d", in dlm_midcomms_receive_buffer_3_2()
781 log_print("inner msg too small: %u, will skip this message from node %d", in dlm_midcomms_receive_buffer_3_2()
789 log_print("inner fin too small: %u, will skip this message from node %d", in dlm_midcomms_receive_buffer_3_2()
796 log_print("unsupported inner h_cmd received: %u, will skip this message from node %d", in dlm_midcomms_receive_buffer_3_2()
801 dlm_midcomms_receive_buffer(p, node, seq); in dlm_midcomms_receive_buffer_3_2()
805 dlm_receive_ack(node, seq); in dlm_midcomms_receive_buffer_3_2()
808 log_print("unsupported h_cmd received: %u, will skip this message from node %d", in dlm_midcomms_receive_buffer_3_2()
817 static int dlm_midcomms_version_check_3_1(struct midcomms_node *node) in dlm_midcomms_version_check_3_1() argument
819 switch (node->version) { in dlm_midcomms_version_check_3_1()
821 node->version = DLM_VERSION_3_1; in dlm_midcomms_version_check_3_1()
822 log_print("version 0x%08x for node %d detected", DLM_VERSION_3_1, in dlm_midcomms_version_check_3_1()
823 node->nodeid); in dlm_midcomms_version_check_3_1()
828 log_print_ratelimited("version mismatch detected, assumed 0x%08x but node %d has 0x%08x", in dlm_midcomms_version_check_3_1()
829 DLM_VERSION_3_1, node->nodeid, node->version); in dlm_midcomms_version_check_3_1()
839 struct midcomms_node *node; in dlm_midcomms_receive_buffer_3_1() local
843 node = dlm_midcomms_recv_node_lookup(nodeid, p, msglen, in dlm_midcomms_receive_buffer_3_1()
845 if (!node) { in dlm_midcomms_receive_buffer_3_1()
857 log_print("msg too small: %u, will skip this message from node %d", in dlm_midcomms_receive_buffer_3_1()
864 log_print("unsupported h_cmd received: %u, will skip this message from node %d", in dlm_midcomms_receive_buffer_3_1()
901 log_print("received invalid length header: %u from node %d, will abort message parsing", in dlm_process_incoming_buffer()
920 log_print("received invalid version header: %u from node %d, will skip this message", in dlm_process_incoming_buffer()
935 struct midcomms_node *node; in dlm_midcomms_receive_done() local
939 node = nodeid2node(nodeid, 0); in dlm_midcomms_receive_done()
940 if (!node) { in dlm_midcomms_receive_done()
946 switch (node->version) { in dlm_midcomms_receive_done()
956 &node->flags)) { in dlm_midcomms_receive_done()
961 spin_lock(&node->state_lock); in dlm_midcomms_receive_done()
963 switch (node->state) { in dlm_midcomms_receive_done()
965 spin_unlock(&node->state_lock); in dlm_midcomms_receive_done()
966 dlm_send_ack(node->nodeid, node->seq_next); in dlm_midcomms_receive_done()
969 spin_unlock(&node->state_lock); in dlm_midcomms_receive_done()
978 struct midcomms_node *node; in dlm_midcomms_unack_msg_resend() local
983 node = nodeid2node(nodeid, 0); in dlm_midcomms_unack_msg_resend()
984 if (!node) { in dlm_midcomms_unack_msg_resend()
990 switch (node->version) { in dlm_midcomms_unack_msg_resend()
999 list_for_each_entry_rcu(mh, &node->send_queue, list) { in dlm_midcomms_unack_msg_resend()
1006 mh->seq, node->nodeid); in dlm_midcomms_unack_msg_resend()
1025 atomic_inc(&mh->node->send_queue_cnt); in midcomms_new_msg_cb()
1027 spin_lock(&mh->node->send_queue_lock); in midcomms_new_msg_cb()
1028 list_add_tail_rcu(&mh->list, &mh->node->send_queue); in midcomms_new_msg_cb()
1029 spin_unlock(&mh->node->send_queue_lock); in midcomms_new_msg_cb()
1031 mh->seq = mh->node->seq_send++; in midcomms_new_msg_cb()
1059 struct midcomms_node *node; in dlm_midcomms_get_mhandle() local
1065 node = nodeid2node(nodeid, 0); in dlm_midcomms_get_mhandle()
1066 if (!node) { in dlm_midcomms_get_mhandle()
1072 WARN_ON(test_bit(DLM_NODE_FLAG_STOP_TX, &node->flags)); in dlm_midcomms_get_mhandle()
1079 mh->node = node; in dlm_midcomms_get_mhandle()
1081 switch (node->version) { in dlm_midcomms_get_mhandle()
1130 switch (mh->node->version) { in dlm_midcomms_commit_mhandle()
1160 static void dlm_act_fin_ack_rcv(struct midcomms_node *node) in dlm_act_fin_ack_rcv() argument
1162 spin_lock(&node->state_lock); in dlm_act_fin_ack_rcv()
1163 pr_debug("receive active fin ack from node %d with state %s\n", in dlm_act_fin_ack_rcv()
1164 node->nodeid, dlm_state_str(node->state)); in dlm_act_fin_ack_rcv()
1166 switch (node->state) { in dlm_act_fin_ack_rcv()
1168 node->state = DLM_FIN_WAIT2; in dlm_act_fin_ack_rcv()
1169 pr_debug("switch node %d to state %s\n", in dlm_act_fin_ack_rcv()
1170 node->nodeid, dlm_state_str(node->state)); in dlm_act_fin_ack_rcv()
1173 midcomms_node_reset(node); in dlm_act_fin_ack_rcv()
1174 pr_debug("switch node %d to state %s\n", in dlm_act_fin_ack_rcv()
1175 node->nodeid, dlm_state_str(node->state)); in dlm_act_fin_ack_rcv()
1176 wake_up(&node->shutdown_wait); in dlm_act_fin_ack_rcv()
1180 wake_up(&node->shutdown_wait); in dlm_act_fin_ack_rcv()
1183 spin_unlock(&node->state_lock); in dlm_act_fin_ack_rcv()
1185 __func__, node->state); in dlm_act_fin_ack_rcv()
1189 spin_unlock(&node->state_lock); in dlm_act_fin_ack_rcv()
1194 struct midcomms_node *node; in dlm_midcomms_add_member() local
1201 node = nodeid2node(nodeid, GFP_NOFS); in dlm_midcomms_add_member()
1202 if (!node) { in dlm_midcomms_add_member()
1207 spin_lock(&node->state_lock); in dlm_midcomms_add_member()
1208 if (!node->users) { in dlm_midcomms_add_member()
1209 pr_debug("receive add member from node %d with state %s\n", in dlm_midcomms_add_member()
1210 node->nodeid, dlm_state_str(node->state)); in dlm_midcomms_add_member()
1211 switch (node->state) { in dlm_midcomms_add_member()
1215 node->state = DLM_ESTABLISHED; in dlm_midcomms_add_member()
1216 pr_debug("switch node %d to state %s\n", in dlm_midcomms_add_member()
1217 node->nodeid, dlm_state_str(node->state)); in dlm_midcomms_add_member()
1224 log_print("reset node %d because shutdown stuck", in dlm_midcomms_add_member()
1225 node->nodeid); in dlm_midcomms_add_member()
1227 midcomms_node_reset(node); in dlm_midcomms_add_member()
1228 node->state = DLM_ESTABLISHED; in dlm_midcomms_add_member()
1233 node->users++; in dlm_midcomms_add_member()
1234 pr_debug("users inc count %d\n", node->users); in dlm_midcomms_add_member()
1235 spin_unlock(&node->state_lock); in dlm_midcomms_add_member()
1242 struct midcomms_node *node; in dlm_midcomms_remove_member() local
1249 node = nodeid2node(nodeid, 0); in dlm_midcomms_remove_member()
1250 if (!node) { in dlm_midcomms_remove_member()
1255 spin_lock(&node->state_lock); in dlm_midcomms_remove_member()
1256 node->users--; in dlm_midcomms_remove_member()
1257 pr_debug("users dec count %d\n", node->users); in dlm_midcomms_remove_member()
1263 if (node->users == 0) { in dlm_midcomms_remove_member()
1264 pr_debug("receive remove member from node %d with state %s\n", in dlm_midcomms_remove_member()
1265 node->nodeid, dlm_state_str(node->state)); in dlm_midcomms_remove_member()
1266 switch (node->state) { in dlm_midcomms_remove_member()
1271 node->state = DLM_LAST_ACK; in dlm_midcomms_remove_member()
1272 spin_unlock(&node->state_lock); in dlm_midcomms_remove_member()
1274 pr_debug("switch node %d to state %s case 2\n", in dlm_midcomms_remove_member()
1275 node->nodeid, dlm_state_str(node->state)); in dlm_midcomms_remove_member()
1285 __func__, node->state); in dlm_midcomms_remove_member()
1289 spin_unlock(&node->state_lock); in dlm_midcomms_remove_member()
1295 set_bit(DLM_NODE_FLAG_STOP_RX, &node->flags); in dlm_midcomms_remove_member()
1296 dlm_send_fin(node, dlm_pas_fin_ack_rcv); in dlm_midcomms_remove_member()
1302 struct midcomms_node *node = container_of(rcu, struct midcomms_node, rcu); in midcomms_node_release() local
1304 WARN_ON(atomic_read(&node->send_queue_cnt)); in midcomms_node_release()
1305 kfree(node); in midcomms_node_release()
1308 static void midcomms_shutdown(struct midcomms_node *node) in midcomms_shutdown() argument
1313 switch (node->version) { in midcomms_shutdown()
1320 spin_lock(&node->state_lock); in midcomms_shutdown()
1321 pr_debug("receive active shutdown for node %d with state %s\n", in midcomms_shutdown()
1322 node->nodeid, dlm_state_str(node->state)); in midcomms_shutdown()
1323 switch (node->state) { in midcomms_shutdown()
1325 node->state = DLM_FIN_WAIT1; in midcomms_shutdown()
1326 pr_debug("switch node %d to state %s case 2\n", in midcomms_shutdown()
1327 node->nodeid, dlm_state_str(node->state)); in midcomms_shutdown()
1331 spin_unlock(&node->state_lock); in midcomms_shutdown()
1339 spin_unlock(&node->state_lock); in midcomms_shutdown()
1341 if (node->state == DLM_FIN_WAIT1) { in midcomms_shutdown()
1342 dlm_send_fin(node, dlm_act_fin_ack_rcv); in midcomms_shutdown()
1349 ret = wait_event_timeout(node->shutdown_wait, in midcomms_shutdown()
1350 node->state == DLM_CLOSED || in midcomms_shutdown()
1351 test_bit(DLM_NODE_FLAG_CLOSE, &node->flags), in midcomms_shutdown()
1353 if (!ret || test_bit(DLM_NODE_FLAG_CLOSE, &node->flags)) { in midcomms_shutdown()
1354 pr_debug("active shutdown timed out for node %d with state %s\n", in midcomms_shutdown()
1355 node->nodeid, dlm_state_str(node->state)); in midcomms_shutdown()
1356 midcomms_node_reset(node); in midcomms_shutdown()
1360 pr_debug("active shutdown done for node %d with state %s\n", in midcomms_shutdown()
1361 node->nodeid, dlm_state_str(node->state)); in midcomms_shutdown()
1366 struct midcomms_node *node; in dlm_midcomms_shutdown() local
1372 hlist_for_each_entry_rcu(node, &node_hash[i], hlist) { in dlm_midcomms_shutdown()
1373 midcomms_shutdown(node); in dlm_midcomms_shutdown()
1375 dlm_delete_debug_comms_file(node->debugfs); in dlm_midcomms_shutdown()
1378 hlist_del_rcu(&node->hlist); in dlm_midcomms_shutdown()
1381 call_srcu(&nodes_srcu, &node->rcu, midcomms_node_release); in dlm_midcomms_shutdown()
1392 struct midcomms_node *node; in dlm_midcomms_close() local
1400 node = nodeid2node(nodeid, 0); in dlm_midcomms_close()
1401 if (node) { in dlm_midcomms_close()
1403 set_bit(DLM_NODE_FLAG_CLOSE, &node->flags); in dlm_midcomms_close()
1404 wake_up(&node->shutdown_wait); in dlm_midcomms_close()
1412 node = nodeid2node(nodeid, 0); in dlm_midcomms_close()
1413 if (!node) { in dlm_midcomms_close()
1420 spin_lock(&node->state_lock); in dlm_midcomms_close()
1421 midcomms_node_reset(node); in dlm_midcomms_close()
1422 spin_unlock(&node->state_lock); in dlm_midcomms_close()