Lines Matching refs:head

121 	struct cls_fl_head *head = rcu_dereference_bh(tp->root);  in fl_classify()  local
126 fl_clear_masked_range(&skb_key, &head->mask); in fl_classify()
132 skb_flow_dissect(skb, &head->dissector, &skb_key, 0); in fl_classify()
134 fl_set_masked_key(&skb_mkey, &skb_key, &head->mask); in fl_classify()
136 f = rhashtable_lookup_fast(&head->ht, in fl_classify()
137 fl_key_get_start(&skb_mkey, &head->mask), in fl_classify()
138 head->ht_params); in fl_classify()
148 struct cls_fl_head *head; in fl_init() local
150 head = kzalloc(sizeof(*head), GFP_KERNEL); in fl_init()
151 if (!head) in fl_init()
154 INIT_LIST_HEAD_RCU(&head->filters); in fl_init()
155 rcu_assign_pointer(tp->root, head); in fl_init()
160 static void fl_destroy_filter(struct rcu_head *head) in fl_destroy_filter() argument
162 struct cls_fl_filter *f = container_of(head, struct cls_fl_filter, rcu); in fl_destroy_filter()
170 struct cls_fl_head *head = rtnl_dereference(tp->root); in fl_destroy() local
173 if (!force && !list_empty(&head->filters)) in fl_destroy()
176 list_for_each_entry_safe(f, next, &head->filters, list) { in fl_destroy()
181 if (head->mask_assigned) in fl_destroy()
182 rhashtable_destroy(&head->ht); in fl_destroy()
183 kfree_rcu(head, rcu); in fl_destroy()
189 struct cls_fl_head *head = rtnl_dereference(tp->root); in fl_get() local
192 list_for_each_entry(f, &head->filters, list) in fl_get()
320 static int fl_init_hashtable(struct cls_fl_head *head, in fl_init_hashtable() argument
323 head->ht_params = fl_ht_params; in fl_init_hashtable()
324 head->ht_params.key_len = fl_mask_range(mask); in fl_init_hashtable()
325 head->ht_params.key_offset += mask->range.start; in fl_init_hashtable()
327 return rhashtable_init(&head->ht, &head->ht_params); in fl_init_hashtable()
352 static void fl_init_dissector(struct cls_fl_head *head, in fl_init_dissector() argument
369 skb_flow_dissector_init(&head->dissector, keys, cnt); in fl_init_dissector()
372 static int fl_check_assign_mask(struct cls_fl_head *head, in fl_check_assign_mask() argument
377 if (head->mask_assigned) { in fl_check_assign_mask()
378 if (!fl_mask_eq(&head->mask, mask)) in fl_check_assign_mask()
387 err = fl_init_hashtable(head, mask); in fl_check_assign_mask()
390 memcpy(&head->mask, mask, sizeof(head->mask)); in fl_check_assign_mask()
391 head->mask_assigned = true; in fl_check_assign_mask()
393 fl_init_dissector(head, mask); in fl_check_assign_mask()
432 struct cls_fl_head *head) in fl_grab_new_handle() argument
438 if (++head->hgen == 0x7FFFFFFF) in fl_grab_new_handle()
439 head->hgen = 1; in fl_grab_new_handle()
440 } while (--i > 0 && fl_get(tp, head->hgen)); in fl_grab_new_handle()
446 handle = head->hgen; in fl_grab_new_handle()
457 struct cls_fl_head *head = rtnl_dereference(tp->root); in fl_change() local
481 handle = fl_grab_new_handle(tp, head); in fl_change()
493 err = fl_check_assign_mask(head, &mask); in fl_change()
497 err = rhashtable_insert_fast(&head->ht, &fnew->ht_node, in fl_change()
498 head->ht_params); in fl_change()
502 rhashtable_remove_fast(&head->ht, &fold->ht_node, in fl_change()
503 head->ht_params); in fl_change()
512 list_add_tail_rcu(&fnew->list, &head->filters); in fl_change()
524 struct cls_fl_head *head = rtnl_dereference(tp->root); in fl_delete() local
527 rhashtable_remove_fast(&head->ht, &f->ht_node, in fl_delete()
528 head->ht_params); in fl_delete()
537 struct cls_fl_head *head = rtnl_dereference(tp->root); in fl_walk() local
540 list_for_each_entry_rcu(f, &head->filters, list) { in fl_walk()
574 struct cls_fl_head *head = rtnl_dereference(tp->root); in fl_dump() local
593 mask = &head->mask.key; in fl_dump()