Lines Matching defs:iter

655  * @iter:	Hash table Iterator
673 void rhashtable_walk_enter(struct rhashtable *ht, struct rhashtable_iter *iter)
675 iter->ht = ht;
676 iter->p = NULL;
677 iter->slot = 0;
678 iter->skip = 0;
679 iter->end_of_table = 0;
682 iter->walker.tbl =
684 list_add(&iter->walker.list, &iter->walker.tbl->walkers);
691 * @iter: Hash table Iterator
695 void rhashtable_walk_exit(struct rhashtable_iter *iter)
697 spin_lock(&iter->ht->lock);
698 if (iter->walker.tbl)
699 list_del(&iter->walker.list);
700 spin_unlock(&iter->ht->lock);
706 * @iter: Hash table iterator
722 int rhashtable_walk_start_check(struct rhashtable_iter *iter)
725 struct rhashtable *ht = iter->ht;
731 if (iter->walker.tbl)
732 list_del(&iter->walker.list);
735 if (iter->end_of_table)
737 if (!iter->walker.tbl) {
738 iter->walker.tbl = rht_dereference_rcu(ht->tbl, ht);
739 iter->slot = 0;
740 iter->skip = 0;
744 if (iter->p && !rhlist) {
751 rht_for_each_rcu(p, iter->walker.tbl, iter->slot) {
753 if (p == iter->p) {
754 iter->skip = skip;
758 iter->p = NULL;
759 } else if (iter->p && rhlist) {
766 rht_for_each_rcu(p, iter->walker.tbl, iter->slot) {
771 if (list == iter->list) {
772 iter->p = p;
773 iter->skip = skip;
778 iter->p = NULL;
789 * @iter: Hash table iterator
795 static void *__rhashtable_walk_find_next(struct rhashtable_iter *iter)
797 struct bucket_table *tbl = iter->walker.tbl;
798 struct rhlist_head *list = iter->list;
799 struct rhashtable *ht = iter->ht;
800 struct rhash_head *p = iter->p;
806 for (; iter->slot < tbl->size; iter->slot++) {
807 int skip = iter->skip;
809 rht_for_each_rcu(p, tbl, iter->slot) {
829 iter->skip++;
830 iter->p = p;
831 iter->list = list;
835 iter->skip = 0;
838 iter->p = NULL;
843 iter->walker.tbl = rht_dereference_rcu(tbl->future_tbl, ht);
844 if (iter->walker.tbl) {
845 iter->slot = 0;
846 iter->skip = 0;
849 iter->end_of_table = true;
857 * @iter: Hash table iterator
867 void *rhashtable_walk_next(struct rhashtable_iter *iter)
869 struct rhlist_head *list = iter->list;
870 struct rhashtable *ht = iter->ht;
871 struct rhash_head *p = iter->p;
880 iter->skip++;
881 iter->p = p;
882 iter->list = list;
889 iter->skip = 0;
890 iter->slot++;
893 return __rhashtable_walk_find_next(iter);
899 * @iter: Hash table iterator
906 void *rhashtable_walk_peek(struct rhashtable_iter *iter)
908 struct rhlist_head *list = iter->list;
909 struct rhashtable *ht = iter->ht;
910 struct rhash_head *p = iter->p;
915 /* No object found in current iter, find next one in the table. */
917 if (iter->skip) {
924 iter->skip--;
927 return __rhashtable_walk_find_next(iter);
933 * @iter: Hash table iterator
938 void rhashtable_walk_stop(struct rhashtable_iter *iter)
942 struct bucket_table *tbl = iter->walker.tbl;
947 ht = iter->ht;
952 iter->walker.tbl = NULL;
954 list_add(&iter->walker.list, &tbl->walkers);