X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/5fc669295655ec0eea7722aa4a48921dc6b700ec..90129c6876c9bac2e468ab82c8264352d1952b4d:/lunaix-os/includes/lunaix/fs.h diff --git a/lunaix-os/includes/lunaix/fs.h b/lunaix-os/includes/lunaix/fs.h index 0f8d0d5..7f05413 100644 --- a/lunaix-os/includes/lunaix/fs.h +++ b/lunaix-os/includes/lunaix/fs.h @@ -6,6 +6,7 @@ #include #include #include +#include #define VFS_NAME_MAXLEN 128 #define VFS_MAX_FD 32 @@ -14,33 +15,37 @@ #define VFS_INODE_TYPE_FILE 0x2 #define VFS_INODE_TYPE_DEVICE 0x4 -#define VFS_ETOOLONG -1 #define VFS_ENOFS -2 #define VFS_EBADMNT -3 -#define VFS_ENODIR -4 + #define VFS_EENDOFDIR -5 -#define VFS_ENOTFOUND -6 -#define VFS_ENOOPS -7 + #define VFS_EINVLD -8 #define VFS_EEOF -9 #define VFS_WALK_MKPARENT 0x1 #define VFS_WALK_FSRELATIVE 0x2 -#define VFS_WALK_MKDIR 0x4 +#define VFS_WALK_PARENT 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); }; @@ -66,6 +71,7 @@ struct dir_context void* cb_data; void (*read_complete_callback)(struct dir_context* dctx, const char* name, + const int len, const int dtype); }; @@ -83,6 +89,7 @@ struct v_file_ops struct v_file { struct v_inode* inode; + struct v_dnode* dnode; struct llist_header* f_list; uint32_t f_pos; void* data; // 允许底层FS绑定他的一些专有数据 @@ -103,9 +110,11 @@ struct v_inode uint64_t lb_addr; uint32_t ref_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); @@ -143,6 +152,9 @@ fsm_register(struct filesystem* fs); struct filesystem* fsm_get(const char* fs_name); +void +vfs_init(); + struct v_dnode* vfs_dcache_lookup(struct v_dnode* parent, struct hstr* str); @@ -153,18 +165,23 @@ int vfs_walk(struct v_dnode* start, const char* path, struct v_dnode** dentry, + struct hstr* component, int walk_options); int -vfs_mount(const char* fs_name, bdev_t device, struct v_dnode* mnt_point); +vfs_mount(const char* target, const char* fs_name, bdev_t device); + +int +vfs_unmount(const char* target); + +int +vfs_mount_at(const char* fs_name, bdev_t device, struct v_dnode* mnt_point); int -vfs_unmount(struct v_dnode* mnt_point); +vfs_unmount_at(struct v_dnode* mnt_point); int -vfs_mkdir(const char* parent_path, - const char* component, - struct v_dnode** dentry); +vfs_mkdir(const char* path, struct v_dnode** dentry); int vfs_open(struct v_dnode* dnode, struct v_file** file);