Extract dentry.rs and mount.rs to path module, rename Dentry and DentryMnt and check usage of pub.

Signed-off-by: Zhenchen Wang <m202372036@hust.edu.cn>
This commit is contained in:
Zhenchen Wang
2024-05-15 15:06:32 +08:00
committed by Tate, Hongliang Tian
parent 8d18a12385
commit 8bcadee540
38 changed files with 395 additions and 387 deletions

View File

@ -1,6 +1,6 @@
// SPDX-License-Identifier: MPL-2.0
use crate::{fs::utils::DentryMnt, net::socket::util::socket_addr::SocketAddr, prelude::*};
use crate::{fs::path::Dentry, net::socket::util::socket_addr::SocketAddr, prelude::*};
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum UnixSocketAddr {
@ -10,7 +10,7 @@ pub enum UnixSocketAddr {
#[derive(Clone)]
pub(super) enum UnixSocketAddrBound {
Path(Arc<DentryMnt>),
Path(Arc<Dentry>),
Abstract(String),
}
@ -38,8 +38,8 @@ impl TryFrom<SocketAddr> for UnixSocketAddr {
impl From<UnixSocketAddrBound> for UnixSocketAddr {
fn from(value: UnixSocketAddrBound) -> Self {
match value {
UnixSocketAddrBound::Path(dentrymnt) => {
let abs_path = dentrymnt.abs_path();
UnixSocketAddrBound::Path(dentry) => {
let abs_path = dentry.abs_path();
Self::Path(abs_path)
}
UnixSocketAddrBound::Abstract(name) => Self::Abstract(name),

View File

@ -7,7 +7,8 @@ use crate::{
events::IoEvents,
fs::{
fs_resolver::{split_path, FsPath},
utils::{DentryMnt, InodeMode, InodeType},
path::Dentry,
utils::{InodeMode, InodeType},
},
net::socket::unix::addr::{UnixSocketAddr, UnixSocketAddrBound},
prelude::*,
@ -38,8 +39,8 @@ impl Init {
let bound_addr = match addr_to_bind {
UnixSocketAddr::Abstract(_) => todo!(),
UnixSocketAddr::Path(path) => {
let dentrymnt = create_socket_file(path)?;
UnixSocketAddrBound::Path(dentrymnt)
let dentry = create_socket_file(path)?;
UnixSocketAddrBound::Path(dentry)
}
};
@ -87,7 +88,7 @@ impl Init {
}
}
fn create_socket_file(path: &str) -> Result<Arc<DentryMnt>> {
fn create_socket_file(path: &str) -> Result<Arc<Dentry>> {
let (parent_pathname, file_name) = split_path(path);
let parent = {
let current = current!();
@ -95,10 +96,10 @@ fn create_socket_file(path: &str) -> Result<Arc<DentryMnt>> {
let parent_path = FsPath::try_from(parent_pathname)?;
fs.lookup(&parent_path)?
};
let dentrymnt = parent.new_fs_child(
let dentry = parent.new_fs_child(
file_name,
InodeType::Socket,
InodeMode::S_IRUSR | InodeMode::S_IWUSR,
)?;
Ok(dentrymnt)
Ok(dentry)
}

View File

@ -7,10 +7,7 @@ use keyable_arc::KeyableWeak;
use super::{connected::Connected, endpoint::Endpoint, UnixStreamSocket};
use crate::{
events::IoEvents,
fs::{
file_handle::FileLike,
utils::{DentryMnt, Inode},
},
fs::{file_handle::FileLike, path::Dentry, utils::Inode},
net::socket::{
unix::addr::{UnixSocketAddr, UnixSocketAddrBound},
SocketAddr,
@ -91,10 +88,10 @@ impl BacklogTable {
fn add_backlog(&self, addr: &UnixSocketAddrBound, backlog: usize) -> Result<()> {
let inode = {
let UnixSocketAddrBound::Path(dentrymnt) = addr else {
let UnixSocketAddrBound::Path(dentry) = addr else {
todo!()
};
create_keyable_inode(dentrymnt)
create_keyable_inode(dentry)
};
let mut backlog_sockets = self.backlog_sockets.write();
@ -108,10 +105,10 @@ impl BacklogTable {
fn get_backlog(&self, addr: &UnixSocketAddrBound) -> Result<Arc<Backlog>> {
let inode = {
let UnixSocketAddrBound::Path(dentrymnt) = addr else {
let UnixSocketAddrBound::Path(dentry) = addr else {
todo!()
};
create_keyable_inode(dentrymnt)
create_keyable_inode(dentry)
};
let backlog_sockets = self.backlog_sockets.read();
@ -162,11 +159,11 @@ impl BacklogTable {
}
fn remove_backlog(&self, addr: &UnixSocketAddrBound) {
let UnixSocketAddrBound::Path(dentrymnt) = addr else {
let UnixSocketAddrBound::Path(dentry) = addr else {
todo!()
};
let inode = create_keyable_inode(dentrymnt);
let inode = create_keyable_inode(dentry);
self.backlog_sockets.write().remove(&inode);
}
}
@ -212,8 +209,8 @@ impl Backlog {
}
}
fn create_keyable_inode(dentrymnt: &Arc<DentryMnt>) -> KeyableWeak<dyn Inode> {
let weak_inode = Arc::downgrade(dentrymnt.inode());
fn create_keyable_inode(dentry: &Arc<Dentry>) -> KeyableWeak<dyn Inode> {
let weak_inode = Arc::downgrade(dentry.inode());
KeyableWeak::from(weak_inode)
}

View File

@ -11,7 +11,8 @@ use crate::{
fs::{
file_handle::FileLike,
fs_resolver::FsPath,
utils::{DentryMnt, InodeType, StatusFlags},
path::Dentry,
utils::{InodeType, StatusFlags},
},
net::socket::{
unix::{addr::UnixSocketAddrBound, UnixSocketAddr},
@ -162,8 +163,8 @@ impl Socket for UnixStreamSocket {
UnixSocketAddrBound::Abstract(abstract_name)
}
UnixSocketAddr::Path(path) => {
let dentrymnt = lookup_socket_file(&path)?;
UnixSocketAddrBound::Path(dentrymnt)
let dentry = lookup_socket_file(&path)?;
UnixSocketAddrBound::Path(dentry)
}
}
};
@ -287,20 +288,20 @@ impl Drop for UnixStreamSocket {
}
}
fn lookup_socket_file(path: &str) -> Result<Arc<DentryMnt>> {
let dentrymnt = {
fn lookup_socket_file(path: &str) -> Result<Arc<Dentry>> {
let dentry = {
let current = current!();
let fs = current.fs().read();
let fs_path = FsPath::try_from(path)?;
fs.lookup(&fs_path)?
};
if dentrymnt.type_() != InodeType::Socket {
if dentry.type_() != InodeType::Socket {
return_errno_with_message!(Errno::ENOTSOCK, "not a socket file")
}
if !dentrymnt.mode()?.is_readable() || !dentrymnt.mode()?.is_writable() {
if !dentry.mode()?.is_readable() || !dentry.mode()?.is_writable() {
return_errno_with_message!(Errno::EACCES, "the socket cannot be read or written")
}
Ok(dentrymnt)
Ok(dentry)
}