Commit d53a480f authored by Kirill Smelkov's avatar Kirill Smelkov

bigfile/virtmem: Factor-out checking whether `page->fpgoffset` is in file-range covered by `vma`

-> into vma_page_infilerange().

We will soon need to use this functionality from several places.
parent 516f4625
...@@ -44,6 +44,7 @@ static void page_del(Page *page); ...@@ -44,6 +44,7 @@ static void page_del(Page *page);
static void *vma_page_addr(VMA *vma, Page *page); static void *vma_page_addr(VMA *vma, Page *page);
static pgoff_t vma_addr_fpgoffset(VMA *vma, uintptr_t addr); static pgoff_t vma_addr_fpgoffset(VMA *vma, uintptr_t addr);
static void vma_mmap_page(VMA *vma, Page *page); static void vma_mmap_page(VMA *vma, Page *page);
static int vma_page_infilerange(VMA *vma, Page *page);
static int vma_page_ismapped(VMA *vma, Page *page); static int vma_page_ismapped(VMA *vma, Page *page);
static void vma_page_ensure_unmapped(VMA *vma, Page *page); static void vma_page_ensure_unmapped(VMA *vma, Page *page);
static void vma_page_ensure_notmappedrw(VMA *vma, Page *page); static void vma_page_ensure_notmappedrw(VMA *vma, Page *page);
...@@ -950,15 +951,23 @@ static void vma_mmap_page(VMA *vma, Page *page) { ...@@ -950,15 +951,23 @@ static void vma_mmap_page(VMA *vma, Page *page) {
} }
} }
/* is `page` mapped to `vma` */ /* is `page->fpgoffset` in file-range covered by `vma` */
static int vma_page_ismapped(VMA *vma, Page *page) static int vma_page_infilerange(VMA *vma, Page *page)
{ {
pgoff_t vma_fpgstop; pgoff_t vma_fpgstop;
ASSERT(vma->fileh == page->fileh); ASSERT(vma->fileh == page->fileh);
vma_fpgstop = vma_addr_fpgoffset(vma, vma->addr_stop); vma_fpgstop = vma_addr_fpgoffset(vma, vma->addr_stop);
if (!(vma->f_pgoffset <= page->f_pgoffset && return (vma->f_pgoffset <= page->f_pgoffset &&
page->f_pgoffset < vma_fpgstop)) page->f_pgoffset < vma_fpgstop);
}
/* is `page` mapped to `vma` */
static int vma_page_ismapped(VMA *vma, Page *page)
{
ASSERT(vma->fileh == page->fileh);
if (!vma_page_infilerange(vma, page))
return 0; return 0;
return bitmap_test_bit(vma->page_ismappedv, page->f_pgoffset - vma->f_pgoffset); return bitmap_test_bit(vma->page_ismappedv, page->f_pgoffset - vma->f_pgoffset);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment