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;
259 foreach_grant_safe(persistent_gnt, n, root, node) {
260 BUG_ON(persistent_gnt->handle ==
264 persistent_gnt->page)),
266 persistent_gnt->handle);
268 pages[segs_to_unmap] = persistent_gnt->page;
271 !rb_next(&persistent_gnt->node)) {
281 rb_erase(&persistent_gnt->node, root);
282 kfree(persistent_gnt);
294 struct persistent_gnt *persistent_gnt;
304 persistent_gnt = list_first_entry(&ring->persistent_purge_list,
305 struct persistent_gnt,
307 list_del(&persistent_gnt->remove_node);
310 vaddr(persistent_gnt->page),
312 persistent_gnt->handle);
314 pages[segs_to_unmap] = persistent_gnt->page;
323 kfree(persistent_gnt);
334 struct persistent_gnt *persistent_gnt;
371 foreach_grant_safe(persistent_gnt, n, root, node) {
372 BUG_ON(persistent_gnt->handle ==
375 if (persistent_gnt->active)
377 if (!scan_used && !persistent_gnt_timeout(persistent_gnt))
382 rb_erase(&persistent_gnt->node, root);
383 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;