Lines Matching defs:iter

647  * @iter:	Hash table Iterator
665 void rhashtable_walk_enter(struct rhashtable *ht, struct rhashtable_iter *iter)
667 iter->ht = ht;
668 iter->p = NULL;
669 iter->slot = 0;
670 iter->skip = 0;
671 iter->end_of_table = 0;
674 iter->walker.tbl =
676 list_add(&iter->walker.list, &iter->walker.tbl->walkers);
683 * @iter: Hash table Iterator
687 void rhashtable_walk_exit(struct rhashtable_iter *iter)
689 spin_lock(&iter->ht->lock);
690 if (iter->walker.tbl)
691 list_del(&iter->walker.list);
692 spin_unlock(&iter->ht->lock);
698 * @iter: Hash table iterator
714 int rhashtable_walk_start_check(struct rhashtable_iter *iter)
717 struct rhashtable *ht = iter->ht;
723 if (iter->walker.tbl)
724 list_del(&iter->walker.list);
727 if (iter->end_of_table)
729 if (!iter->walker.tbl) {
730 iter->walker.tbl = rht_dereference_rcu(ht->tbl, ht);
731 iter->slot = 0;
732 iter->skip = 0;
736 if (iter->p && !rhlist) {
743 rht_for_each_rcu(p, iter->walker.tbl, iter->slot) {
745 if (p == iter->p) {
746 iter->skip = skip;
750 iter->p = NULL;
751 } else if (iter->p && rhlist) {
758 rht_for_each_rcu(p, iter->walker.tbl, iter->slot) {
763 if (list == iter->list) {
764 iter->p = p;
765 iter->skip = skip;
770 iter->p = NULL;
781 * @iter: Hash table iterator
787 static void *__rhashtable_walk_find_next(struct rhashtable_iter *iter)
789 struct bucket_table *tbl = iter->walker.tbl;
790 struct rhlist_head *list = iter->list;
791 struct rhashtable *ht = iter->ht;
792 struct rhash_head *p = iter->p;
798 for (; iter->slot < tbl->size; iter->slot++) {
799 int skip = iter->skip;
801 rht_for_each_rcu(p, tbl, iter->slot) {
821 iter->skip++;
822 iter->p = p;
823 iter->list = list;
827 iter->skip = 0;
830 iter->p = NULL;
835 iter->walker.tbl = rht_dereference_rcu(tbl->future_tbl, ht);
836 if (iter->walker.tbl) {
837 iter->slot = 0;
838 iter->skip = 0;
841 iter->end_of_table = true;
849 * @iter: Hash table iterator
859 void *rhashtable_walk_next(struct rhashtable_iter *iter)
861 struct rhlist_head *list = iter->list;
862 struct rhashtable *ht = iter->ht;
863 struct rhash_head *p = iter->p;
872 iter->skip++;
873 iter->p = p;
874 iter->list = list;
881 iter->skip = 0;
882 iter->slot++;
885 return __rhashtable_walk_find_next(iter);
891 * @iter: Hash table iterator
898 void *rhashtable_walk_peek(struct rhashtable_iter *iter)
900 struct rhlist_head *list = iter->list;
901 struct rhashtable *ht = iter->ht;
902 struct rhash_head *p = iter->p;
907 /* No object found in current iter, find next one in the table. */
909 if (iter->skip) {
916 iter->skip--;
919 return __rhashtable_walk_find_next(iter);
925 * @iter: Hash table iterator
930 void rhashtable_walk_stop(struct rhashtable_iter *iter)
934 struct bucket_table *tbl = iter->walker.tbl;
939 ht = iter->ht;
944 iter->walker.tbl = NULL;
946 list_add(&iter->walker.list, &tbl->walkers);