Lines Matching defs:persistent_gnt

135 static inline bool persistent_gnt_timeout(struct persistent_gnt *persistent_gnt)
137 return pgrant_timeout && (jiffies - persistent_gnt->last_used >=
169 struct persistent_gnt *persistent_gnt)
172 struct persistent_gnt *this;
183 this = container_of(*new, struct persistent_gnt, node);
186 if (persistent_gnt->gnt < this->gnt)
188 else if (persistent_gnt->gnt > this->gnt)
196 persistent_gnt->active = true;
198 rb_link_node(&(persistent_gnt->node), parent, new);
199 rb_insert_color(&(persistent_gnt->node), &ring->persistent_gnts);
205 static struct persistent_gnt *get_persistent_gnt(struct xen_blkif_ring *ring,
208 struct persistent_gnt *data;
213 data = container_of(node, struct persistent_gnt, node);
233 struct persistent_gnt *persistent_gnt)
235 if (!persistent_gnt->active)
237 persistent_gnt->last_used = jiffies;
238 persistent_gnt->active = false;
247 struct persistent_gnt *persistent_gnt;
256 foreach_grant_safe(persistent_gnt, n, root, node) {
257 BUG_ON(persistent_gnt->handle ==
261 persistent_gnt->page)),
263 persistent_gnt->handle);
265 pages[segs_to_unmap] = persistent_gnt->page;
268 !rb_next(&persistent_gnt->node)) {
278 rb_erase(&persistent_gnt->node, root);
279 kfree(persistent_gnt);
289 struct persistent_gnt *persistent_gnt;
299 persistent_gnt = list_first_entry(&ring->persistent_purge_list,
300 struct persistent_gnt,
302 list_del(&persistent_gnt->remove_node);
305 vaddr(persistent_gnt->page),
307 persistent_gnt->handle);
309 pages[segs_to_unmap] = persistent_gnt->page;
318 kfree(persistent_gnt);
329 struct persistent_gnt *persistent_gnt;
366 foreach_grant_safe(persistent_gnt, n, root, node) {
367 BUG_ON(persistent_gnt->handle ==
370 if (persistent_gnt->active)
372 if (!scan_used && !persistent_gnt_timeout(persistent_gnt))
377 rb_erase(&persistent_gnt->node, root);
378 list_add(&persistent_gnt->remove_node,
655 if (pages[i]->persistent_gnt != NULL) {
656 put_persistent_gnt(ring, pages[i]->persistent_gnt);
762 struct persistent_gnt *persistent_gnt = NULL;
783 persistent_gnt = get_persistent_gnt(
788 if (persistent_gnt) {
793 pages[i]->page = persistent_gnt->page;
794 pages[i]->persistent_gnt = persistent_gnt;
806 pages[i]->persistent_gnt = NULL;
828 if (!pages[seg_idx]->persistent_gnt) {
849 persistent_gnt = kmalloc(sizeof(struct persistent_gnt),
851 if (!persistent_gnt) {
854 * allocate the persistent_gnt struct
859 persistent_gnt->gnt = map[new_map_idx].ref;
860 persistent_gnt->handle = map[new_map_idx].handle;
861 persistent_gnt->page = pages[seg_idx]->page;
863 persistent_gnt)) {
864 kfree(persistent_gnt);
865 persistent_gnt = NULL;
868 pages[seg_idx]->persistent_gnt = persistent_gnt;
870 persistent_gnt->gnt, ring->persistent_gnt_c,
895 pages[i]->persistent_gnt = NULL;