feat(filesystem): 引入Umount系统调用 (#719)

* feat(filesystem): 引入Umount系统调用

* 将所有ENOSYS误用更正

* 修复了一个使同一个挂载点可以挂载2个文件系统的bug

* 统一注释,增强程序稳定性,统一接口。注意:Umount时在fatfs的路径要使用大写,此受限于当前文件系统设计。
This commit is contained in:
Samuel Dai
2024-04-15 13:02:04 +08:00
committed by GitHub
parent ceeb2e943c
commit 1074eb34e7
46 changed files with 1274 additions and 463 deletions

View File

@ -205,11 +205,11 @@ impl AttrAcpiTable {
impl Attribute for AttrAcpiTable {
fn show(&self, _kobj: Arc<dyn KObject>, _buf: &mut [u8]) -> Result<usize, SystemError> {
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
return Err(SystemError::ENOSYS);
}
fn store(&self, _kobj: Arc<dyn KObject>, _buf: &[u8]) -> Result<usize, SystemError> {
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
return Err(SystemError::ENOSYS);
}
fn name(&self) -> &str {
@ -235,7 +235,7 @@ impl BinAttribute for AttrAcpiTable {
_buf: &[u8],
_offset: usize,
) -> Result<usize, SystemError> {
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
return Err(SystemError::ENOSYS);
}
/// 展示 ACPI 表的内容

View File

@ -134,9 +134,9 @@ pub trait Bus: Debug + Send + Sync {
///
/// ## 默认实现
///
/// 如果总线不支持该操作,返回`SystemError::EOPNOTSUPP_OR_ENOTSUP`
/// 如果总线不支持该操作,返回`SystemError::ENOSYS`
fn probe(&self, _device: &Arc<dyn Device>) -> Result<(), SystemError> {
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
return Err(SystemError::ENOSYS);
}
fn remove(&self, _device: &Arc<dyn Device>) -> Result<(), SystemError>;
fn sync_state(&self, _device: &Arc<dyn Device>) {}
@ -750,7 +750,7 @@ impl Attribute for DriverAttrUnbind {
"Intertrait casting not implemented for kobj: {}",
kobj.name()
);
SystemError::EOPNOTSUPP_OR_ENOTSUP
SystemError::ENOSYS
})?;
let bus = driver
@ -799,7 +799,7 @@ impl Attribute for DriverAttrBind {
"Intertrait casting not implemented for kobj: {}",
kobj.name()
);
SystemError::EOPNOTSUPP_OR_ENOTSUP
SystemError::ENOSYS
})?;
let bus = driver

View File

@ -502,7 +502,7 @@ impl DriverManager {
.and_then(|bus| bus.upgrade())
.ok_or(SystemError::EINVAL)?;
let r = bus.probe(device);
if r == Err(SystemError::EOPNOTSUPP_OR_ENOTSUP) {
if r == Err(SystemError::ENOSYS) {
kerror!(
"call_driver_probe: bus.probe() failed, dev: '{}', err: {:?}",
device.name(),
@ -592,7 +592,7 @@ impl Attribute for DeviceAttrStateSynced {
"Intertrait casting not implemented for kobj: {}",
kobj.name()
);
SystemError::EOPNOTSUPP_OR_ENOTSUP
SystemError::ENOSYS
})?;
let val = dev.state_synced();
@ -627,7 +627,7 @@ impl Attribute for DeviceAttrCoredump {
"Intertrait casting not implemented for kobj: {}",
kobj.name()
);
SystemError::EOPNOTSUPP_OR_ENOTSUP
SystemError::ENOSYS
})?;
let drv = dev.driver().ok_or(SystemError::EINVAL)?;

View File

@ -875,7 +875,7 @@ impl Attribute for DeviceAttrDev {
"Intertrait casting not implemented for kobj: {}",
kobj.name()
);
SystemError::EOPNOTSUPP_OR_ENOTSUP
SystemError::ENOSYS
})?;
let device_number = dev.id_table().device_number();

View File

@ -146,7 +146,7 @@ impl SysFSOps for KObjectSysFSOps {
buf: &mut [u8],
) -> Result<usize, SystemError> {
let r = attr.show(kobj, buf).map_err(|e| {
if e == SystemError::EOPNOTSUPP_OR_ENOTSUP {
if e == SystemError::ENOSYS {
SystemError::EIO
} else {
e
@ -163,7 +163,7 @@ impl SysFSOps for KObjectSysFSOps {
buf: &[u8],
) -> Result<usize, SystemError> {
let r = attr.store(kobj, buf).map_err(|e| {
if e == SystemError::EOPNOTSUPP_OR_ENOTSUP {
if e == SystemError::ENOSYS {
SystemError::EIO
} else {
e

View File

@ -201,7 +201,7 @@ pub trait SubSysInterface: Debug + Send + Sync {
fn bus(&self) -> Option<Weak<dyn Bus>>;
fn set_bus(&self, bus: Option<Weak<dyn Bus>>);
fn add_device(&self, _device: &Arc<dyn Device>) -> Result<(), SystemError> {
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
return Err(SystemError::ENOSYS);
}
fn remove_device(&self, device: &Arc<dyn Device>);
}

View File

@ -82,11 +82,11 @@ impl IndexNode for LockedAhciInode {
_data: SpinLockGuard<FilePrivateData>,
_mode: &FileMode,
) -> Result<(), SystemError> {
Err(SystemError::EOPNOTSUPP_OR_ENOTSUP)
Err(SystemError::ENOSYS)
}
fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> {
Err(SystemError::EOPNOTSUPP_OR_ENOTSUP)
Err(SystemError::ENOSYS)
}
fn metadata(&self) -> Result<Metadata, SystemError> {
@ -98,7 +98,7 @@ impl IndexNode for LockedAhciInode {
}
fn list(&self) -> Result<Vec<String>, SystemError> {
Err(SystemError::EOPNOTSUPP_OR_ENOTSUP)
Err(SystemError::ENOSYS)
}
fn set_metadata(&self, metadata: &Metadata) -> Result<(), SystemError> {

View File

@ -30,8 +30,8 @@ use crate::{
devfs::{devfs_register, DevFS, DeviceINode},
kernfs::KernFSInode,
vfs::{
core::generate_inode_id, syscall::ModeType, FilePrivateData, FileSystem, FileType,
IndexNode, Metadata,
core::generate_inode_id, syscall::ModeType, utils::DName, FilePrivateData, FileSystem,
FileType, IndexNode, Metadata,
},
},
libs::{
@ -627,7 +627,7 @@ impl IndexNode for Ps2MouseDevice {
_buf: &[u8],
_data: SpinLockGuard<FilePrivateData>,
) -> Result<usize, SystemError> {
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
return Err(SystemError::ENOSYS);
}
fn fs(&self) -> Arc<dyn FileSystem> {
@ -655,6 +655,10 @@ impl IndexNode for Ps2MouseDevice {
fn resize(&self, _len: usize) -> Result<(), SystemError> {
Ok(())
}
fn dname(&self) -> Result<DName, SystemError> {
Ok(DName::from(self.name()))
}
}
impl Ps2Device for Ps2MouseDevice {}

View File

@ -171,7 +171,7 @@ impl IndexNode for LockedPS2KeyBoardInode {
}
fn list(&self) -> Result<alloc::vec::Vec<alloc::string::String>, SystemError> {
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP);
return Err(SystemError::ENOSYS);
}
}