Lines Matching refs:page
49 static struct page *brd_lookup_page(struct brd_device *brd, sector_t sector) in brd_lookup_page()
51 struct page *page; in brd_lookup_page() local
56 page = xas_load(&xas); in brd_lookup_page()
57 if (xas_retry(&xas, page)) { in brd_lookup_page()
62 if (!page) in brd_lookup_page()
65 if (!get_page_unless_zero(page)) { in brd_lookup_page()
70 if (unlikely(page != xas_reload(&xas))) { in brd_lookup_page()
71 put_page(page); in brd_lookup_page()
78 return page; in brd_lookup_page()
85 static struct page *brd_insert_page(struct brd_device *brd, sector_t sector, in brd_insert_page()
89 struct page *page, *ret; in brd_insert_page() local
91 page = alloc_page(gfp | __GFP_ZERO | __GFP_HIGHMEM); in brd_insert_page()
92 if (!page) in brd_insert_page()
97 page, gfp); in brd_insert_page()
100 get_page(page); in brd_insert_page()
102 return page; in brd_insert_page()
108 put_page(page); in brd_insert_page()
113 put_page(page); in brd_insert_page()
123 struct page *page; in brd_free_pages() local
126 xa_for_each(&brd->brd_pages, idx, page) { in brd_free_pages()
127 put_page(page); in brd_free_pages()
144 struct page *page; in brd_rw_bvec() local
149 page = brd_lookup_page(brd, sector); in brd_rw_bvec()
150 if (!page && op_is_write(opf)) { in brd_rw_bvec()
151 page = brd_insert_page(brd, sector, opf); in brd_rw_bvec()
152 if (IS_ERR(page)) in brd_rw_bvec()
158 memcpy_to_page(page, offset, kaddr, bv.bv_len); in brd_rw_bvec()
160 if (page) in brd_rw_bvec()
161 memcpy_from_page(kaddr, page, offset, bv.bv_len); in brd_rw_bvec()
168 if (page) in brd_rw_bvec()
169 put_page(page); in brd_rw_bvec()
173 if (PTR_ERR(page) == -ENOMEM && (opf & REQ_NOWAIT)) in brd_rw_bvec()
185 struct page *page; in brd_do_discard() local
192 page = __xa_erase(&brd->brd_pages, aligned_sector >> PAGE_SECTORS_SHIFT); in brd_do_discard()
193 if (page) { in brd_do_discard()
194 put_page(page); in brd_do_discard()