Lines Matching refs:persistent_gnt
192 struct persistent_gnt *persistent_gnt) in add_persistent_gnt() argument
195 struct persistent_gnt *this; in add_persistent_gnt()
205 this = container_of(*new, struct persistent_gnt, node); in add_persistent_gnt()
208 if (persistent_gnt->gnt < this->gnt) in add_persistent_gnt()
210 else if (persistent_gnt->gnt > this->gnt) in add_persistent_gnt()
218 bitmap_zero(persistent_gnt->flags, PERSISTENT_GNT_FLAGS_SIZE); in add_persistent_gnt()
219 set_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags); in add_persistent_gnt()
221 rb_link_node(&(persistent_gnt->node), parent, new); in add_persistent_gnt()
222 rb_insert_color(&(persistent_gnt->node), &blkif->persistent_gnts); in add_persistent_gnt()
228 static struct persistent_gnt *get_persistent_gnt(struct xen_blkif *blkif, in get_persistent_gnt()
231 struct persistent_gnt *data; in get_persistent_gnt()
236 data = container_of(node, struct persistent_gnt, node); in get_persistent_gnt()
256 struct persistent_gnt *persistent_gnt) in put_persistent_gnt() argument
258 if(!test_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags)) in put_persistent_gnt()
260 set_bit(PERSISTENT_GNT_WAS_ACTIVE, persistent_gnt->flags); in put_persistent_gnt()
261 clear_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags); in put_persistent_gnt()
270 struct persistent_gnt *persistent_gnt; in free_persistent_gnts() local
275 foreach_grant_safe(persistent_gnt, n, root, node) { in free_persistent_gnts()
276 BUG_ON(persistent_gnt->handle == in free_persistent_gnts()
280 persistent_gnt->page)), in free_persistent_gnts()
282 persistent_gnt->handle); in free_persistent_gnts()
284 pages[segs_to_unmap] = persistent_gnt->page; in free_persistent_gnts()
287 !rb_next(&persistent_gnt->node)) { in free_persistent_gnts()
295 rb_erase(&persistent_gnt->node, root); in free_persistent_gnts()
296 kfree(persistent_gnt); in free_persistent_gnts()
306 struct persistent_gnt *persistent_gnt; in xen_blkbk_unmap_purged_grants() local
311 persistent_gnt = list_first_entry(&blkif->persistent_purge_list, in xen_blkbk_unmap_purged_grants()
312 struct persistent_gnt, in xen_blkbk_unmap_purged_grants()
314 list_del(&persistent_gnt->remove_node); in xen_blkbk_unmap_purged_grants()
317 vaddr(persistent_gnt->page), in xen_blkbk_unmap_purged_grants()
319 persistent_gnt->handle); in xen_blkbk_unmap_purged_grants()
321 pages[segs_to_unmap] = persistent_gnt->page; in xen_blkbk_unmap_purged_grants()
330 kfree(persistent_gnt); in xen_blkbk_unmap_purged_grants()
341 struct persistent_gnt *persistent_gnt; in purge_persistent_gnt() local
381 foreach_grant_safe(persistent_gnt, n, root, node) { in purge_persistent_gnt()
382 BUG_ON(persistent_gnt->handle == in purge_persistent_gnt()
386 clear_bit(PERSISTENT_GNT_WAS_ACTIVE, persistent_gnt->flags); in purge_persistent_gnt()
390 if (test_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags)) in purge_persistent_gnt()
393 (test_bit(PERSISTENT_GNT_WAS_ACTIVE, persistent_gnt->flags))) in purge_persistent_gnt()
396 rb_erase(&persistent_gnt->node, root); in purge_persistent_gnt()
397 list_add(&persistent_gnt->remove_node, in purge_persistent_gnt()
670 if (pages[i]->persistent_gnt != NULL) { in xen_blkbk_unmap()
671 put_persistent_gnt(blkif, pages[i]->persistent_gnt); in xen_blkbk_unmap()
701 struct persistent_gnt *persistent_gnt = NULL; in xen_blkbk_map() local
721 persistent_gnt = get_persistent_gnt( in xen_blkbk_map()
725 if (persistent_gnt) { in xen_blkbk_map()
730 pages[i]->page = persistent_gnt->page; in xen_blkbk_map()
731 pages[i]->persistent_gnt = persistent_gnt; in xen_blkbk_map()
737 pages[i]->persistent_gnt = NULL; in xen_blkbk_map()
761 if (!pages[seg_idx]->persistent_gnt) { in xen_blkbk_map()
781 persistent_gnt = kmalloc(sizeof(struct persistent_gnt), in xen_blkbk_map()
783 if (!persistent_gnt) { in xen_blkbk_map()
791 persistent_gnt->gnt = map[new_map_idx].ref; in xen_blkbk_map()
792 persistent_gnt->handle = map[new_map_idx].handle; in xen_blkbk_map()
793 persistent_gnt->page = pages[seg_idx]->page; in xen_blkbk_map()
795 persistent_gnt)) { in xen_blkbk_map()
796 kfree(persistent_gnt); in xen_blkbk_map()
797 persistent_gnt = NULL; in xen_blkbk_map()
800 pages[seg_idx]->persistent_gnt = persistent_gnt; in xen_blkbk_map()
802 persistent_gnt->gnt, blkif->persistent_gnt_c, in xen_blkbk_map()