Lines Matching refs:iter

1072 	struct fib6_info *iter = NULL;
1090 for (iter = leaf; iter;
1091 iter = rcu_dereference_protected(iter->fib6_next,
1097 if (iter->fib6_metric == rt->fib6_metric) {
1107 if (rt_can_ecmp == rt6_qualify_for_ecmp(iter)) {
1115 if (rt6_duplicate_nexthop(iter, rt)) {
1118 if (!(iter->fib6_flags & RTF_EXPIRES))
1121 fib6_clean_expires(iter);
1123 fib6_set_expires(iter, rt->expires);
1126 fib6_metric_set(iter, RTAX_MTU,
1142 rt6_qualify_for_ecmp(iter))
1146 if (iter->fib6_metric > rt->fib6_metric)
1150 ins = &iter->fib6_next;
1158 iter = rcu_dereference_protected(*ins,
1246 rcu_assign_pointer(rt->fib6_next, iter);
1279 rt->fib6_next = iter->fib6_next;
1287 nsiblings = iter->fib6_nsiblings;
1288 iter->fib6_node = NULL;
1289 fib6_purge_rt(iter, fn, info->nl_net);
1290 if (rcu_access_pointer(fn->rr_ptr) == iter)
1292 fib6_info_release(iter);
1297 iter = rcu_dereference_protected(*ins,
1299 while (iter) {
1300 if (iter->fib6_metric > rt->fib6_metric)
1302 if (rt6_qualify_for_ecmp(iter)) {
1303 *ins = iter->fib6_next;
1304 iter->fib6_node = NULL;
1305 fib6_purge_rt(iter, fn, info->nl_net);
1306 if (rcu_access_pointer(fn->rr_ptr) == iter)
1308 fib6_info_release(iter);
1312 ins = &iter->fib6_next;
1314 iter = rcu_dereference_protected(*ins,
1781 int iter = 0;
1806 RT6_TRACE("fixing tree: plen=%d iter=%d\n", fn->fn_bit, iter);
1807 iter++;
2484 struct ipv6_route_iter *iter = seq->private;
2510 iter->w.leaf = NULL;
2516 struct ipv6_route_iter *iter = w->args;
2518 if (!iter->skip)
2522 iter->w.leaf = rcu_dereference_protected(
2523 iter->w.leaf->fib6_next,
2524 lockdep_is_held(&iter->tbl->tb6_lock));
2525 iter->skip--;
2526 if (!iter->skip && iter->w.leaf)
2528 } while (iter->w.leaf);
2533 static void ipv6_route_seq_setup_walk(struct ipv6_route_iter *iter,
2536 memset(&iter->w, 0, sizeof(iter->w));
2537 iter->w.func = ipv6_route_yield;
2538 iter->w.root = &iter->tbl->tb6_root;
2539 iter->w.state = FWS_INIT;
2540 iter->w.node = iter->w.root;
2541 iter->w.args = iter;
2542 iter->sernum = READ_ONCE(iter->w.root->fn_sernum);
2543 INIT_LIST_HEAD(&iter->w.lh);
2544 fib6_walker_link(net, &iter->w);
2568 static void ipv6_route_check_sernum(struct ipv6_route_iter *iter)
2570 int sernum = READ_ONCE(iter->w.root->fn_sernum);
2572 if (iter->sernum != sernum) {
2573 iter->sernum = sernum;
2574 iter->w.state = FWS_INIT;
2575 iter->w.node = iter->w.root;
2576 WARN_ON(iter->w.skip);
2577 iter->w.skip = iter->w.count;
2586 struct ipv6_route_iter *iter = seq->private;
2597 ipv6_route_check_sernum(iter);
2598 spin_lock_bh(&iter->tbl->tb6_lock);
2599 r = fib6_walk_continue(&iter->w);
2600 spin_unlock_bh(&iter->tbl->tb6_lock);
2602 return iter->w.leaf;
2604 fib6_walker_unlink(net, &iter->w);
2607 fib6_walker_unlink(net, &iter->w);
2609 iter->tbl = ipv6_route_seq_next_table(iter->tbl, net);
2610 if (!iter->tbl)
2613 ipv6_route_seq_setup_walk(iter, net);
2621 struct ipv6_route_iter *iter = seq->private;
2624 iter->tbl = ipv6_route_seq_next_table(NULL, net);
2625 iter->skip = *pos;
2627 if (iter->tbl) {
2630 ipv6_route_seq_setup_walk(iter, net);
2637 static bool ipv6_route_iter_active(struct ipv6_route_iter *iter)
2639 struct fib6_walker *w = &iter->w;
2647 struct ipv6_route_iter *iter = seq->private;
2649 if (ipv6_route_iter_active(iter))
2650 fib6_walker_unlink(net, &iter->w);
2669 struct ipv6_route_iter *iter = seq->private;
2680 iter->w.leaf = NULL;