#define VFS_INODE_TYPE_DIR 0x1
#define VFS_INODE_TYPE_FILE 0x2
#define VFS_INODE_TYPE_DEVICE 0x4
+#define VFS_INODE_TYPE_SYMLINK 0x8
#define VFS_ENOFS -2
#define VFS_EBADMNT -3
#define VFS_WALK_MKPARENT 0x1
#define VFS_WALK_FSRELATIVE 0x2
#define VFS_WALK_PARENT 0x4
+#define VFS_WALK_NOFOLLOW 0x4
#define VFS_IOBUF_FDIRTY 0x1
+#define FSTYPE_ROFS 0x1
+
#define VFS_VALID_CHAR(chr) \
('A' <= (chr) && (chr) <= 'Z' || 'a' <= (chr) && (chr) <= 'z' || \
'0' <= (chr) && (chr) <= '9' || (chr) == '.' || (chr) == '_' || \
(chr) == '-')
+extern struct hstr vfs_ddot;
+extern struct hstr vfs_dot;
+
struct v_dnode;
struct filesystem
{
struct hlist_node fs_list;
struct hstr fs_name;
+ uint32_t types;
int (*mount)(struct v_superblock* vsb, struct v_dnode* mount_point);
int (*unmount)(struct v_superblock* vsb);
};
struct v_file
{
struct v_inode* inode;
+ struct v_dnode* dnode;
struct llist_header* f_list;
uint32_t f_pos;
void* data; // 允许底层FS绑定他的一些专有数据
{
struct v_file* file;
int pos;
+ int flags;
};
struct v_inode
uint32_t ctime;
uint32_t mtime;
uint64_t lb_addr;
- uint32_t ref_count;
+ uint32_t open_count;
+ uint32_t link_count;
uint32_t lb_usage;
uint32_t fsize;
void* data; // 允许底层FS绑定他的一些专有数据
struct
{
- int (*create)(struct v_inode* inode, struct v_file* file);
- int (*open)(struct v_inode* inode, struct v_file* file);
- int (*sync)(struct v_inode* inode);
- int (*mkdir)(struct v_inode* inode, struct v_dnode* dnode);
- int (*dir_lookup)(struct v_inode* inode, struct v_dnode* dnode);
+ int (*create)(struct v_inode* this, struct v_file* file);
+ int (*open)(struct v_inode* this, struct v_file* file);
+ int (*sync)(struct v_inode* this);
+ int (*mkdir)(struct v_inode* this, struct v_dnode* dnode);
+ int (*rmdir)(struct v_inode* this);
+ int (*unlink)(struct v_inode* this);
+ int (*link)(struct v_inode* this, struct v_dnode* new_name);
+ int (*read_symlink)(struct v_inode* this, const char** path_out);
+ int (*symlink)(struct v_inode* this, const char* target);
+ int (*dir_lookup)(struct v_inode* this, struct v_dnode* dnode);
} ops;
};