36#define VNODE_HASH_BUCKETS 128
53 PRINT_ERR(
"Create mutex for vnode hash list fail, status: %d", ret);
62 PRINTK(
"-------->VnodeHashDump in\n");
66 struct Vnode *node = NULL;
69 PRINTK(
" vnode dump: col %d item %p\n", i, node);
73 PRINTK(
"-------->VnodeHashDump out\n");
91 struct Vnode *curVnode = NULL;
93 if (mount == NULL || vnode == NULL) {
99 LOS_DL_LIST_FOR_EACH_ENTRY(curVnode, list,
struct Vnode,
hashEntry) {
106 if (fn != NULL && fn(curVnode, arg)) {
LITE_OS_SEC_ALW_INLINE STATIC INLINE VOID LOS_ListInit(LOS_DL_LIST *list)
LITE_OS_SEC_ALW_INLINE STATIC INLINE VOID LOS_ListHeadInsert(LOS_DL_LIST *list, LOS_DL_LIST *node)
Insert a node to the head of a doubly linked list.
LITE_OS_SEC_ALW_INLINE STATIC INLINE VOID LOS_ListDelete(LOS_DL_LIST *node)
LITE_OS_SEC_TEXT UINT32 LOS_MuxInit(LosMux *mutex, const LosMuxAttr *attr)
初始化互斥锁
LITE_OS_SEC_TEXT UINT32 LOS_MuxUnlock(LosMux *mutex)
释放锁
LITE_OS_SEC_TEXT UINT32 LOS_MuxLock(LosMux *mutex, UINT32 timeout)
拿互斥锁,
举例: mount /dev/mmcblk0p0 /bin1/vs/sd vfat 将/dev/mmcblk0p0 挂载到/bin1/vs/sd目录
vnode并不包含文件名,因为 vnode和文件名是 1:N 的关系
struct Mount * originMount
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 void
int VfsHashCmp(struct Vnode *vnode, void *arg)
static LOS_DL_LIST * VfsHashBucket(const struct Mount *mp, uint32_t hash)
通过哈希值和装载设备哈希种子获取哈希表索引
int VfsHashInsert(struct Vnode *vnode, uint32_t hash)
插入哈希表
int VfsHashGet(const struct Mount *mount, uint32_t hash, struct Vnode **vnode, VfsHashCmp *fn, void *arg)
通过哈希值获取节点信息
void VnodeHashDump(void)
打印全部 hash 表
LIST_HEAD g_vnodeHashEntrys[VNODE_HASH_BUCKETS]
uint32_t VfsHashIndex(struct Vnode *vnode)
通过节点获取哈希索引值
void VfsHashRemove(struct Vnode *vnode)
从哈希链表中摘除索引节点
static LosMux g_vnodeHashMux