Lines Matching refs:fnew
2281 struct cls_fl_filter *fnew, in fl_check_assign_mask() argument
2294 fnew->mask = rhashtable_lookup_get_insert_fast(&head->ht, in fl_check_assign_mask()
2297 if (!fnew->mask) { in fl_check_assign_mask()
2311 fnew->mask = newmask; in fl_check_assign_mask()
2313 } else if (IS_ERR(fnew->mask)) { in fl_check_assign_mask()
2314 ret = PTR_ERR(fnew->mask); in fl_check_assign_mask()
2315 } else if (fold && fold->mask != fnew->mask) { in fl_check_assign_mask()
2317 } else if (!refcount_inc_not_zero(&fnew->mask->refcnt)) { in fl_check_assign_mask()
2335 static int fl_ht_insert_unique(struct cls_fl_filter *fnew, in fl_ht_insert_unique() argument
2339 struct fl_flow_mask *mask = fnew->mask; in fl_ht_insert_unique()
2343 &fnew->ht_node, in fl_ht_insert_unique()
2368 struct cls_fl_filter *fnew; in fl_change() local
2401 fnew = kzalloc(sizeof(*fnew), GFP_KERNEL); in fl_change()
2402 if (!fnew) { in fl_change()
2406 INIT_LIST_HEAD(&fnew->hw_list); in fl_change()
2407 refcount_set(&fnew->refcnt, 1); in fl_change()
2410 fnew->flags = nla_get_u32(tb[TCA_FLOWER_FLAGS]); in fl_change()
2412 if (!tc_flags_valid(fnew->flags)) { in fl_change()
2413 kfree(fnew); in fl_change()
2441 kfree(fnew); in fl_change()
2445 fnew->handle = handle; in fl_change()
2447 err = tcf_exts_init_ex(&fnew->exts, net, TCA_FLOWER_ACT, 0, tp, handle, in fl_change()
2448 !tc_skip_hw(fnew->flags)); in fl_change()
2453 &fnew->exts, flags, fnew->flags, in fl_change()
2459 fnew->res.classid = nla_get_u32(tb[TCA_FLOWER_CLASSID]); in fl_change()
2462 tcf_bind_filter(tp, &fnew->res, base); in fl_change()
2468 err = fl_set_key(net, tca_opts, tb, &fnew->key, &mask->key, extack); in fl_change()
2473 fl_set_masked_key(&fnew->mkey, &fnew->key, mask); in fl_change()
2485 fnew->needs_tc_skb_ext = 1; in fl_change()
2489 err = fl_check_assign_mask(head, fnew, fold, mask); in fl_change()
2493 err = fl_ht_insert_unique(fnew, fold, &in_ht); in fl_change()
2497 if (!tc_skip_hw(fnew->flags)) { in fl_change()
2498 err = fl_hw_replace_filter(tp, fnew, rtnl_held, extack); in fl_change()
2503 if (!tc_in_hw(fnew->flags)) in fl_change()
2504 fnew->flags |= TCA_CLS_FLAGS_NOT_IN_HW; in fl_change()
2506 tcf_proto_update_usesw(tp, fnew->flags); in fl_change()
2525 fnew->handle = handle; in fl_change()
2529 fnew->mask->filter_ht_params; in fl_change()
2531 err = rhashtable_insert_fast(&fnew->mask->ht, in fl_change()
2532 &fnew->ht_node, in fl_change()
2539 refcount_inc(&fnew->refcnt); in fl_change()
2543 idr_replace(&head->handle_idr, fnew, fnew->handle); in fl_change()
2544 list_replace_rcu(&fold->list, &fnew->list); in fl_change()
2559 idr_replace(&head->handle_idr, fnew, fnew->handle); in fl_change()
2561 refcount_inc(&fnew->refcnt); in fl_change()
2562 list_add_tail_rcu(&fnew->list, &fnew->mask->filters); in fl_change()
2566 *arg = fnew; in fl_change()
2575 fnew->deleted = true; in fl_change()
2577 if (!tc_skip_hw(fnew->flags)) in fl_change()
2578 fl_hw_destroy_filter(tp, fnew, rtnl_held, NULL); in fl_change()
2580 rhashtable_remove_fast(&fnew->mask->ht, &fnew->ht_node, in fl_change()
2581 fnew->mask->filter_ht_params); in fl_change()
2583 fl_mask_put(head, fnew->mask); in fl_change()
2589 tcf_unbind_filter(tp, &fnew->res); in fl_change()
2597 idr_remove(&head->handle_idr, fnew->handle); in fl_change()
2600 __fl_put(fnew); in fl_change()