Lines Matching refs:mon
183 static struct tipc_peer *get_peer(struct tipc_monitor *mon, u32 addr)
188 hlist_for_each_entry(peer, &mon->peers[thash], hash) {
197 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
199 return mon->self;
202 static inline bool tipc_mon_is_active(struct net *net, struct tipc_monitor *mon)
206 return mon->peer_cnt > tn->mon_threshold;
245 static void mon_apply_domain(struct tipc_monitor *mon,
270 static void mon_update_local_domain(struct tipc_monitor *mon)
272 struct tipc_peer *self = mon->self;
273 struct tipc_mon_domain *cache = &mon->cache;
281 member_cnt = dom_size(mon->peer_cnt) - 1;
298 dom->gen = ++mon->dom_gen;
303 mon_apply_domain(mon, self);
308 static void mon_update_neighbors(struct tipc_monitor *mon,
313 dz = dom_size(mon->peer_cnt);
315 mon_apply_domain(mon, peer);
324 static void mon_assign_roles(struct tipc_monitor *mon, struct tipc_peer *head)
327 struct tipc_peer *self = mon->self;
349 mon->list_gen++;
354 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
358 if (!mon)
362 write_lock_bh(&mon->lock);
363 peer = get_peer(mon, addr);
371 mon->peer_cnt--;
374 mon_update_local_domain(mon);
375 mon_update_neighbors(mon, prev);
378 if (!tipc_mon_is_active(net, mon)) {
385 mon_assign_roles(mon, head);
387 write_unlock_bh(&mon->lock);
390 static bool tipc_mon_add_peer(struct tipc_monitor *mon, u32 addr,
393 struct tipc_peer *self = mon->self;
404 hlist_add_head(&p->hash, &mon->peers[tipc_hashfn(addr)]);
417 mon->peer_cnt++;
418 mon_update_neighbors(mon, p);
424 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
428 write_lock_bh(&mon->lock);
429 peer = get_peer(mon, addr);
430 if (!peer && !tipc_mon_add_peer(mon, addr, &peer))
435 mon_update_local_domain(mon);
436 mon_assign_roles(mon, head);
438 write_unlock_bh(&mon->lock);
443 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
449 if (!mon)
453 write_lock_bh(&mon->lock);
454 peer = get_peer(mon, addr);
472 mon_update_local_domain(mon);
473 mon_assign_roles(mon, head);
475 write_unlock_bh(&mon->lock);
483 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
522 write_lock_bh(&mon->lock);
523 peer = get_peer(mon, addr);
559 mon_apply_domain(mon, peer);
561 mon_assign_roles(mon, peer_head(peer));
563 write_unlock_bh(&mon->lock);
569 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
571 u16 gen = mon->dom_gen;
575 if (!tipc_mon_is_active(net, mon)) {
591 read_lock_bh(&mon->lock);
592 len = mon_le16_to_cpu(mon->cache.len);
594 memcpy(data, &mon->cache, len);
595 read_unlock_bh(&mon->lock);
603 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
606 if (!tipc_mon_is_active(net, mon)) {
614 (state->list_gen == mon->list_gen) &&
615 (state->acked_gen == mon->dom_gen))
618 read_lock_bh(&mon->lock);
619 peer = get_peer(mon, addr);
621 state->probing = state->acked_gen != mon->dom_gen;
626 state->list_gen = mon->list_gen;
628 read_unlock_bh(&mon->lock);
633 struct tipc_monitor *mon = from_timer(mon, t, timer);
635 int best_member_cnt = dom_size(mon->peer_cnt) - 1;
637 write_lock_bh(&mon->lock);
638 self = mon->self;
640 mon_update_local_domain(mon);
641 mon_assign_roles(mon, self);
643 write_unlock_bh(&mon->lock);
644 mod_timer(&mon->timer, jiffies + mon->timer_intv);
650 struct tipc_monitor *mon;
657 mon = kzalloc(sizeof(*mon), GFP_ATOMIC);
660 if (!mon || !self || !dom) {
661 kfree(mon);
666 tn->monitors[bearer_id] = mon;
667 rwlock_init(&mon->lock);
668 mon->net = net;
669 mon->peer_cnt = 1;
670 mon->self = self;
676 timer_setup(&mon->timer, mon_timeout, 0);
677 mon->timer_intv = msecs_to_jiffies(MON_TIMEOUT + (tn->random & 0xffff));
678 mod_timer(&mon->timer, jiffies + mon->timer_intv);
685 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
689 if (!mon)
693 write_lock_bh(&mon->lock);
701 mon->self = NULL;
702 write_unlock_bh(&mon->lock);
703 timer_shutdown_sync(&mon->timer);
706 kfree(mon);
711 struct tipc_monitor *mon;
715 mon = tipc_monitor(net, bearer_id);
716 if (!mon)
718 write_lock_bh(&mon->lock);
719 mon->self->addr = tipc_own_addr(net);
720 write_unlock_bh(&mon->lock);
800 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
803 if (!mon)
806 read_lock_bh(&mon->lock);
807 peer = mon->self;
817 read_unlock_bh(&mon->lock);
820 } while ((peer = peer_nxt(peer)) != mon->self);
821 read_unlock_bh(&mon->lock);
829 struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
836 if (ret || !mon)
848 read_lock_bh(&mon->lock);
851 if (tipc_mon_is_active(net, mon))
856 if (nla_put_u32(msg->skb, TIPC_NLA_MON_PEERCNT, mon->peer_cnt))
858 if (nla_put_u32(msg->skb, TIPC_NLA_MON_LISTGEN, mon->list_gen))
861 read_unlock_bh(&mon->lock);
868 read_unlock_bh(&mon->lock);