Lines Matching refs:pchb
618 static int ppp_bridge_channels(struct channel *pch, struct channel *pchb) in ppp_bridge_channels() argument
626 refcount_inc(&pchb->file.refcnt); in ppp_bridge_channels()
627 rcu_assign_pointer(pch->bridge, pchb); in ppp_bridge_channels()
630 write_lock_bh(&pchb->upl); in ppp_bridge_channels()
631 if (pchb->ppp || in ppp_bridge_channels()
632 rcu_dereference_protected(pchb->bridge, lockdep_is_held(&pchb->upl))) { in ppp_bridge_channels()
633 write_unlock_bh(&pchb->upl); in ppp_bridge_channels()
637 rcu_assign_pointer(pchb->bridge, pch); in ppp_bridge_channels()
638 write_unlock_bh(&pchb->upl); in ppp_bridge_channels()
645 pchb = rcu_dereference_protected(pch->bridge, lockdep_is_held(&pch->upl)); in ppp_bridge_channels()
650 if (pchb) in ppp_bridge_channels()
651 if (refcount_dec_and_test(&pchb->file.refcnt)) in ppp_bridge_channels()
652 ppp_destroy_channel(pchb); in ppp_bridge_channels()
659 struct channel *pchb, *pchbb; in ppp_unbridge_channels() local
662 pchb = rcu_dereference_protected(pch->bridge, lockdep_is_held(&pch->upl)); in ppp_unbridge_channels()
663 if (!pchb) { in ppp_unbridge_channels()
675 write_lock_bh(&pchb->upl); in ppp_unbridge_channels()
676 pchbb = rcu_dereference_protected(pchb->bridge, lockdep_is_held(&pchb->upl)); in ppp_unbridge_channels()
678 RCU_INIT_POINTER(pchb->bridge, NULL); in ppp_unbridge_channels()
679 write_unlock_bh(&pchb->upl); in ppp_unbridge_channels()
687 if (refcount_dec_and_test(&pchb->file.refcnt)) in ppp_unbridge_channels()
688 ppp_destroy_channel(pchb); in ppp_unbridge_channels()
728 struct channel *pch, *pchb; in ppp_ioctl() local
751 pchb = ppp_find_channel(pn, unit); in ppp_ioctl()
755 if (pchb) in ppp_ioctl()
756 refcount_inc(&pchb->file.refcnt); in ppp_ioctl()
758 if (!pchb) in ppp_ioctl()
760 err = ppp_bridge_channels(pch, pchb); in ppp_ioctl()
762 if (refcount_dec_and_test(&pchb->file.refcnt)) in ppp_ioctl()
763 ppp_destroy_channel(pchb); in ppp_ioctl()
2242 struct channel *pchb; in ppp_channel_bridge_input() local
2245 pchb = rcu_dereference(pch->bridge); in ppp_channel_bridge_input()
2246 if (!pchb) in ppp_channel_bridge_input()
2249 spin_lock(&pchb->downl); in ppp_channel_bridge_input()
2250 if (!pchb->chan) { in ppp_channel_bridge_input()
2256 skb_scrub_packet(skb, !net_eq(pch->chan_net, pchb->chan_net)); in ppp_channel_bridge_input()
2257 if (!pchb->chan->ops->start_xmit(pchb->chan, skb)) in ppp_channel_bridge_input()
2261 spin_unlock(&pchb->downl); in ppp_channel_bridge_input()
2266 return !!pchb; in ppp_channel_bridge_input()