Lines Matching defs:pchb

624 static int ppp_bridge_channels(struct channel *pch, struct channel *pchb)
632 refcount_inc(&pchb->file.refcnt);
633 rcu_assign_pointer(pch->bridge, pchb);
636 write_lock_bh(&pchb->upl);
637 if (pchb->ppp ||
638 rcu_dereference_protected(pchb->bridge, lockdep_is_held(&pchb->upl))) {
639 write_unlock_bh(&pchb->upl);
643 rcu_assign_pointer(pchb->bridge, pch);
644 write_unlock_bh(&pchb->upl);
651 pchb = rcu_dereference_protected(pch->bridge, lockdep_is_held(&pch->upl));
656 if (pchb)
657 if (refcount_dec_and_test(&pchb->file.refcnt))
658 ppp_destroy_channel(pchb);
665 struct channel *pchb, *pchbb;
668 pchb = rcu_dereference_protected(pch->bridge, lockdep_is_held(&pch->upl));
669 if (!pchb) {
676 /* Only modify pchb if phcb->bridge points back to pch.
678 * even rebridging) pchb. We should leave pchb alone to avoid either a
681 write_lock_bh(&pchb->upl);
682 pchbb = rcu_dereference_protected(pchb->bridge, lockdep_is_held(&pchb->upl));
684 RCU_INIT_POINTER(pchb->bridge, NULL);
685 write_unlock_bh(&pchb->upl);
693 if (refcount_dec_and_test(&pchb->file.refcnt))
694 ppp_destroy_channel(pchb);
734 struct channel *pch, *pchb;
757 pchb = ppp_find_channel(pn, unit);
758 /* Hold a reference to prevent pchb being freed while
761 if (pchb)
762 refcount_inc(&pchb->file.refcnt);
764 if (!pchb)
766 err = ppp_bridge_channels(pch, pchb);
768 if (refcount_dec_and_test(&pchb->file.refcnt))
769 ppp_destroy_channel(pchb);
2250 struct channel *pchb;
2253 pchb = rcu_dereference(pch->bridge);
2254 if (!pchb)
2257 spin_lock(&pchb->downl);
2258 if (!pchb->chan) {
2264 skb_scrub_packet(skb, !net_eq(pch->chan_net, pchb->chan_net));
2265 if (!pchb->chan->ops->start_xmit(pchb->chan, skb))
2269 spin_unlock(&pchb->downl);
2273 /* If pchb is set then we've consumed the packet */
2274 return !!pchb;