feat: (iso9660) directory read support
[lunaix-os.git] / lunaix-os / includes / lunaix / fs.h
index 2fee2f235f47d67d038e470f10b90600063653cf..cc850ade16011f1f88708ef4518ef274cbafd7f1 100644 (file)
@@ -97,6 +97,7 @@ struct v_superblock
     struct filesystem* fs;
     uint32_t iobuf_size;
     struct hbucket* i_cache;
+    void* data;
     struct
     {
         uint32_t (*read_capacity)(struct v_superblock* vsb);
@@ -197,12 +198,13 @@ struct v_inode
     uint32_t link_count;
     uint32_t lb_usage;
     uint32_t fsize;
+    void* data; // 允许底层FS绑定他的一些专有数据
+    struct llist_header aka_dnodes;
     struct llist_header xattrs;
     struct v_superblock* sb;
     struct hlist_node hash_list;
     struct lru_node lru;
     struct pcache* pg_cache;
-    void* data; // 允许底层FS绑定他的一些专有数据
     struct v_inode_ops* ops;
     struct v_file_ops* default_fops;
 };
@@ -228,6 +230,7 @@ struct v_dnode
     struct v_inode* inode;
     struct v_dnode* parent;
     struct hlist_node hash_list;
+    struct llist_header aka_list;
     struct llist_header children;
     struct llist_header siblings;
     struct v_superblock* super_block;
@@ -262,7 +265,7 @@ struct pcache_pg
     uint32_t flags;
     uint32_t fpos;
 };
-/* --- file system manager --- */
+
 void
 fsm_init();
 
@@ -281,6 +284,9 @@ fsm_get(const char* fs_name);
 void
 vfs_init();
 
+void
+vfs_export_attributes();
+
 struct v_dnode*
 vfs_dcache_lookup(struct v_dnode* parent, struct hstr* str);
 
@@ -330,9 +336,15 @@ 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);
 
@@ -378,6 +390,9 @@ vfs_ref_dnode(struct v_dnode* dnode);
 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);