Lines Matching refs:mon
153 static struct tipc_peer *get_peer(struct tipc_monitor *mon, u32 addr)
158 hlist_for_each_entry(peer, &mon->peers[thash], hash) {
167 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
169 return mon->self;
172 static inline bool tipc_mon_is_active(struct net *net, struct tipc_monitor *mon)
176 return mon->peer_cnt > tn->mon_threshold;
215 static void mon_apply_domain(struct tipc_monitor *mon,
240 static void mon_update_local_domain(struct tipc_monitor *mon)
242 struct tipc_peer *self = mon->self;
243 struct tipc_mon_domain *cache = &mon->cache;
251 member_cnt = dom_size(mon->peer_cnt) - 1;
268 dom->gen = ++mon->dom_gen;
273 mon_apply_domain(mon, self);
278 static void mon_update_neighbors(struct tipc_monitor *mon,
283 dz = dom_size(mon->peer_cnt);
285 mon_apply_domain(mon, peer);
294 static void mon_assign_roles(struct tipc_monitor *mon, struct tipc_peer *head)
297 struct tipc_peer *self = mon->self;
319 mon->list_gen++;
324 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
328 if (!mon)
332 write_lock_bh(&mon->lock);
333 peer = get_peer(mon, addr);
341 mon->peer_cnt--;
344 mon_update_local_domain(mon);
345 mon_update_neighbors(mon, prev);
348 if (!tipc_mon_is_active(net, mon)) {
355 mon_assign_roles(mon, head);
357 write_unlock_bh(&mon->lock);
360 static bool tipc_mon_add_peer(struct tipc_monitor *mon, u32 addr,
363 struct tipc_peer *self = mon->self;
374 hlist_add_head(&p->hash, &mon->peers[tipc_hashfn(addr)]);
387 mon->peer_cnt++;
388 mon_update_neighbors(mon, p);
394 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
398 write_lock_bh(&mon->lock);
399 peer = get_peer(mon, addr);
400 if (!peer && !tipc_mon_add_peer(mon, addr, &peer))
405 mon_update_local_domain(mon);
406 mon_assign_roles(mon, head);
408 write_unlock_bh(&mon->lock);
413 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
419 if (!mon)
423 write_lock_bh(&mon->lock);
424 peer = get_peer(mon, addr);
442 mon_update_local_domain(mon);
443 mon_assign_roles(mon, head);
445 write_unlock_bh(&mon->lock);
453 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
491 write_lock_bh(&mon->lock);
492 peer = get_peer(mon, addr);
528 mon_apply_domain(mon, peer);
530 mon_assign_roles(mon, peer_head(peer));
532 write_unlock_bh(&mon->lock);
538 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
540 u16 gen = mon->dom_gen;
544 if (!tipc_mon_is_active(net, mon)) {
560 read_lock_bh(&mon->lock);
561 len = ntohs(mon->cache.len);
563 memcpy(data, &mon->cache, len);
564 read_unlock_bh(&mon->lock);
572 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
575 if (!tipc_mon_is_active(net, mon)) {
583 (state->list_gen == mon->list_gen) &&
584 (state->acked_gen == mon->dom_gen))
587 read_lock_bh(&mon->lock);
588 peer = get_peer(mon, addr);
590 state->probing = state->acked_gen != mon->dom_gen;
595 state->list_gen = mon->list_gen;
597 read_unlock_bh(&mon->lock);
602 struct tipc_monitor *mon = from_timer(mon, t, timer);
604 int best_member_cnt = dom_size(mon->peer_cnt) - 1;
606 write_lock_bh(&mon->lock);
607 self = mon->self;
609 mon_update_local_domain(mon);
610 mon_assign_roles(mon, self);
612 write_unlock_bh(&mon->lock);
613 mod_timer(&mon->timer, jiffies + mon->timer_intv);
619 struct tipc_monitor *mon;
626 mon = kzalloc(sizeof(*mon), GFP_ATOMIC);
629 if (!mon || !self || !dom) {
630 kfree(mon);
635 tn->monitors[bearer_id] = mon;
636 rwlock_init(&mon->lock);
637 mon->net = net;
638 mon->peer_cnt = 1;
639 mon->self = self;
645 timer_setup(&mon->timer, mon_timeout, 0);
646 mon->timer_intv = msecs_to_jiffies(MON_TIMEOUT + (tn->random & 0xffff));
647 mod_timer(&mon->timer, jiffies + mon->timer_intv);
654 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
658 if (!mon)
662 write_lock_bh(&mon->lock);
670 mon->self = NULL;
671 write_unlock_bh(&mon->lock);
672 del_timer_sync(&mon->timer);
675 kfree(mon);
680 struct tipc_monitor *mon;
684 mon = tipc_monitor(net, bearer_id);
685 if (!mon)
687 write_lock_bh(&mon->lock);
688 mon->self->addr = tipc_own_addr(net);
689 write_unlock_bh(&mon->lock);
769 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
772 if (!mon)
775 read_lock_bh(&mon->lock);
776 peer = mon->self;
786 read_unlock_bh(&mon->lock);
789 } while ((peer = peer_nxt(peer)) != mon->self);
790 read_unlock_bh(&mon->lock);
798 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
805 if (ret || !mon)
817 read_lock_bh(&mon->lock);
820 if (tipc_mon_is_active(net, mon))
825 if (nla_put_u32(msg->skb, TIPC_NLA_MON_PEERCNT, mon->peer_cnt))
827 if (nla_put_u32(msg->skb, TIPC_NLA_MON_LISTGEN, mon->list_gen))
830 read_unlock_bh(&mon->lock);
837 read_unlock_bh(&mon->lock);