Lines Matching refs:m

102 static void tipc_group_proto_xmit(struct tipc_group *grp, struct tipc_member *m,
105 static void tipc_group_open(struct tipc_member *m, bool *wakeup) in tipc_group_open() argument
108 if (list_empty(&m->small_win)) in tipc_group_open()
110 list_del_init(&m->small_win); in tipc_group_open()
111 *m->group->open = true; in tipc_group_open()
116 struct tipc_member *m) in tipc_group_decr_active() argument
118 if (m->state == MBR_ACTIVE || m->state == MBR_RECLAIMING || in tipc_group_decr_active()
119 m->state == MBR_REMITTED) in tipc_group_decr_active()
146 static bool tipc_group_is_receiver(struct tipc_member *m) in tipc_group_is_receiver() argument
148 return m && m->state != MBR_JOINING && m->state != MBR_LEAVING; in tipc_group_is_receiver()
151 static bool tipc_group_is_sender(struct tipc_member *m) in tipc_group_is_sender() argument
153 return m && m->state != MBR_JOINING && m->state != MBR_PUBLISHED; in tipc_group_is_sender()
200 struct tipc_member *m, *tmp; in tipc_group_join() local
204 rbtree_postorder_for_each_entry_safe(m, tmp, tree, tree_node) { in tipc_group_join()
205 tipc_group_proto_xmit(grp, m, GRP_JOIN_MSG, &xmitq); in tipc_group_join()
206 tipc_group_update_member(m, 0); in tipc_group_join()
215 struct tipc_member *m, *tmp; in tipc_group_delete() local
220 rbtree_postorder_for_each_entry_safe(m, tmp, tree, tree_node) { in tipc_group_delete()
221 tipc_group_proto_xmit(grp, m, GRP_LEAVE_MSG, &xmitq); in tipc_group_delete()
222 __skb_queue_purge(&m->deferredq); in tipc_group_delete()
223 list_del(&m->list); in tipc_group_delete()
224 kfree(m); in tipc_group_delete()
237 struct tipc_member *m; in tipc_group_find_member() local
240 m = container_of(n, struct tipc_member, tree_node); in tipc_group_find_member()
241 nkey = (u64)m->node << 32 | m->port; in tipc_group_find_member()
247 return m; in tipc_group_find_member()
255 struct tipc_member *m; in tipc_group_find_dest() local
257 m = tipc_group_find_member(grp, node, port); in tipc_group_find_dest()
258 if (m && tipc_group_is_receiver(m)) in tipc_group_find_dest()
259 return m; in tipc_group_find_dest()
266 struct tipc_member *m; in tipc_group_find_node() local
270 m = container_of(n, struct tipc_member, tree_node); in tipc_group_find_node()
271 if (m->node == node) in tipc_group_find_node()
272 return m; in tipc_group_find_node()
278 struct tipc_member *m) in tipc_group_add_to_tree() argument
280 u64 nkey, key = (u64)m->node << 32 | m->port; in tipc_group_add_to_tree()
297 rb_link_node(&m->tree_node, parent, n); in tipc_group_add_to_tree()
298 rb_insert_color(&m->tree_node, &grp->members); in tipc_group_add_to_tree()
306 struct tipc_member *m; in tipc_group_create_member() local
309 m = kzalloc(sizeof(*m), GFP_ATOMIC); in tipc_group_create_member()
310 if (!m) in tipc_group_create_member()
312 INIT_LIST_HEAD(&m->list); in tipc_group_create_member()
313 INIT_LIST_HEAD(&m->small_win); in tipc_group_create_member()
314 __skb_queue_head_init(&m->deferredq); in tipc_group_create_member()
315 m->group = grp; in tipc_group_create_member()
316 m->node = node; in tipc_group_create_member()
317 m->port = port; in tipc_group_create_member()
318 m->instance = instance; in tipc_group_create_member()
319 m->bc_acked = grp->bc_snd_nxt - 1; in tipc_group_create_member()
320 ret = tipc_group_add_to_tree(grp, m); in tipc_group_create_member()
322 kfree(m); in tipc_group_create_member()
326 tipc_nlist_add(&grp->dests, m->node); in tipc_group_create_member()
327 m->state = state; in tipc_group_create_member()
328 return m; in tipc_group_create_member()
338 struct tipc_member *m) in tipc_group_delete_member() argument
340 rb_erase(&m->tree_node, &grp->members); in tipc_group_delete_member()
344 if (grp->bc_ackers && less(m->bc_acked, grp->bc_snd_nxt - 1)) in tipc_group_delete_member()
347 list_del_init(&m->list); in tipc_group_delete_member()
348 list_del_init(&m->small_win); in tipc_group_delete_member()
349 tipc_group_decr_active(grp, m); in tipc_group_delete_member()
352 if (!tipc_group_find_node(grp, m->node)) in tipc_group_delete_member()
353 tipc_nlist_del(&grp->dests, m->node); in tipc_group_delete_member()
355 kfree(m); in tipc_group_delete_member()
372 void tipc_group_update_member(struct tipc_member *m, int len) in tipc_group_update_member() argument
374 struct tipc_group *grp = m->group; in tipc_group_update_member()
377 if (!tipc_group_is_receiver(m)) in tipc_group_update_member()
380 m->window -= len; in tipc_group_update_member()
382 if (m->window >= ADV_IDLE) in tipc_group_update_member()
385 list_del_init(&m->small_win); in tipc_group_update_member()
389 if (_m->window > m->window) in tipc_group_update_member()
392 list_add_tail(&m->small_win, &_m->small_win); in tipc_group_update_member()
398 struct tipc_member *m; in tipc_group_update_bc_members() local
403 m = container_of(n, struct tipc_member, tree_node); in tipc_group_update_bc_members()
404 if (tipc_group_is_receiver(m)) { in tipc_group_update_bc_members()
405 tipc_group_update_member(m, len); in tipc_group_update_bc_members()
406 m->bc_acked = prev; in tipc_group_update_bc_members()
421 struct tipc_member *m; in tipc_group_cong() local
424 m = tipc_group_find_dest(grp, dnode, dport); in tipc_group_cong()
425 if (!tipc_group_is_receiver(m)) { in tipc_group_cong()
429 *mbr = m; in tipc_group_cong()
431 if (m->window >= len) in tipc_group_cong()
437 adv = m->advertised; in tipc_group_cong()
438 state = m->state; in tipc_group_cong()
446 tipc_group_proto_xmit(grp, m, GRP_ADV_MSG, &xmitq); in tipc_group_cong()
453 struct tipc_member *m = NULL; in tipc_group_bc_cong() local
463 m = list_first_entry(&grp->small_win, struct tipc_member, small_win); in tipc_group_bc_cong()
464 if (m->window >= len) in tipc_group_bc_cong()
467 return tipc_group_cong(grp, m->node, m->port, len, &m); in tipc_group_bc_cong()
502 struct tipc_member *m; in tipc_group_filter_msg() local
517 m = tipc_group_find_member(grp, node, port); in tipc_group_filter_msg()
518 if (!tipc_group_is_sender(m)) in tipc_group_filter_msg()
521 if (less(msg_grp_bc_seqno(hdr), m->bc_rcv_nxt)) in tipc_group_filter_msg()
524 TIPC_SKB_CB(skb)->orig_member = m->instance; in tipc_group_filter_msg()
525 defq = &m->deferredq; in tipc_group_filter_msg()
536 if (more(msg_grp_bc_seqno(hdr), m->bc_rcv_nxt)) in tipc_group_filter_msg()
548 m->bc_rcv_nxt++; in tipc_group_filter_msg()
554 if (m->state == MBR_LEAVING) in tipc_group_filter_msg()
571 tipc_group_proto_xmit(grp, m, GRP_ACK_MSG, xmitq); in tipc_group_filter_msg()
575 tipc_group_delete_member(grp, m); in tipc_group_filter_msg()
595 struct tipc_member *m, *rm, *pm; in tipc_group_update_rcv_win() local
597 m = tipc_group_find_member(grp, node, port); in tipc_group_update_rcv_win()
598 if (!m) in tipc_group_update_rcv_win()
601 m->advertised -= blks; in tipc_group_update_rcv_win()
603 switch (m->state) { in tipc_group_update_rcv_win()
607 m->state = MBR_ACTIVE; in tipc_group_update_rcv_win()
608 list_add_tail(&m->list, active); in tipc_group_update_rcv_win()
610 tipc_group_proto_xmit(grp, m, GRP_ADV_MSG, xmitq); in tipc_group_update_rcv_win()
612 m->state = MBR_PENDING; in tipc_group_update_rcv_win()
613 list_add_tail(&m->list, &grp->pending); in tipc_group_update_rcv_win()
634 if (!list_is_last(&m->list, &grp->active)) in tipc_group_update_rcv_win()
635 list_move_tail(&m->list, &grp->active); in tipc_group_update_rcv_win()
636 if (m->advertised > (ADV_ACTIVE * 3 / 4)) in tipc_group_update_rcv_win()
638 tipc_group_proto_xmit(grp, m, GRP_ADV_MSG, xmitq); in tipc_group_update_rcv_win()
641 if (m->advertised > ADV_IDLE) in tipc_group_update_rcv_win()
643 m->state = MBR_JOINED; in tipc_group_update_rcv_win()
645 if (m->advertised < ADV_IDLE) { in tipc_group_update_rcv_win()
647 tipc_group_proto_xmit(grp, m, GRP_ADV_MSG, xmitq); in tipc_group_update_rcv_win()
669 struct tipc_member *m, in tipc_group_create_event() argument
679 evt.found_lower = m->instance; in tipc_group_create_event()
680 evt.found_upper = m->instance; in tipc_group_create_event()
681 evt.port.ref = m->port; in tipc_group_create_event()
682 evt.port.node = m->node; in tipc_group_create_event()
684 evt.s.seq.lower = m->instance; in tipc_group_create_event()
685 evt.s.seq.upper = m->instance; in tipc_group_create_event()
688 GROUP_H_SIZE, sizeof(evt), dnode, m->node, in tipc_group_create_event()
689 grp->portid, m->port, 0); in tipc_group_create_event()
699 TIPC_SKB_CB(skb)->orig_member = m->instance; in tipc_group_create_event()
703 static void tipc_group_proto_xmit(struct tipc_group *grp, struct tipc_member *m, in tipc_group_proto_xmit() argument
711 m->node, tipc_own_addr(grp->net), in tipc_group_proto_xmit()
712 m->port, grp->portid, 0); in tipc_group_proto_xmit()
716 if (m->state == MBR_ACTIVE) in tipc_group_proto_xmit()
717 adv = ADV_ACTIVE - m->advertised; in tipc_group_proto_xmit()
718 else if (m->state == MBR_JOINED || m->state == MBR_PENDING) in tipc_group_proto_xmit()
719 adv = ADV_IDLE - m->advertised; in tipc_group_proto_xmit()
726 m->advertised += adv; in tipc_group_proto_xmit()
731 m->advertised += adv; in tipc_group_proto_xmit()
733 msg_set_grp_bc_acked(hdr, m->bc_rcv_nxt); in tipc_group_proto_xmit()
735 msg_set_grp_remitted(hdr, m->window); in tipc_group_proto_xmit()
747 struct tipc_member *m, *pm; in tipc_group_proto_rcv() local
756 m = tipc_group_find_member(grp, node, port); in tipc_group_proto_rcv()
760 if (!m) in tipc_group_proto_rcv()
761 m = tipc_group_create_member(grp, node, port, in tipc_group_proto_rcv()
763 if (!m) in tipc_group_proto_rcv()
765 m->bc_syncpt = msg_grp_bc_syncpt(hdr); in tipc_group_proto_rcv()
766 m->bc_rcv_nxt = m->bc_syncpt; in tipc_group_proto_rcv()
767 m->window += msg_adv_win(hdr); in tipc_group_proto_rcv()
770 if (m->state != MBR_PUBLISHED) in tipc_group_proto_rcv()
774 m->state = MBR_JOINED; in tipc_group_proto_rcv()
775 tipc_group_open(m, usr_wakeup); in tipc_group_proto_rcv()
776 tipc_group_update_member(m, 0); in tipc_group_proto_rcv()
777 tipc_group_proto_xmit(grp, m, GRP_ADV_MSG, xmitq); in tipc_group_proto_rcv()
778 tipc_group_create_event(grp, m, TIPC_PUBLISHED, in tipc_group_proto_rcv()
779 m->bc_syncpt, inputq); in tipc_group_proto_rcv()
782 if (!m) in tipc_group_proto_rcv()
784 m->bc_syncpt = msg_grp_bc_syncpt(hdr); in tipc_group_proto_rcv()
785 list_del_init(&m->list); in tipc_group_proto_rcv()
786 tipc_group_open(m, usr_wakeup); in tipc_group_proto_rcv()
787 tipc_group_decr_active(grp, m); in tipc_group_proto_rcv()
788 m->state = MBR_LEAVING; in tipc_group_proto_rcv()
789 tipc_group_create_event(grp, m, TIPC_WITHDRAWN, in tipc_group_proto_rcv()
790 m->bc_syncpt, inputq); in tipc_group_proto_rcv()
793 if (!m) in tipc_group_proto_rcv()
795 m->window += msg_adv_win(hdr); in tipc_group_proto_rcv()
796 tipc_group_open(m, usr_wakeup); in tipc_group_proto_rcv()
799 if (!m) in tipc_group_proto_rcv()
801 m->bc_acked = msg_grp_bc_acked(hdr); in tipc_group_proto_rcv()
804 list_del_init(&m->small_win); in tipc_group_proto_rcv()
805 *m->group->open = true; in tipc_group_proto_rcv()
807 tipc_group_update_member(m, 0); in tipc_group_proto_rcv()
810 if (!m) in tipc_group_proto_rcv()
812 tipc_group_proto_xmit(grp, m, GRP_REMIT_MSG, xmitq); in tipc_group_proto_rcv()
813 m->window = ADV_IDLE; in tipc_group_proto_rcv()
814 tipc_group_open(m, usr_wakeup); in tipc_group_proto_rcv()
817 if (!m || m->state != MBR_RECLAIMING) in tipc_group_proto_rcv()
823 if (m->advertised > remitted) { in tipc_group_proto_rcv()
824 m->state = MBR_REMITTED; in tipc_group_proto_rcv()
825 in_flight = m->advertised - remitted; in tipc_group_proto_rcv()
826 m->advertised = ADV_IDLE + in_flight; in tipc_group_proto_rcv()
830 if (m->advertised < remitted) in tipc_group_proto_rcv()
834 m->state = MBR_JOINED; in tipc_group_proto_rcv()
836 m->advertised = ADV_IDLE; in tipc_group_proto_rcv()
867 struct tipc_member *m; in tipc_group_member_evt() local
879 m = tipc_group_find_member(grp, node, port); in tipc_group_member_evt()
884 if (!m) { in tipc_group_member_evt()
885 m = tipc_group_create_member(grp, node, port, instance, in tipc_group_member_evt()
887 if (!m) in tipc_group_member_evt()
889 tipc_group_update_member(m, 0); in tipc_group_member_evt()
890 tipc_group_proto_xmit(grp, m, GRP_JOIN_MSG, xmitq); in tipc_group_member_evt()
894 if (m->state != MBR_JOINING) in tipc_group_member_evt()
898 m->instance = instance; in tipc_group_member_evt()
899 m->state = MBR_JOINED; in tipc_group_member_evt()
900 tipc_group_open(m, usr_wakeup); in tipc_group_member_evt()
901 tipc_group_update_member(m, 0); in tipc_group_member_evt()
902 tipc_group_proto_xmit(grp, m, GRP_JOIN_MSG, xmitq); in tipc_group_member_evt()
903 tipc_group_create_event(grp, m, TIPC_PUBLISHED, in tipc_group_member_evt()
904 m->bc_syncpt, inputq); in tipc_group_member_evt()
907 if (!m) in tipc_group_member_evt()
910 tipc_group_decr_active(grp, m); in tipc_group_member_evt()
911 m->state = MBR_LEAVING; in tipc_group_member_evt()
912 list_del_init(&m->list); in tipc_group_member_evt()
913 tipc_group_open(m, usr_wakeup); in tipc_group_member_evt()
917 tipc_group_create_event(grp, m, TIPC_WITHDRAWN, in tipc_group_member_evt()
918 m->bc_rcv_nxt, inputq); in tipc_group_member_evt()