12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #pragma once
- #include <common/glib.h>
- #include "VFS.h"
- struct mountpoint
- {
- struct List mnt_list;
- struct vfs_dir_entry_t *dentry;
- struct vfs_dir_entry_t *parent_dentry;
- };
- int mount_init();
- int do_mount(struct vfs_dir_entry_t *old_dentry, struct vfs_dir_entry_t *new_dentry);
- int do_umount(struct vfs_dir_entry_t *dentry);
- #define D_MOUNTED(x) ((x)->d_flags & VFS_DF_MOUNTED)
- static inline void dont_mount(struct vfs_dir_entry_t *dentry)
- {
-
- dentry->d_flags |= VFS_DF_CANNOT_MOUNT;
- }
- static inline void detach_mounts(struct vfs_dir_entry_t *dentry)
- {
- if (!D_MOUNTED(dentry))
- return; // 如果当前文件夹不是一个挂载点,则直接返回
- // todo:如果当前文件夹是一个挂载点,则对同样挂载在当前文件夹下的dentry进行清理。以免造成内存泄露
- // 可参考 linux5.17或以上的detach_mounts()函数
- }
- /**
- * @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);
- /**
- * @brief 释放挂载点结构体
- *
- * @param mp mountpoint结构体
- * @return int 错误码
- */
- int mount_release_mountpoint(struct mountpoint* mp);
|