Lines Matching refs:persistent_gnt
202 struct persistent_gnt *persistent_gnt) in add_persistent_gnt() argument
205 struct persistent_gnt *this; in add_persistent_gnt()
215 this = container_of(*new, struct persistent_gnt, node); in add_persistent_gnt()
218 if (persistent_gnt->gnt < this->gnt) in add_persistent_gnt()
220 else if (persistent_gnt->gnt > this->gnt) in add_persistent_gnt()
228 bitmap_zero(persistent_gnt->flags, PERSISTENT_GNT_FLAGS_SIZE); in add_persistent_gnt()
229 set_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags); in add_persistent_gnt()
231 rb_link_node(&(persistent_gnt->node), parent, new); in add_persistent_gnt()
232 rb_insert_color(&(persistent_gnt->node), &blkif->persistent_gnts); in add_persistent_gnt()
238 static struct persistent_gnt *get_persistent_gnt(struct xen_blkif *blkif, in get_persistent_gnt()
241 struct persistent_gnt *data; in get_persistent_gnt()
246 data = container_of(node, struct persistent_gnt, node); in get_persistent_gnt()
266 struct persistent_gnt *persistent_gnt) in put_persistent_gnt() argument
268 if(!test_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags)) in put_persistent_gnt()
270 set_bit(PERSISTENT_GNT_WAS_ACTIVE, persistent_gnt->flags); in put_persistent_gnt()
271 clear_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags); in put_persistent_gnt()
280 struct persistent_gnt *persistent_gnt; in free_persistent_gnts() local
289 foreach_grant_safe(persistent_gnt, n, root, node) { in free_persistent_gnts()
290 BUG_ON(persistent_gnt->handle == in free_persistent_gnts()
294 persistent_gnt->page)), in free_persistent_gnts()
296 persistent_gnt->handle); in free_persistent_gnts()
298 pages[segs_to_unmap] = persistent_gnt->page; in free_persistent_gnts()
301 !rb_next(&persistent_gnt->node)) { in free_persistent_gnts()
310 rb_erase(&persistent_gnt->node, root); in free_persistent_gnts()
311 kfree(persistent_gnt); in free_persistent_gnts()
321 struct persistent_gnt *persistent_gnt; in xen_blkbk_unmap_purged_grants() local
331 persistent_gnt = list_first_entry(&blkif->persistent_purge_list, in xen_blkbk_unmap_purged_grants()
332 struct persistent_gnt, in xen_blkbk_unmap_purged_grants()
334 list_del(&persistent_gnt->remove_node); in xen_blkbk_unmap_purged_grants()
337 vaddr(persistent_gnt->page), in xen_blkbk_unmap_purged_grants()
339 persistent_gnt->handle); in xen_blkbk_unmap_purged_grants()
341 pages[segs_to_unmap] = persistent_gnt->page; in xen_blkbk_unmap_purged_grants()
349 kfree(persistent_gnt); in xen_blkbk_unmap_purged_grants()
360 struct persistent_gnt *persistent_gnt; in purge_persistent_gnt() local
400 foreach_grant_safe(persistent_gnt, n, root, node) { in purge_persistent_gnt()
401 BUG_ON(persistent_gnt->handle == in purge_persistent_gnt()
405 clear_bit(PERSISTENT_GNT_WAS_ACTIVE, persistent_gnt->flags); in purge_persistent_gnt()
409 if (test_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags)) in purge_persistent_gnt()
412 (test_bit(PERSISTENT_GNT_WAS_ACTIVE, persistent_gnt->flags))) in purge_persistent_gnt()
415 rb_erase(&persistent_gnt->node, root); in purge_persistent_gnt()
416 list_add(&persistent_gnt->remove_node, in purge_persistent_gnt()
685 if (pages[i]->persistent_gnt != NULL) { in xen_blkbk_unmap_prepare()
686 put_persistent_gnt(blkif, pages[i]->persistent_gnt); in xen_blkbk_unmap_prepare()
790 struct persistent_gnt *persistent_gnt = NULL; in xen_blkbk_map() local
810 persistent_gnt = get_persistent_gnt( in xen_blkbk_map()
814 if (persistent_gnt) { in xen_blkbk_map()
819 pages[i]->page = persistent_gnt->page; in xen_blkbk_map()
820 pages[i]->persistent_gnt = persistent_gnt; in xen_blkbk_map()
826 pages[i]->persistent_gnt = NULL; in xen_blkbk_map()
850 if (!pages[seg_idx]->persistent_gnt) { in xen_blkbk_map()
870 persistent_gnt = kmalloc(sizeof(struct persistent_gnt), in xen_blkbk_map()
872 if (!persistent_gnt) { in xen_blkbk_map()
880 persistent_gnt->gnt = map[new_map_idx].ref; in xen_blkbk_map()
881 persistent_gnt->handle = map[new_map_idx].handle; in xen_blkbk_map()
882 persistent_gnt->page = pages[seg_idx]->page; in xen_blkbk_map()
884 persistent_gnt)) { in xen_blkbk_map()
885 kfree(persistent_gnt); in xen_blkbk_map()
886 persistent_gnt = NULL; in xen_blkbk_map()
889 pages[seg_idx]->persistent_gnt = persistent_gnt; in xen_blkbk_map()
891 persistent_gnt->gnt, blkif->persistent_gnt_c, in xen_blkbk_map()