Lines Matching refs:iter
498 int rhashtable_walk_init(struct rhashtable *ht, struct rhashtable_iter *iter) in rhashtable_walk_init() argument
500 iter->ht = ht; in rhashtable_walk_init()
501 iter->p = NULL; in rhashtable_walk_init()
502 iter->slot = 0; in rhashtable_walk_init()
503 iter->skip = 0; in rhashtable_walk_init()
505 iter->walker = kmalloc(sizeof(*iter->walker), GFP_KERNEL); in rhashtable_walk_init()
506 if (!iter->walker) in rhashtable_walk_init()
510 iter->walker->tbl = in rhashtable_walk_init()
512 list_add(&iter->walker->list, &iter->walker->tbl->walkers); in rhashtable_walk_init()
525 void rhashtable_walk_exit(struct rhashtable_iter *iter) in rhashtable_walk_exit() argument
527 spin_lock(&iter->ht->lock); in rhashtable_walk_exit()
528 if (iter->walker->tbl) in rhashtable_walk_exit()
529 list_del(&iter->walker->list); in rhashtable_walk_exit()
530 spin_unlock(&iter->ht->lock); in rhashtable_walk_exit()
531 kfree(iter->walker); in rhashtable_walk_exit()
549 int rhashtable_walk_start(struct rhashtable_iter *iter) in rhashtable_walk_start() argument
552 struct rhashtable *ht = iter->ht; in rhashtable_walk_start()
557 if (iter->walker->tbl) in rhashtable_walk_start()
558 list_del(&iter->walker->list); in rhashtable_walk_start()
561 if (!iter->walker->tbl) { in rhashtable_walk_start()
562 iter->walker->tbl = rht_dereference_rcu(ht->tbl, ht); in rhashtable_walk_start()
582 void *rhashtable_walk_next(struct rhashtable_iter *iter) in rhashtable_walk_next() argument
584 struct bucket_table *tbl = iter->walker->tbl; in rhashtable_walk_next()
585 struct rhashtable *ht = iter->ht; in rhashtable_walk_next()
586 struct rhash_head *p = iter->p; in rhashtable_walk_next()
590 p = rht_dereference_bucket_rcu(p->next, tbl, iter->slot); in rhashtable_walk_next()
594 for (; iter->slot < tbl->size; iter->slot++) { in rhashtable_walk_next()
595 int skip = iter->skip; in rhashtable_walk_next()
597 rht_for_each_rcu(p, tbl, iter->slot) { in rhashtable_walk_next()
605 iter->skip++; in rhashtable_walk_next()
606 iter->p = p; in rhashtable_walk_next()
611 iter->skip = 0; in rhashtable_walk_next()
614 iter->p = NULL; in rhashtable_walk_next()
619 iter->walker->tbl = rht_dereference_rcu(tbl->future_tbl, ht); in rhashtable_walk_next()
620 if (iter->walker->tbl) { in rhashtable_walk_next()
621 iter->slot = 0; in rhashtable_walk_next()
622 iter->skip = 0; in rhashtable_walk_next()
638 void rhashtable_walk_stop(struct rhashtable_iter *iter) in rhashtable_walk_stop() argument
642 struct bucket_table *tbl = iter->walker->tbl; in rhashtable_walk_stop()
647 ht = iter->ht; in rhashtable_walk_stop()
651 list_add(&iter->walker->list, &tbl->walkers); in rhashtable_walk_stop()
653 iter->walker->tbl = NULL; in rhashtable_walk_stop()
656 iter->p = NULL; in rhashtable_walk_stop()