new: rootfs

This commit is contained in:
fslongjin
2022-09-14 23:48:19 +08:00
parent c80f572db7
commit 72f9c430c5
12 changed files with 322 additions and 43 deletions

View File

@ -30,12 +30,12 @@ int do_mount(struct vfs_dir_entry_t *old_dentry, struct vfs_dir_entry_t *new_den
mp->dentry = old_dentry;
mp->parent_dentry = old_dentry->parent;
// kdebug("&new_dentry->name=%#018lx, &old_dentry->name=%#018lx", &new_dentry->name, &old_dentry->name);
// 拷贝名称
strncpy(new_dentry->name, old_dentry->name, old_dentry->name_length);
kdebug("new_dentry->name=%s, old_dentry->name=%s, old_dentry->name_length=%d", new_dentry->name, old_dentry->name, old_dentry->name_length);
new_dentry->d_flags |= VFS_DF_MOUNTED; // 标记新的dentry是一个挂载点
list_init(&new_dentry->child_node_list);
list_init(&new_dentry->subdirs_list);
new_dentry->parent = old_dentry->parent;
@ -60,4 +60,40 @@ int do_umount(struct vfs_dir_entry_t *dentry)
// todo: 实现umount主要是结点的恢复问题
return 0;
}
/**
* @brief 根据mountpoint的父目录dentry查找第一个符合条件的mountpoint结构体
*
* @param dentry 父dentry
* @return struct mountpoint* 第一个符合条件的mountpoint结构体的指针
*/
struct mountpoint *mount_find_mnt_list_by_parent(struct vfs_dir_entry_t *dentry)
{
struct List *list = &mnt_list_head;
struct mountpoint *ret = NULL;
if (list_empty(list))
return NULL;
while (list_next(list) != &mnt_list_head)
{
list = list_next(list);
struct mountpoint *tmp = container_of(list, struct mountpoint, mnt_list);
if (dentry == tmp->parent_dentry)
return tmp;
}
return NULL;
}
/**
* @brief 将挂载点结构体从链表中删除并释放
*
* @param mp mountpoint结构体
* @return int 错误码
*/
int mount_release_mountpoint(struct mountpoint *mp)
{
list_del(&mp->mnt_list);
return kfree(mp);
}