+ size_t mapped_len = vmr->flen;
+
+ // TODO Potentially we can get different order of leaflet here
+ struct leaflet* region_part = alloc_leaflet(0);
+
+ pte = region_tweakpte(vmr, pte);
+ ptep_map_leaflet(fault->fault_ptep, pte, region_part);
+
+ if (mseg_off < mapped_len) {
+ mapped_len = MIN(mapped_len - mseg_off, PAGE_SIZE);
+ }
+ else {
+ mapped_len = 0;
+ }
+
+ if (mapped_len == PAGE_SIZE) {
+ errno = fops->read_page(file->inode, (void*)fault_va, mfile_off);
+ }
+ else {
+ leaflet_wipe(region_part);
+
+ if (mapped_len) {
+ errno = fops->read(file->inode,
+ (void*)fault_va, mapped_len, mfile_off);
+ }
+ }