Lines Matching refs:pchb

646 static int ppp_bridge_channels(struct channel *pch, struct channel *pchb)  in ppp_bridge_channels()  argument
654 refcount_inc(&pchb->file.refcnt); in ppp_bridge_channels()
655 rcu_assign_pointer(pch->bridge, pchb); in ppp_bridge_channels()
658 spin_lock(&pchb->upl); in ppp_bridge_channels()
659 if (rcu_dereference_protected(pchb->ppp, lockdep_is_held(&pchb->upl)) || in ppp_bridge_channels()
660 rcu_dereference_protected(pchb->bridge, lockdep_is_held(&pchb->upl))) { in ppp_bridge_channels()
661 spin_unlock(&pchb->upl); in ppp_bridge_channels()
665 rcu_assign_pointer(pchb->bridge, pch); in ppp_bridge_channels()
666 spin_unlock(&pchb->upl); in ppp_bridge_channels()
673 pchb = rcu_dereference_protected(pch->bridge, lockdep_is_held(&pch->upl)); in ppp_bridge_channels()
678 if (pchb) in ppp_bridge_channels()
679 if (refcount_dec_and_test(&pchb->file.refcnt)) in ppp_bridge_channels()
680 ppp_destroy_channel(pchb); in ppp_bridge_channels()
687 struct channel *pchb, *pchbb; in ppp_unbridge_channels() local
690 pchb = rcu_dereference_protected(pch->bridge, lockdep_is_held(&pch->upl)); in ppp_unbridge_channels()
691 if (!pchb) { in ppp_unbridge_channels()
703 spin_lock(&pchb->upl); in ppp_unbridge_channels()
704 pchbb = rcu_dereference_protected(pchb->bridge, lockdep_is_held(&pchb->upl)); in ppp_unbridge_channels()
706 RCU_INIT_POINTER(pchb->bridge, NULL); in ppp_unbridge_channels()
707 spin_unlock(&pchb->upl); in ppp_unbridge_channels()
715 if (refcount_dec_and_test(&pchb->file.refcnt)) in ppp_unbridge_channels()
716 ppp_destroy_channel(pchb); in ppp_unbridge_channels()
756 struct channel *pch, *pchb; in ppp_ioctl() local
779 pchb = ppp_find_channel(pn, unit); in ppp_ioctl()
783 if (pchb) in ppp_ioctl()
784 refcount_inc(&pchb->file.refcnt); in ppp_ioctl()
786 if (!pchb) in ppp_ioctl()
788 err = ppp_bridge_channels(pch, pchb); in ppp_ioctl()
790 if (refcount_dec_and_test(&pchb->file.refcnt)) in ppp_ioctl()
791 ppp_destroy_channel(pchb); in ppp_ioctl()
2295 struct channel *pchb; in ppp_channel_bridge_input() local
2298 pchb = rcu_dereference(pch->bridge); in ppp_channel_bridge_input()
2299 if (!pchb) in ppp_channel_bridge_input()
2302 spin_lock_bh(&pchb->downl); in ppp_channel_bridge_input()
2303 if (!pchb->chan) { in ppp_channel_bridge_input()
2309 skb_scrub_packet(skb, !net_eq(pch->chan_net, pchb->chan_net)); in ppp_channel_bridge_input()
2310 if (!pchb->chan->ops->start_xmit(pchb->chan, skb)) in ppp_channel_bridge_input()
2314 spin_unlock_bh(&pchb->downl); in ppp_channel_bridge_input()
2319 return !!pchb; in ppp_channel_bridge_input()