/** * bearer_disable * * Note: This routine assumes caller holds tipc_net_lock. */ static void bearer_disable(struct tipc_bearer *b_ptr, bool shutting_down) { u32 i; pr_info("Disabling bearer <%s>\n", b_ptr->name); b_ptr->media->disable_media(b_ptr); tipc_link_delete_list(b_ptr->identity, shutting_down); if (b_ptr->link_req) tipc_disc_delete(b_ptr->link_req); for (i = 0; i < MAX_BEARERS; i++) { if (b_ptr == bearer_list[i]) { bearer_list[i] = NULL; break; } } kfree(b_ptr); }
/** * bearer_disable * * Note: This routine assumes caller holds RTNL lock. */ static void bearer_disable(struct tipc_bearer *b_ptr, bool shutting_down) { u32 i; pr_info("Disabling bearer <%s>\n", b_ptr->name); b_ptr->media->disable_media(b_ptr); tipc_link_delete_list(b_ptr->identity, shutting_down); if (b_ptr->link_req) tipc_disc_delete(b_ptr->link_req); for (i = 0; i < MAX_BEARERS; i++) { if (b_ptr == rtnl_dereference(bearer_list[i])) { RCU_INIT_POINTER(bearer_list[i], NULL); break; } } kfree_rcu(b_ptr, rcu); }