Lines Matching refs:persistent_gnt

138 static inline bool persistent_gnt_timeout(struct persistent_gnt *persistent_gnt)  in persistent_gnt_timeout()  argument
141 (jiffies - persistent_gnt->last_used >= in persistent_gnt_timeout()
231 struct persistent_gnt *persistent_gnt) in add_persistent_gnt() argument
234 struct persistent_gnt *this; in add_persistent_gnt()
245 this = container_of(*new, struct persistent_gnt, node); in add_persistent_gnt()
248 if (persistent_gnt->gnt < this->gnt) in add_persistent_gnt()
250 else if (persistent_gnt->gnt > this->gnt) in add_persistent_gnt()
258 persistent_gnt->active = true; in add_persistent_gnt()
260 rb_link_node(&(persistent_gnt->node), parent, new); in add_persistent_gnt()
261 rb_insert_color(&(persistent_gnt->node), &ring->persistent_gnts); in add_persistent_gnt()
267 static struct persistent_gnt *get_persistent_gnt(struct xen_blkif_ring *ring, in get_persistent_gnt()
270 struct persistent_gnt *data; in get_persistent_gnt()
275 data = container_of(node, struct persistent_gnt, node); in get_persistent_gnt()
295 struct persistent_gnt *persistent_gnt) in put_persistent_gnt() argument
297 if (!persistent_gnt->active) in put_persistent_gnt()
299 persistent_gnt->last_used = jiffies; in put_persistent_gnt()
300 persistent_gnt->active = false; in put_persistent_gnt()
309 struct persistent_gnt *persistent_gnt; in free_persistent_gnts() local
318 foreach_grant_safe(persistent_gnt, n, root, node) { in free_persistent_gnts()
319 BUG_ON(persistent_gnt->handle == in free_persistent_gnts()
323 persistent_gnt->page)), in free_persistent_gnts()
325 persistent_gnt->handle); in free_persistent_gnts()
327 pages[segs_to_unmap] = persistent_gnt->page; in free_persistent_gnts()
330 !rb_next(&persistent_gnt->node)) { in free_persistent_gnts()
339 rb_erase(&persistent_gnt->node, root); in free_persistent_gnts()
340 kfree(persistent_gnt); in free_persistent_gnts()
350 struct persistent_gnt *persistent_gnt; in xen_blkbk_unmap_purged_grants() local
360 persistent_gnt = list_first_entry(&ring->persistent_purge_list, in xen_blkbk_unmap_purged_grants()
361 struct persistent_gnt, in xen_blkbk_unmap_purged_grants()
363 list_del(&persistent_gnt->remove_node); in xen_blkbk_unmap_purged_grants()
366 vaddr(persistent_gnt->page), in xen_blkbk_unmap_purged_grants()
368 persistent_gnt->handle); in xen_blkbk_unmap_purged_grants()
370 pages[segs_to_unmap] = persistent_gnt->page; in xen_blkbk_unmap_purged_grants()
378 kfree(persistent_gnt); in xen_blkbk_unmap_purged_grants()
389 struct persistent_gnt *persistent_gnt; in purge_persistent_gnt() local
427 foreach_grant_safe(persistent_gnt, n, root, node) { in purge_persistent_gnt()
428 BUG_ON(persistent_gnt->handle == in purge_persistent_gnt()
431 if (persistent_gnt->active) in purge_persistent_gnt()
433 if (!scan_used && !persistent_gnt_timeout(persistent_gnt)) in purge_persistent_gnt()
438 rb_erase(&persistent_gnt->node, root); in purge_persistent_gnt()
439 list_add(&persistent_gnt->remove_node, in purge_persistent_gnt()
704 if (pages[i]->persistent_gnt != NULL) { in xen_blkbk_unmap_prepare()
705 put_persistent_gnt(ring, pages[i]->persistent_gnt); in xen_blkbk_unmap_prepare()
810 struct persistent_gnt *persistent_gnt = NULL; in xen_blkbk_map() local
831 persistent_gnt = get_persistent_gnt( in xen_blkbk_map()
836 if (persistent_gnt) { in xen_blkbk_map()
841 pages[i]->page = persistent_gnt->page; in xen_blkbk_map()
842 pages[i]->persistent_gnt = persistent_gnt; in xen_blkbk_map()
848 pages[i]->persistent_gnt = NULL; in xen_blkbk_map()
872 if (!pages[seg_idx]->persistent_gnt) { in xen_blkbk_map()
892 persistent_gnt = kmalloc(sizeof(struct persistent_gnt), in xen_blkbk_map()
894 if (!persistent_gnt) { in xen_blkbk_map()
902 persistent_gnt->gnt = map[new_map_idx].ref; in xen_blkbk_map()
903 persistent_gnt->handle = map[new_map_idx].handle; in xen_blkbk_map()
904 persistent_gnt->page = pages[seg_idx]->page; in xen_blkbk_map()
906 persistent_gnt)) { in xen_blkbk_map()
907 kfree(persistent_gnt); in xen_blkbk_map()
908 persistent_gnt = NULL; in xen_blkbk_map()
911 pages[seg_idx]->persistent_gnt = persistent_gnt; in xen_blkbk_map()
913 persistent_gnt->gnt, ring->persistent_gnt_c, in xen_blkbk_map()