Simplify `fill_zeros_remote` and others
This commit is contained in:
parent
eb76ded5fc
commit
d18b1dc624
|
|
@ -2,9 +2,7 @@
|
|||
|
||||
use align_ext::AlignExt;
|
||||
use ostd::{
|
||||
mm::{
|
||||
HasSize, PAGE_SIZE, PageFlags, UFrame, io_util::HasVmReaderWriter, vm_space::VmQueriedItem,
|
||||
},
|
||||
mm::{PAGE_SIZE, PageFlags, UFrame, io_util::HasVmReaderWriter, vm_space::VmQueriedItem},
|
||||
task::disable_preempt,
|
||||
};
|
||||
|
||||
|
|
@ -76,14 +74,11 @@ impl Vmar {
|
|||
) -> core::result::Result<usize, (Error, usize)> {
|
||||
let mut remain = len;
|
||||
let write = |frame: UFrame, skip_offset: usize| {
|
||||
let frame_size = frame.size();
|
||||
let mut writer = frame.writer().to_fallible();
|
||||
let mut writer = frame.writer();
|
||||
writer.skip(skip_offset);
|
||||
let to_write = remain.min(frame_size - skip_offset);
|
||||
let res = writer.fill_zeros(to_write);
|
||||
let (Ok(n) | Err((_, n))) = &res;
|
||||
remain -= *n;
|
||||
res
|
||||
let res = writer.fill_zeros(remain);
|
||||
remain -= res;
|
||||
Ok(res)
|
||||
};
|
||||
|
||||
self.access_remote(vaddr, len, PageFlags::W, write)
|
||||
|
|
|
|||
|
|
@ -157,17 +157,13 @@ impl VmarInner {
|
|||
return Ok(());
|
||||
};
|
||||
|
||||
let rlimt_as = process
|
||||
let rlimit_as = process
|
||||
.resource_limits()
|
||||
.get_rlimit(ResourceType::RLIMIT_AS)
|
||||
.get_cur();
|
||||
|
||||
let new_total_vm = self
|
||||
.total_vm
|
||||
.checked_add(expand_size)
|
||||
.ok_or(Errno::ENOMEM)?;
|
||||
if new_total_vm > rlimt_as as usize {
|
||||
return_errno_with_message!(Errno::ENOMEM, "address space limit overflow");
|
||||
if rlimit_as.saturating_sub(self.total_vm as u64) < expand_size as u64 {
|
||||
return_errno_with_message!(Errno::ENOMEM, "the address space size limit is reached");
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue