#include <lunaix/ds/hstr.h>
#include <lunaix/ds/llist.h>
#include <lunaix/ds/lru.h>
+#include <lunaix/ds/mutex.h>
#include <lunaix/status.h>
+#include <stdatomic.h>
#define VFS_NAME_MAXLEN 128
#define VFS_MAX_FD 32
struct v_dnode* dnode;
struct llist_header* f_list;
uint32_t f_pos;
- uint32_t ref_count;
+ atomic_ulong ref_count;
struct v_file_ops ops;
};
struct v_inode
{
+ mutex_t lock;
uint32_t itype;
time_t ctime;
time_t mtime;
void* data; // 允许底层FS绑定他的一些专有数据
struct
{
- int (*create)(struct v_inode* this);
+ int (*create)(struct v_inode* this, struct v_dnode* dnode);
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);
struct v_dnode
{
+ mutex_t lock; // sync the path walking
struct hstr name;
struct v_inode* inode;
struct v_dnode* parent;
struct llist_header children;
struct llist_header siblings;
struct v_superblock* super_block;
- uint32_t ref_count;
+ atomic_ulong ref_count;
struct
{
void (*destruct)(struct v_dnode* dnode);