Fix mremap usage.

This commit is contained in:
4lDO2
2023-08-03 12:38:19 +02:00
parent 7f8a2e467e
commit 6234d76e8d
2 changed files with 3 additions and 19 deletions
+2 -18
View File
@@ -256,7 +256,7 @@ impl Fmap {
let aligned_size = unaligned_size.next_multiple_of(syscall::PAGE_SIZE);
let address = base.add(offset as usize);
println!("ADDR {:p}", address);
//println!("ADDR {:p} {:p}", base, address);
// Read buffer from disk
let atime = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
@@ -460,25 +460,9 @@ impl<D: Disk> Resource<D> for FileResource {
} else {
let new_size = (offset as usize + aligned_size).next_multiple_of(PAGE_SIZE);
let old_size = max_offset as usize;
let common_size = std::cmp::min(new_size, old_size);
if new_size > old_size {
unsafe {
syscall::fmap(!0, &Map {
size: new_size - old_size,
flags: MapFlags::PROT_READ | MapFlags::PROT_WRITE | MapFlags::MAP_PRIVATE,
offset: old_size,
address: 0,
})?;
}
} else if old_size > new_size {
unsafe {
syscall::funmap(old_size, old_size - new_size)?;
}
}
fmap_info.base = unsafe {
syscall::syscall5(syscall::SYS_MREMAP, fmap_info.base as usize, common_size, 0, common_size, syscall::MremapFlags::empty().bits())? as *mut u8
syscall::syscall5(syscall::SYS_MREMAP, fmap_info.base as usize, old_size, 0, new_size, syscall::MremapFlags::empty().bits() | (PROT_READ | PROT_WRITE).bits())? as *mut u8
};
}
}
+1 -1
View File
@@ -792,7 +792,7 @@ impl<D: Disk> SchemeMut for FileScheme<D> {
}
fn munmap(&mut self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result<usize> {
println!("Munmap {}, {} {}", id, size, offset);
let file = self.files.get_mut(&id).ok_or(Error::new(EINVAL))?;
let file = self.files.get_mut(&id).ok_or(Error::new(EBADF))?;
let fmaps = &mut self.fmap;
self.fs.tx(|tx| file.funmap(fmaps, offset, size, tx))