Skip to content

Commit e1df053

Browse files
manojks1999fslongjin
authored andcommitted
refactor(filesystem): 移除已弃用的wrap方法并使用Arc::new_cyclic重构
- 删除MountFS和MountFSInode中已弃用的wrap方法 - 在KernelThreadCreateInfo::new中使用Arc::new_cyclic替代手动自引用设置 Signed-off-by: manojks1999 <9743manoj@gmail.com>
1 parent 8e775e6 commit e1df053

File tree

2 files changed

+4
-60
lines changed

2 files changed

+4
-60
lines changed

kernel/src/filesystem/vfs/mount.rs

Lines changed: 1 addition & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
use core::{
2-
any::Any,
3-
fmt::Debug,
4-
hash::Hash,
5-
sync::atomic::{compiler_fence, Ordering},
6-
};
1+
use core::{any::Any, fmt::Debug, hash::Hash};
72

83
use alloc::{
94
collections::BTreeMap,
@@ -363,26 +358,6 @@ impl MountFS {
363358
self.self_mountpoint.read().as_ref().cloned()
364359
}
365360

366-
/// @brief 用Arc指针包裹MountFS对象。
367-
/// 本函数的主要功能为,初始化MountFS对象中的自引用Weak指针
368-
/// 本函数只应在构造器中被调用
369-
#[allow(dead_code)]
370-
#[deprecated]
371-
fn wrap(self) -> Arc<Self> {
372-
// 创建Arc指针
373-
let mount_fs: Arc<MountFS> = Arc::new(self);
374-
// 创建weak指针
375-
let weak: Weak<MountFS> = Arc::downgrade(&mount_fs);
376-
377-
// 将Arc指针转为Raw指针并对其内部的self_ref字段赋值
378-
let ptr: *mut MountFS = mount_fs.as_ref() as *const Self as *mut Self;
379-
unsafe {
380-
(*ptr).self_ref = weak;
381-
// 返回初始化好的MountFS对象
382-
return mount_fs;
383-
}
384-
}
385-
386361
/// @brief 获取挂载点的文件系统的root inode
387362
pub fn mountpoint_root_inode(&self) -> Arc<MountFSInode> {
388363
return Arc::new_cyclic(|self_ref| MountFSInode {
@@ -432,29 +407,6 @@ impl Drop for MountFS {
432407
}
433408

434409
impl MountFSInode {
435-
/// @brief 用Arc指针包裹MountFSInode对象。
436-
/// 本函数的主要功能为,初始化MountFSInode对象中的自引用Weak指针
437-
/// 本函数只应在构造器中被调用
438-
#[allow(dead_code)]
439-
#[deprecated]
440-
fn wrap(self) -> Arc<Self> {
441-
// 创建Arc指针
442-
let inode: Arc<MountFSInode> = Arc::new(self);
443-
// 创建Weak指针
444-
let weak: Weak<MountFSInode> = Arc::downgrade(&inode);
445-
// 将Arc指针转为Raw指针并对其内部的self_ref字段赋值
446-
compiler_fence(Ordering::SeqCst);
447-
let ptr: *mut MountFSInode = inode.as_ref() as *const Self as *mut Self;
448-
compiler_fence(Ordering::SeqCst);
449-
unsafe {
450-
(*ptr).self_ref = weak;
451-
compiler_fence(Ordering::SeqCst);
452-
453-
// 返回初始化好的MountFSInode对象
454-
return inode;
455-
}
456-
}
457-
458410
/// @brief 判断当前inode是否为它所在的文件系统的root inode
459411
fn is_mountpoint_root(&self) -> Result<bool, SystemError> {
460412
return Ok(self.inner_inode.fs().root_inode().metadata()?.inode_id

kernel/src/process/kthread.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -150,23 +150,15 @@ pub enum KernelThreadCreateStatus {
150150
#[allow(dead_code)]
151151
impl KernelThreadCreateInfo {
152152
pub fn new(func: KernelThreadClosure, name: String) -> Arc<Self> {
153-
let result = Arc::new(Self {
153+
Arc::new_cyclic(|weak_self| Self {
154154
closure: SpinLock::new(Some(Box::new(func))),
155155
name,
156156
created: AtomicKernelThreadCreateStatus::new(KernelThreadCreateStatus::NotCreated),
157157
result_pcb: SpinLock::new(None),
158158
has_unsafe_arc_instance: AtomicBool::new(false),
159-
self_ref: Weak::new(),
159+
self_ref: weak_self.clone(),
160160
to_mark_sleep: AtomicBool::new(true),
161-
});
162-
let tmp = result.clone();
163-
unsafe {
164-
let tmp = Arc::into_raw(tmp) as *mut Self;
165-
(*tmp).self_ref = Arc::downgrade(&result);
166-
Arc::from_raw(tmp);
167-
}
168-
169-
return result;
161+
})
170162
}
171163

172164
/// 创建者调用这函数,等待创建完成后,获取创建结果

0 commit comments

Comments
 (0)