Lines Matching refs:iter

1075 	struct fib6_info *iter = NULL;
1093 for (iter = leaf; iter;
1094 iter = rcu_dereference_protected(iter->fib6_next,
1100 if (iter->fib6_metric == rt->fib6_metric) {
1110 if (rt_can_ecmp == rt6_qualify_for_ecmp(iter)) {
1118 if (rt6_duplicate_nexthop(iter, rt)) {
1121 if (!(iter->fib6_flags & RTF_EXPIRES))
1124 fib6_clean_expires(iter);
1126 fib6_set_expires(iter, rt->expires);
1129 fib6_metric_set(iter, RTAX_MTU,
1145 rt6_qualify_for_ecmp(iter))
1149 if (iter->fib6_metric > rt->fib6_metric)
1153 ins = &iter->fib6_next;
1161 iter = rcu_dereference_protected(*ins,
1249 rcu_assign_pointer(rt->fib6_next, iter);
1282 rt->fib6_next = iter->fib6_next;
1290 nsiblings = iter->fib6_nsiblings;
1291 iter->fib6_node = NULL;
1292 fib6_purge_rt(iter, fn, info->nl_net);
1293 if (rcu_access_pointer(fn->rr_ptr) == iter)
1295 fib6_info_release(iter);
1300 iter = rcu_dereference_protected(*ins,
1302 while (iter) {
1303 if (iter->fib6_metric > rt->fib6_metric)
1305 if (rt6_qualify_for_ecmp(iter)) {
1306 *ins = iter->fib6_next;
1307 iter->fib6_node = NULL;
1308 fib6_purge_rt(iter, fn, info->nl_net);
1309 if (rcu_access_pointer(fn->rr_ptr) == iter)
1311 fib6_info_release(iter);
1315 ins = &iter->fib6_next;
1317 iter = rcu_dereference_protected(*ins,
1784 int iter = 0;
1809 RT6_TRACE("fixing tree: plen=%d iter=%d\n", fn->fn_bit, iter);
1810 iter++;
2483 struct ipv6_route_iter *iter = seq->private;
2509 iter->w.leaf = NULL;
2515 struct ipv6_route_iter *iter = w->args;
2517 if (!iter->skip)
2521 iter->w.leaf = rcu_dereference_protected(
2522 iter->w.leaf->fib6_next,
2523 lockdep_is_held(&iter->tbl->tb6_lock));
2524 iter->skip--;
2525 if (!iter->skip && iter->w.leaf)
2527 } while (iter->w.leaf);
2532 static void ipv6_route_seq_setup_walk(struct ipv6_route_iter *iter,
2535 memset(&iter->w, 0, sizeof(iter->w));
2536 iter->w.func = ipv6_route_yield;
2537 iter->w.root = &iter->tbl->tb6_root;
2538 iter->w.state = FWS_INIT;
2539 iter->w.node = iter->w.root;
2540 iter->w.args = iter;
2541 iter->sernum = READ_ONCE(iter->w.root->fn_sernum);
2542 INIT_LIST_HEAD(&iter->w.lh);
2543 fib6_walker_link(net, &iter->w);
2567 static void ipv6_route_check_sernum(struct ipv6_route_iter *iter)
2569 int sernum = READ_ONCE(iter->w.root->fn_sernum);
2571 if (iter->sernum != sernum) {
2572 iter->sernum = sernum;
2573 iter->w.state = FWS_INIT;
2574 iter->w.node = iter->w.root;
2575 WARN_ON(iter->w.skip);
2576 iter->w.skip = iter->w.count;
2585 struct ipv6_route_iter *iter = seq->private;
2596 ipv6_route_check_sernum(iter);
2597 spin_lock_bh(&iter->tbl->tb6_lock);
2598 r = fib6_walk_continue(&iter->w);
2599 spin_unlock_bh(&iter->tbl->tb6_lock);
2601 return iter->w.leaf;
2603 fib6_walker_unlink(net, &iter->w);
2606 fib6_walker_unlink(net, &iter->w);
2608 iter->tbl = ipv6_route_seq_next_table(iter->tbl, net);
2609 if (!iter->tbl)
2612 ipv6_route_seq_setup_walk(iter, net);
2620 struct ipv6_route_iter *iter = seq->private;
2623 iter->tbl = ipv6_route_seq_next_table(NULL, net);
2624 iter->skip = *pos;
2626 if (iter->tbl) {
2629 ipv6_route_seq_setup_walk(iter, net);
2636 static bool ipv6_route_iter_active(struct ipv6_route_iter *iter)
2638 struct fib6_walker *w = &iter->w;
2646 struct ipv6_route_iter *iter = seq->private;
2648 if (ipv6_route_iter_active(iter))
2649 fib6_walker_unlink(net, &iter->w);
2668 struct ipv6_route_iter *iter = seq->private;
2679 iter->w.leaf = NULL;