feat: Implment std_fs_call kfstatvfs handling to memory scheme
This commit is contained in:
committed by
Jeremy Soller
parent
507d899587
commit
4faa1bad45
Generated
+2
-2
@@ -201,9 +201,9 @@ checksum = "64072665120942deff5fd5425d6c1811b854f4939e7f1c01ce755f64432bbea7"
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6d94dd2f7cd932d4dc02cc8b2b50dfd38bd079a4e5d79198b99743d7fcf9a4b4"
|
||||
checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16"
|
||||
dependencies = [
|
||||
"bitflags 2.10.0",
|
||||
]
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ bitflags = "2"
|
||||
hashbrown = { version = "0.14.3", default-features = false, features = ["ahash", "inline-more"] }
|
||||
linked_list_allocator = "0.9.0"
|
||||
redox-path = "0.2.0"
|
||||
redox_syscall = { version = "0.7.2", default-features = false }
|
||||
redox_syscall = { version = "0.7.3", default-features = false }
|
||||
rmm = { path = "rmm", default-features = false }
|
||||
slab = { version = "0.4", default-features = false }
|
||||
spin = { version = "0.9.8" }
|
||||
|
||||
+30
-2
@@ -5,7 +5,7 @@ use rmm::PhysicalAddress;
|
||||
|
||||
use crate::{
|
||||
context::{
|
||||
file::InternalFlags,
|
||||
file::{FileDescription, InternalFlags},
|
||||
memory::{handle_notify_files, AddrSpace, AddrSpaceWrapper, Grant, PageSpan},
|
||||
},
|
||||
memory::{free_frames, used_frames, Frame, PAGE_SIZE},
|
||||
@@ -19,7 +19,7 @@ use crate::paging::entry::EntryFlags;
|
||||
use crate::syscall::{
|
||||
data::{Map, StatVfs},
|
||||
error::*,
|
||||
flag::MapFlags,
|
||||
flag::{CallFlags, MapFlags},
|
||||
usercopy::UserSliceWo,
|
||||
};
|
||||
|
||||
@@ -335,4 +335,32 @@ impl KernelScheme for MemoryScheme {
|
||||
|
||||
Ok(())
|
||||
}
|
||||
fn kstdfscall(
|
||||
&self,
|
||||
id: usize,
|
||||
_desc: Arc<spin::RwLock<FileDescription>>,
|
||||
payload: UserSliceRw,
|
||||
_flags: CallFlags,
|
||||
metadata: &[u64],
|
||||
token: &mut CleanLockToken,
|
||||
) -> Result<usize> {
|
||||
use syscall::flag::StdFsCallKind::{self, *};
|
||||
let Some(raw_kind) = metadata.first().map(|v| *v as u8) else {
|
||||
return Err(Error::new(EOPNOTSUPP));
|
||||
};
|
||||
let Some(kind) = StdFsCallKind::try_from_raw(raw_kind) else {
|
||||
return Err(Error::new(EOPNOTSUPP));
|
||||
};
|
||||
|
||||
match kind {
|
||||
Fstatvfs => {
|
||||
if payload.len() != core::mem::size_of::<StatVfs>() {
|
||||
return Err(Error::new(EINVAL));
|
||||
}
|
||||
self.kfstatvfs(id, UserSliceWo::new(payload.addr(), payload.len())?, token)
|
||||
.map(|_| 0)
|
||||
}
|
||||
_ => Err(Error::new(EOPNOTSUPP)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user