Lines Matching refs:iter

510 int rhashtable_walk_init(struct rhashtable *ht, struct rhashtable_iter *iter)  in rhashtable_walk_init()  argument
512 iter->ht = ht; in rhashtable_walk_init()
513 iter->p = NULL; in rhashtable_walk_init()
514 iter->slot = 0; in rhashtable_walk_init()
515 iter->skip = 0; in rhashtable_walk_init()
517 iter->walker = kmalloc(sizeof(*iter->walker), GFP_KERNEL); in rhashtable_walk_init()
518 if (!iter->walker) in rhashtable_walk_init()
522 iter->walker->tbl = in rhashtable_walk_init()
524 list_add(&iter->walker->list, &iter->walker->tbl->walkers); in rhashtable_walk_init()
537 void rhashtable_walk_exit(struct rhashtable_iter *iter) in rhashtable_walk_exit() argument
539 spin_lock(&iter->ht->lock); in rhashtable_walk_exit()
540 if (iter->walker->tbl) in rhashtable_walk_exit()
541 list_del(&iter->walker->list); in rhashtable_walk_exit()
542 spin_unlock(&iter->ht->lock); in rhashtable_walk_exit()
543 kfree(iter->walker); in rhashtable_walk_exit()
561 int rhashtable_walk_start(struct rhashtable_iter *iter) in rhashtable_walk_start() argument
564 struct rhashtable *ht = iter->ht; in rhashtable_walk_start()
569 if (iter->walker->tbl) in rhashtable_walk_start()
570 list_del(&iter->walker->list); in rhashtable_walk_start()
573 if (!iter->walker->tbl) { in rhashtable_walk_start()
574 iter->walker->tbl = rht_dereference_rcu(ht->tbl, ht); in rhashtable_walk_start()
594 void *rhashtable_walk_next(struct rhashtable_iter *iter) in rhashtable_walk_next() argument
596 struct bucket_table *tbl = iter->walker->tbl; in rhashtable_walk_next()
597 struct rhashtable *ht = iter->ht; in rhashtable_walk_next()
598 struct rhash_head *p = iter->p; in rhashtable_walk_next()
601 p = rht_dereference_bucket_rcu(p->next, tbl, iter->slot); in rhashtable_walk_next()
605 for (; iter->slot < tbl->size; iter->slot++) { in rhashtable_walk_next()
606 int skip = iter->skip; in rhashtable_walk_next()
608 rht_for_each_rcu(p, tbl, iter->slot) { in rhashtable_walk_next()
616 iter->skip++; in rhashtable_walk_next()
617 iter->p = p; in rhashtable_walk_next()
621 iter->skip = 0; in rhashtable_walk_next()
624 iter->p = NULL; in rhashtable_walk_next()
629 iter->walker->tbl = rht_dereference_rcu(tbl->future_tbl, ht); in rhashtable_walk_next()
630 if (iter->walker->tbl) { in rhashtable_walk_next()
631 iter->slot = 0; in rhashtable_walk_next()
632 iter->skip = 0; in rhashtable_walk_next()
646 void rhashtable_walk_stop(struct rhashtable_iter *iter) in rhashtable_walk_stop() argument
650 struct bucket_table *tbl = iter->walker->tbl; in rhashtable_walk_stop()
655 ht = iter->ht; in rhashtable_walk_stop()
659 list_add(&iter->walker->list, &tbl->walkers); in rhashtable_walk_stop()
661 iter->walker->tbl = NULL; in rhashtable_walk_stop()
664 iter->p = NULL; in rhashtable_walk_stop()