+void
+vfs_init();
+
+void
+vfs_export_attributes();
+
+struct v_dnode*
+vfs_dcache_lookup(struct v_dnode* parent, struct hstr* str);
+
+void
+vfs_dcache_add(struct v_dnode* parent, struct v_dnode* dnode);
+
+void
+vfs_dcache_rehash(struct v_dnode* new_parent, struct v_dnode* dnode);
+
+void
+vfs_dcache_remove(struct v_dnode* dnode);
+
+int
+vfs_walk(struct v_dnode* start,
+ const char* path,
+ struct v_dnode** dentry,
+ struct hstr* component,
+ int walk_options);
+
+int
+vfs_walk_proc(const char* path,
+ struct v_dnode** dentry,
+ struct hstr* component,
+ int options);
+
+int
+vfs_mount(const char* target,
+ const char* fs_name,
+ struct device* device,
+ int options);
+
+int
+vfs_unmount(const char* target);
+
+int
+vfs_mount_at(const char* fs_name,
+ struct device* device,
+ struct v_dnode* mnt_point,
+ int options);
+
+int
+vfs_unmount_at(struct v_dnode* mnt_point);
+
+int
+vfs_mkdir(const char* path, struct v_dnode** dentry);
+
+int
+vfs_open(struct v_dnode* dnode, struct v_file** file);
+
+int
+vfs_pclose(struct v_file* file, pid_t pid);
+
+int
+vfs_close(struct v_file* file);
+
+void
+vfs_free_fd(struct v_fd* fd);
+
+int
+vfs_fsync(struct v_file* file);
+
+void
+vfs_assign_inode(struct v_dnode* assign_to, struct v_inode* inode);
+
+struct v_superblock*
+vfs_sb_alloc();
+
+void
+vfs_sb_free(struct v_superblock* sb);
+
+struct v_dnode*
+vfs_d_alloc();
+
+void
+vfs_d_free(struct v_dnode* dnode);
+
+struct v_inode*
+vfs_i_find(struct v_superblock* sb, u32_t i_id);
+
+void
+vfs_i_addhash(struct v_inode* inode);
+
+struct v_inode*
+vfs_i_alloc(struct v_superblock* sb);
+
+void
+vfs_i_free(struct v_inode* inode);
+
+int
+vfs_dup_fd(struct v_fd* old, struct v_fd** new);
+
+int
+vfs_getfd(int fd, struct v_fd** fd_s);
+
+int
+vfs_get_dtype(int itype);
+
+void
+vfs_ref_dnode(struct v_dnode* dnode);
+
+void
+vfs_ref_file(struct v_file* file);
+
+void
+vfs_unref_dnode(struct v_dnode* dnode);
+
+int
+vfs_get_path(struct v_dnode* dnode, char* buf, size_t size, int depth);
+
+void
+pcache_init(struct pcache* pcache);
+
+void
+pcache_release_page(struct pcache* pcache, struct pcache_pg* page);
+
+struct pcache_pg*
+pcache_new_page(struct pcache* pcache, u32_t index);
+
+void
+pcache_set_dirty(struct pcache* pcache, struct pcache_pg* pg);
+
+int
+pcache_get_page(struct pcache* pcache,
+ u32_t index,
+ u32_t* offset,
+ struct pcache_pg** page);
+
+int
+pcache_write(struct v_inode* inode, void* data, u32_t len, u32_t fpos);
+
+int
+pcache_read(struct v_inode* inode, void* data, u32_t len, u32_t fpos);
+
+void
+pcache_release(struct pcache* pcache);
+
+int
+pcache_commit(struct v_inode* inode, struct pcache_pg* page);
+
+void
+pcache_commit_all(struct v_inode* inode);
+
+void
+pcache_invalidate(struct pcache* pcache, struct pcache_pg* page);
+
+/**
+ * @brief 将挂载点标记为繁忙
+ *
+ * @param mnt
+ */
+void
+mnt_mkbusy(struct v_mount* mnt);
+
+/**
+ * @brief 将挂载点标记为清闲
+ *
+ * @param mnt
+ */
+void
+mnt_chillax(struct v_mount* mnt);
+
+int
+vfs_mount_root(const char* fs_name, struct device* device);
+
+struct v_mount*
+vfs_create_mount(struct v_mount* parent, struct v_dnode* mnt_point);
+
+int
+vfs_check_writable(struct v_dnode* dnode);
+
+int
+default_file_read(struct v_inode* inode, void* buffer, size_t len, size_t fpos);
+
+int
+default_file_write(struct v_inode* inode,
+ void* buffer,
+ size_t len,
+ size_t fpos);
+
+int
+default_file_readdir(struct v_file* file, struct dir_context* dctx);
+
+int
+default_inode_dirlookup(struct v_inode* this, struct v_dnode* dnode);
+
+int
+default_inode_rename(struct v_inode* from_inode,
+ struct v_dnode* from_dnode,
+ struct v_dnode* to_dnode);
+
+int
+default_file_close(struct v_file* file);
+
+int
+default_file_seek(struct v_inode* inode, size_t offset);
+
+int
+default_inode_open(struct v_inode* this, struct v_file* file);
+
+int
+default_inode_rmdir(struct v_inode* this, struct v_dnode* dir);
+
+int
+default_inode_mkdir(struct v_inode* this, struct v_dnode* dir);
+
+struct v_xattr_entry*
+xattr_new(struct hstr* name);
+
+struct v_xattr_entry*
+xattr_getcache(struct v_inode* inode, struct hstr* name);
+
+void
+xattr_addcache(struct v_inode* inode, struct v_xattr_entry* xattr);
+