Lines Matching refs:vlan
455 void batadv_softif_vlan_free_ref(struct batadv_softif_vlan *vlan) in batadv_softif_vlan_free_ref() argument
457 if (!vlan) in batadv_softif_vlan_free_ref()
460 if (atomic_dec_and_test(&vlan->refcount)) { in batadv_softif_vlan_free_ref()
461 spin_lock_bh(&vlan->bat_priv->softif_vlan_list_lock); in batadv_softif_vlan_free_ref()
462 hlist_del_rcu(&vlan->list); in batadv_softif_vlan_free_ref()
463 spin_unlock_bh(&vlan->bat_priv->softif_vlan_list_lock); in batadv_softif_vlan_free_ref()
465 kfree_rcu(vlan, rcu); in batadv_softif_vlan_free_ref()
480 struct batadv_softif_vlan *vlan_tmp, *vlan = NULL; in batadv_softif_vlan_get() local
490 vlan = vlan_tmp; in batadv_softif_vlan_get()
495 return vlan; in batadv_softif_vlan_get()
507 struct batadv_softif_vlan *vlan; in batadv_softif_create_vlan() local
510 vlan = batadv_softif_vlan_get(bat_priv, vid); in batadv_softif_create_vlan()
511 if (vlan) { in batadv_softif_create_vlan()
512 batadv_softif_vlan_free_ref(vlan); in batadv_softif_create_vlan()
516 vlan = kzalloc(sizeof(*vlan), GFP_ATOMIC); in batadv_softif_create_vlan()
517 if (!vlan) in batadv_softif_create_vlan()
520 vlan->bat_priv = bat_priv; in batadv_softif_create_vlan()
521 vlan->vid = vid; in batadv_softif_create_vlan()
522 atomic_set(&vlan->refcount, 1); in batadv_softif_create_vlan()
524 atomic_set(&vlan->ap_isolation, 0); in batadv_softif_create_vlan()
526 err = batadv_sysfs_add_vlan(bat_priv->soft_iface, vlan); in batadv_softif_create_vlan()
528 kfree(vlan); in batadv_softif_create_vlan()
533 hlist_add_head_rcu(&vlan->list, &bat_priv->softif_vlan_list); in batadv_softif_create_vlan()
552 struct batadv_softif_vlan *vlan) in batadv_softif_destroy_vlan() argument
558 vlan->vid, "vlan interface destroyed", false); in batadv_softif_destroy_vlan()
560 batadv_sysfs_del_vlan(bat_priv, vlan); in batadv_softif_destroy_vlan()
561 batadv_softif_vlan_free_ref(vlan); in batadv_softif_destroy_vlan()
578 struct batadv_softif_vlan *vlan; in batadv_interface_add_vid() local
595 vlan = batadv_softif_vlan_get(bat_priv, vid); in batadv_interface_add_vid()
596 if (!vlan) in batadv_interface_add_vid()
602 if (!vlan->kobj) { in batadv_interface_add_vid()
603 ret = batadv_sysfs_add_vlan(bat_priv->soft_iface, vlan); in batadv_interface_add_vid()
605 batadv_softif_vlan_free_ref(vlan); in batadv_interface_add_vid()
636 struct batadv_softif_vlan *vlan; in batadv_interface_kill_vid() local
644 vlan = batadv_softif_vlan_get(bat_priv, vid | BATADV_VLAN_HAS_TAG); in batadv_interface_kill_vid()
645 if (!vlan) in batadv_interface_kill_vid()
648 batadv_softif_destroy_vlan(bat_priv, vlan); in batadv_interface_kill_vid()
651 batadv_softif_vlan_free_ref(vlan); in batadv_interface_kill_vid()
695 struct batadv_softif_vlan *vlan; in batadv_softif_destroy_finish() local
704 vlan = batadv_softif_vlan_get(bat_priv, BATADV_NO_FLAGS); in batadv_softif_destroy_finish()
705 if (vlan) { in batadv_softif_destroy_finish()
706 batadv_softif_destroy_vlan(bat_priv, vlan); in batadv_softif_destroy_finish()
707 batadv_softif_vlan_free_ref(vlan); in batadv_softif_destroy_finish()