Lines Matching defs:iter

651  * @iter:	Hash table Iterator
669 void rhashtable_walk_enter(struct rhashtable *ht, struct rhashtable_iter *iter)
671 iter->ht = ht;
672 iter->p = NULL;
673 iter->slot = 0;
674 iter->skip = 0;
675 iter->end_of_table = 0;
678 iter->walker.tbl =
680 list_add(&iter->walker.list, &iter->walker.tbl->walkers);
687 * @iter: Hash table Iterator
691 void rhashtable_walk_exit(struct rhashtable_iter *iter)
693 spin_lock(&iter->ht->lock);
694 if (iter->walker.tbl)
695 list_del(&iter->walker.list);
696 spin_unlock(&iter->ht->lock);
702 * @iter: Hash table iterator
718 int rhashtable_walk_start_check(struct rhashtable_iter *iter)
721 struct rhashtable *ht = iter->ht;
727 if (iter->walker.tbl)
728 list_del(&iter->walker.list);
731 if (iter->end_of_table)
733 if (!iter->walker.tbl) {
734 iter->walker.tbl = rht_dereference_rcu(ht->tbl, ht);
735 iter->slot = 0;
736 iter->skip = 0;
740 if (iter->p && !rhlist) {
747 rht_for_each_rcu(p, iter->walker.tbl, iter->slot) {
749 if (p == iter->p) {
750 iter->skip = skip;
754 iter->p = NULL;
755 } else if (iter->p && rhlist) {
762 rht_for_each_rcu(p, iter->walker.tbl, iter->slot) {
767 if (list == iter->list) {
768 iter->p = p;
769 iter->skip = skip;
774 iter->p = NULL;
785 * @iter: Hash table iterator
791 static void *__rhashtable_walk_find_next(struct rhashtable_iter *iter)
793 struct bucket_table *tbl = iter->walker.tbl;
794 struct rhlist_head *list = iter->list;
795 struct rhashtable *ht = iter->ht;
796 struct rhash_head *p = iter->p;
802 for (; iter->slot < tbl->size; iter->slot++) {
803 int skip = iter->skip;
805 rht_for_each_rcu(p, tbl, iter->slot) {
825 iter->skip++;
826 iter->p = p;
827 iter->list = list;
831 iter->skip = 0;
834 iter->p = NULL;
839 iter->walker.tbl = rht_dereference_rcu(tbl->future_tbl, ht);
840 if (iter->walker.tbl) {
841 iter->slot = 0;
842 iter->skip = 0;
845 iter->end_of_table = true;
853 * @iter: Hash table iterator
863 void *rhashtable_walk_next(struct rhashtable_iter *iter)
865 struct rhlist_head *list = iter->list;
866 struct rhashtable *ht = iter->ht;
867 struct rhash_head *p = iter->p;
876 iter->skip++;
877 iter->p = p;
878 iter->list = list;
885 iter->skip = 0;
886 iter->slot++;
889 return __rhashtable_walk_find_next(iter);
895 * @iter: Hash table iterator
902 void *rhashtable_walk_peek(struct rhashtable_iter *iter)
904 struct rhlist_head *list = iter->list;
905 struct rhashtable *ht = iter->ht;
906 struct rhash_head *p = iter->p;
911 /* No object found in current iter, find next one in the table. */
913 if (iter->skip) {
920 iter->skip--;
923 return __rhashtable_walk_find_next(iter);
929 * @iter: Hash table iterator
934 void rhashtable_walk_stop(struct rhashtable_iter *iter)
938 struct bucket_table *tbl = iter->walker.tbl;
943 ht = iter->ht;
948 iter->walker.tbl = NULL;
950 list_add(&iter->walker.list, &tbl->walkers);