git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix: memory leakage in file descriptor allocation
[lunaix-os.git]
/
lunaix-os
/
includes
/
lunaix
/
fs.h
diff --git
a/lunaix-os/includes/lunaix/fs.h
b/lunaix-os/includes/lunaix/fs.h
index 94c6e6bbd918d112bb3d1761a810e2d2ceb8b3e9..4f57e08c37a99ac5fe547cb11645cda9d54b088b 100644
(file)
--- a/
lunaix-os/includes/lunaix/fs.h
+++ b/
lunaix-os/includes/lunaix/fs.h
@@
-197,12
+197,13
@@
struct v_inode
uint32_t link_count;
uint32_t lb_usage;
uint32_t fsize;
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;
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;
};
struct v_inode_ops* ops;
struct v_file_ops* default_fops;
};
@@
-228,6
+229,7
@@
struct v_dnode
struct v_inode* inode;
struct v_dnode* parent;
struct hlist_node hash_list;
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;
struct llist_header children;
struct llist_header siblings;
struct v_superblock* super_block;
@@
-262,7
+264,7
@@
struct pcache_pg
uint32_t flags;
uint32_t fpos;
};
uint32_t flags;
uint32_t fpos;
};
-/* --- file system manager --- */
+
void
fsm_init();
void
fsm_init();
@@
-281,6
+283,9
@@
fsm_get(const char* fs_name);
void
vfs_init();
void
vfs_init();
+void
+vfs_export_attributes();
+
struct v_dnode*
vfs_dcache_lookup(struct v_dnode* parent, struct hstr* str);
struct v_dnode*
vfs_dcache_lookup(struct v_dnode* parent, struct hstr* str);
@@
-330,9
+335,15
@@
vfs_mkdir(const char* path, struct v_dnode** dentry);
int
vfs_open(struct v_dnode* dnode, struct v_file** file);
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);
int
vfs_close(struct v_file* file);
+void
+vfs_free_fd(struct v_fd* fd);
+
int
vfs_fsync(struct v_file* file);
int
vfs_fsync(struct v_file* file);
@@
-372,6
+383,15
@@
vfs_getfd(int fd, struct v_fd** fd_s);
int
vfs_get_dtype(int itype);
int
vfs_get_dtype(int itype);
+void
+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);
void
pcache_init(struct pcache* pcache);