Commit 8a00147e authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent 4bca517a
......@@ -474,7 +474,6 @@ void fileh_dirty_discard(BigFileH *fileh)
pagemap_del(&fileh->pagemap, page->f_pgoffset);
page_drop_memory(page);
page_del(page);
// XXX wcfs: remmap page(s) to base file
}
BUG_ON(!list_empty(&fileh->dirty_pages));
......@@ -1063,9 +1062,19 @@ static void vma_page_ensure_unmapped(VMA *vma, Page *page)
if (!vma_page_ismapped(vma, page))
return;
/* mmap empty PROT_NONE address space instead of page memory */
// XXX overlay: remmap to base image
mem_xvalloc(vma_page_addr(vma, page), page_size(page));
if (vma->mmap_overlay) {
/* wcfs: remmap readonly to base image */
BigFile *file = vma->fileh->file;
int err;
TODO (file->blksize != page_size(page));
err = file->file_ops->remmap_blk_read(file, page->f_pgoffset /* =blk */, vma);
BUG_ON(err); /* must not fail */
}
else {
/* !wcfs: mmap empty PROT_NONE address space instead of page memory */
mem_xvalloc(vma_page_addr(vma, page), page_size(page));
}
bitmap_clear_bit(vma->page_ismappedv, page->f_pgoffset - vma->f_pgoffset);
page_decref(page);
......
......@@ -72,6 +72,11 @@ struct bigfile_ops {
int (*storeblk) (BigFile *file, blk_t blk, const void *buf);
// - mmap_setup_read(file[blk +blklen), vma) setup initial read-only mmap to serve vma
// - remmap_blk_read(file[blk], vma) remmap blk into vma again, after e.g.
// RW dirty page was discarded
// - munmap(vma) before VMA is unmapped
/* mmap_setup_read is called to setup new read-only mapping of file[blk +blklen).
*
* The mapping will be used as the base read-only layer for vma.
......@@ -82,12 +87,14 @@ struct bigfile_ops {
* @addr NULL - mmap at anywhere, !NULL - mmap exactly at addr.
* @return !NULL - mapped there, NULL - error.
*/
// void* (*mmap_read) (BigFile *file, void *addr, blk_t blk, size_t blklen);
void* (*mmap_setup_read) (BigFile *file, blk_t blk, size_t blklen, VMA *vma);
// - mmap_setup_read(vma) setup initial read-only mmap
// - mresync(vma, was_dirtyv) forget RW dirty pages -> mmap them back read-only to file data
// - munmap(vma) before VMA is unmapped
// XXX
// XXX error -> bug (must not fail)
int (*remmap_blk_read) (BigFile *file, blk_t, VMA *vma);
/* release is called to release resources associated with file.
......
......@@ -30,7 +30,7 @@
* - need to "unload" non-dirty pages to free place for requested new data (reclaim)
*
* - need to be able to map a page into several places (to support
* overlapping-in-file mappings done not neccessarily adjacent-in-time to
* overlapping-in-file mappings done not necessarily adjacent-in-time to
* each other - there is no guarantee mapping them adjacent in address space
* is possible)
*
......
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