Lines Matching refs:ctor
37 static inline void z_erofs_pagevec_ctor_exit(struct z_erofs_pagevec_ctor *ctor,
40 if (!ctor->curr)
44 kunmap_atomic(ctor->pages);
46 kunmap(ctor->curr);
50 z_erofs_pagevec_ctor_next_page(struct z_erofs_pagevec_ctor *ctor,
56 if (ctor->next)
57 return ctor->next;
60 const erofs_vtptr_t t = ctor->pages[index];
66 DBG_BUGON(nr >= ctor->nr);
71 z_erofs_pagevec_ctor_pagedown(struct z_erofs_pagevec_ctor *ctor,
74 struct page *next = z_erofs_pagevec_ctor_next_page(ctor, ctor->nr);
76 z_erofs_pagevec_ctor_exit(ctor, atomic);
78 ctor->curr = next;
79 ctor->next = NULL;
80 ctor->pages = atomic ?
81 kmap_atomic(ctor->curr) : kmap(ctor->curr);
83 ctor->nr = PAGE_SIZE / sizeof(struct page *);
84 ctor->index = 0;
87 static inline void z_erofs_pagevec_ctor_init(struct z_erofs_pagevec_ctor *ctor,
92 ctor->nr = nr;
93 ctor->curr = ctor->next = NULL;
94 ctor->pages = pages;
98 z_erofs_pagevec_ctor_pagedown(ctor, false);
99 while (i > ctor->nr) {
100 i -= ctor->nr;
101 z_erofs_pagevec_ctor_pagedown(ctor, false);
104 ctor->next = z_erofs_pagevec_ctor_next_page(ctor, i);
105 ctor->index = i;
108 static inline bool z_erofs_pagevec_enqueue(struct z_erofs_pagevec_ctor *ctor,
113 if (!ctor->next) {
119 ctor->index + 1 == ctor->nr)
123 if (ctor->index >= ctor->nr)
124 z_erofs_pagevec_ctor_pagedown(ctor, false);
131 if (type == (uintptr_t)ctor->next) {
132 ctor->next = page;
134 ctor->pages[ctor->index++] = tagptr_fold(erofs_vtptr_t, page, type);
139 z_erofs_pagevec_dequeue(struct z_erofs_pagevec_ctor *ctor,
144 if (ctor->index >= ctor->nr) {
145 DBG_BUGON(!ctor->next);
146 z_erofs_pagevec_ctor_pagedown(ctor, true);
149 t = ctor->pages[ctor->index];
154 if (*type == (uintptr_t)ctor->next)
155 ctor->next = tagptr_unfold_ptr(t);
157 ctor->pages[ctor->index++] = tagptr_fold(erofs_vtptr_t, NULL, 0);