更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
vnode.h
浏览该文件的文档.
1/*
2 * Copyright (c) 2021-2021 Huawei Device Co., Ltd. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without modification,
5 * are permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright notice, this list of
8 * conditions and the following disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
11 * of conditions and the following disclaimer in the documentation and/or other materials
12 * provided with the distribution.
13 *
14 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
15 * to endorse or promote products derived from this software without specific prior written
16 * permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#ifndef _VNODE_H_
32#define _VNODE_H_
33
34#include <sys/stat.h>
35#include "fs/fs_operation.h"
36#include "fs/file.h"
37#include "los_list.h"
38
41
42#define VNODE_FLAG_MOUNT_NEW (1 << 0) /* new mount vnode*/
43#define VNODE_FLAG_MOUNT_ORIGIN (1 << 1) /* origin vnode */
44
45#define V_CREATE (1 << 0)
46#define V_DUMMY (1 << 2)
47
48#ifndef VFS_ERROR
49#define VFS_ERROR -1
50#endif
51
52#ifndef OK
53#define OK 0
54#endif
55
56#define AT_REMOVEDIR 0x200
57
58#define DEV_PATH_LEN 5
59
60/* Permission flags */
61#define READ_OP 4
62#define WRITE_OP 2
63#define EXEC_OP 1
64#define UGO_NUMS 3
65#define MODE_IXUGO 0111
66#define USER_MODE_SHIFT 6
67#define GROUP_MODE_SHIFT 3
68#define UMASK_FULL 0777
69
70/* Attribute flags. */
71#define CHG_MODE 1
72#define CHG_UID 2
73#define CHG_GID 4
74#define CHG_SIZE 8
75#define CHG_ATIME 16
76#define CHG_MTIME 32
77#define CHG_CTIME 64
78/**
79 * @brief 此结构用于记录 vnode 的属性
80 */
81struct IATTR {
82 /* This structure is used for record vnode attr. */
83 unsigned int attr_chg_valid; ///< 节点改变有效性 (CHG_MODE | CHG_UID | ... )
84 unsigned int attr_chg_flags; ///< 额外的系统与用户标志(flag),用来保护该文件
85 unsigned attr_chg_mode; ///< 确定了文件的类型,以及它的所有者、它的group、其它用户访问此文件的权限 (S_IWUSR | ...)
86 unsigned attr_chg_uid; ///< 用户ID
87 unsigned attr_chg_gid; ///< 组ID
88 unsigned attr_chg_size; ///< 节点大小
89 unsigned attr_chg_atime; ///< 节点最近访问时间
90 unsigned attr_chg_mtime; ///< 节点对应的文件内容被修改时间
91 unsigned attr_chg_ctime; ///<节点自身被修改时间
92};
93
94/**
95 * @brief
96 * @verbatim
97Linux系统使用struct inode作为数据结构名称。BSD派生的系统,使用vnode名称,其中v表示“virtual file system”
98Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。
99
100硬连接
101 硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,
102 称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),
103 则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,
104 A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
105 硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,
106 因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,
107 文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
108 # ln 源文件 目标文件
109
110软连接
111 另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。
112 它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
113 比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,
114 A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。
115 A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。
116 # ln -s 源文文件或目录 目标文件或目录
117
118软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。
119
120inode的特殊作用
121由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
122  1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
123  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
124  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
125第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。
126更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,
127旧版文件的inode则被回收。
128 @endverbatim
129 */
130
131 /*!
132 * Vnode types. VNODE_TYPE_UNKNOWN means no type. | 节点类型
133 */
135 VNODE_TYPE_UNKNOWN, /*! unknown type | 未知类型*/
136 VNODE_TYPE_REG, /*! regular file | 正则文件(普通文件)*/
137 VNODE_TYPE_DIR, /*! directory | 目录*/
138 VNODE_TYPE_BLK, /*! block device | 块设备*/
139 VNODE_TYPE_CHR, /*! char device | 字符设备*/
140 VNODE_TYPE_BCHR, /*! block char mix device | 块和字符设备混合*/
141 VNODE_TYPE_FIFO, /*! pipe | 管道文件*/
142 VNODE_TYPE_LNK, /*! link | 链接,这里的链接指的是上层硬链接概念*/
143};
144
145struct fs_dirent_s;
146struct VnodeOps;
147struct IATTR;
148
149/*!
150* @brief vnode并不包含文件名,因为 vnode和文件名是 1:N 的关系
151 @verbatim
152linux下有多种权限控制的机制,常见的有:DAC(Discretionary Access Control)自主式权限控制和MAC(Mandatory Access Control)强制访问控制。
153linux 下使用 inode 中文意思是索引节点(index node),从概念层面鸿蒙 Vnode是对标 inode
154这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,
155 等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。
156 所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录)
157
158由于 vnode 是对所有设备的一个抽象,因此不同类型的设备,他们的操作方法也不一样,
159因此 vop ,fop 都是接口, data 因设备不同而不同.
160
161如果底层是磁盘存储,Inode结构会保存到磁盘。当需要时从磁盘读取到内存中进行缓存。
162 @endverbatim
163*/
164struct Vnode {
165 enum VnodeType type; /* vnode type | 节点类型 (文件|目录|链接...)*/
166 int useCount; /* ref count of users | 节点引用(链接)数,即有多少文件名指向这个vnode,即上层理解的硬链接数*/
167 uint32_t hash; /* vnode hash | 节点哈希值*/
168 uint uid; /* uid for dac | 文件拥有者的User ID*/
169 uint gid; /* gid for dac | 文件的Group ID*/
170 mode_t mode; /* mode for dac | chmod 文件的读、写、执行权限*/
171 LIST_HEAD parentPathCaches; /* pathCaches point to parents | 指向父级路径缓存,上面的都是当了爸爸节点*/
172 LIST_HEAD childPathCaches; /* pathCaches point to children | 指向子级路径缓存,上面都是当了别人儿子的节点*/
173 struct Vnode *parent; /* parent vnode | 父节点*/
174 struct VnodeOps *vop; /* vnode operations | 相当于指定操作Vnode方式 (接口实现|驱动程序)*/
175 struct file_operations_vfs *fop; /* file operations | 相当于指定文件系统*/
176 void *data; /* private data | 文件数据block的位置,指向每种具体设备私有的成员,例如 ( drv_data | nfsnode | ....)*/
177 uint32_t flag; /* vnode flag | 节点标签*/
178 LIST_ENTRY hashEntry; /* list entry for bucket in hash table | 通过它挂入哈希表 g_vnodeHashEntrys[i], i:[0,g_vnodeHashMask]*/
179 LIST_ENTRY actFreeEntry; /* vnode active/free list entry | 通过本节点挂到空闲链表和使用链表上*/
180 struct Mount *originMount; /* fs info about this vnode | 自己所在的文件系统挂载信息*/
181 struct Mount *newMount; /* fs info about who mount on this vnode | 其他挂载在这个节点上文件系统信息*/
182 char *filePath; /* file path of the vnode */
183 struct page_mapping mapping; /* page mapping of the vnode */
184};
185/*!
186 虚拟节点操作接口,具体的文件系统只需实现这些接口函数来操作vnode.
187 VnodeOps 系列函数是对节点本身的操作.
188*/
189struct VnodeOps {
190 int (*Create)(struct Vnode *parent, const char *name, int mode, struct Vnode **vnode);///< 创建节点
191 int (*Lookup)(struct Vnode *parent, const char *name, int len, struct Vnode **vnode);///<查询节点
192 //Lookup向底层文件系统查找获取inode信息
193 int (*Open)(struct Vnode *vnode, int fd, int mode, int flags);///< 打开节点
194 ssize_t (*ReadPage)(struct Vnode *vnode, char *buffer, off_t pos);
195 ssize_t (*WritePage)(struct Vnode *vnode, char *buffer, off_t pos, size_t buflen);
196 int (*Close)(struct Vnode *vnode);///< 关闭节点
197 int (*Reclaim)(struct Vnode *vnode);///<回 收节点
198 int (*Unlink)(struct Vnode *parent, struct Vnode *vnode, const char *fileName);///< 取消硬链接
199 int (*Rmdir)(struct Vnode *parent, struct Vnode *vnode, const char *dirName);///< 删除目录节点
200 int (*Mkdir)(struct Vnode *parent, const char *dirName, mode_t mode, struct Vnode **vnode);///< 创建目录节点
201 /*!
202 创建一个目录时,实际做了3件事:在其“父目录文件”中增加一个条目;分配一个inode;再分配一个存储块,
203 用来保存当前被创建目录包含的文件与子目录。被创建的“目录文件”中自动生成两个子目录的条目,名称分别是:“.”和“..”。
204 前者与该目录具有相同的inode号码,因此是该目录的一个“硬链接”。后者的inode号码就是该目录的父目录的inode号码。
205 所以,任何一个目录的"硬链接"总数,总是等于它的子目录总数(含隐藏目录)加2。即每个“子目录文件”中的“..”条目,
206 加上它自身的“目录文件”中的“.”条目,再加上“父目录文件”中的对应该目录的条目。
207 */
208 int (*Readdir)(struct Vnode *vnode, struct fs_dirent_s *dir);///< 读目录节点
209 int (*Opendir)(struct Vnode *vnode, struct fs_dirent_s *dir);///< 打开目录节点
210 int (*Rewinddir)(struct Vnode *vnode, struct fs_dirent_s *dir);///< 定位目录节点
211 int (*Closedir)(struct Vnode *vnode, struct fs_dirent_s *dir);///< 关闭目录节点
212 int (*Getattr)(struct Vnode *vnode, struct stat *st);///< 获取节点属性
213 int (*Setattr)(struct Vnode *vnode, struct stat *st);///< 设置节点属性
214 int (*Chattr)(struct Vnode *vnode, struct IATTR *attr);///< 改变节点属性(change attr)
215 int (*Rename)(struct Vnode *src, struct Vnode *dstParent, const char *srcName, const char *dstName);///< 重命名
216 int (*Truncate)(struct Vnode *vnode, off_t len);///< 缩减或扩展大小
217 int (*Truncate64)(struct Vnode *vnode, off64_t len);///< 缩减或扩展大小
218 int (*Fscheck)(struct Vnode *vnode, struct fs_dirent_s *dir);///< 检查功能
219 int (*Link)(struct Vnode *src, struct Vnode *dstParent, struct Vnode **dst, const char *dstName);
220 int (*Symlink)(struct Vnode *parentVnode, struct Vnode **newVnode, const char *path, const char *target);
221 ssize_t (*Readlink)(struct Vnode *vnode, char *buffer, size_t bufLen);
222};
223/*! 哈希比较指针函数,使用方法,例如:
224* int VfsHashGet(const struct Mount *mount, uint32_t hash, struct Vnode **vnode, VfsHashCmp *fn, void *arg)
225* VfsHashCmp *fn 等同于 int *fn, 此时 fn是个指针,指向了一个函数地址
226* fn(vnode,arg)就是调用这个函数,返回一个int类型的值
227*/
228typedef int VfsHashCmp(struct Vnode *vnode, void *arg);
229
230int VnodesInit(void);
231int VnodeDevInit(void);
232int VnodeAlloc(struct VnodeOps *vop, struct Vnode **vnode);
233int VnodeFree(struct Vnode *vnode);
234int VnodeLookup(const char *path, struct Vnode **vnode, uint32_t flags);
235int VnodeLookupFullpath(const char *fullpath, struct Vnode **vnode, uint32_t flags);
236int VnodeLookupAt(const char *path, struct Vnode **vnode, uint32_t flags, struct Vnode *orgVnode);
237int VnodeHold(void);
238int VnodeDrop(void);
239void VnodeRefDec(struct Vnode *vnode);
240int VnodeFreeAll(const struct Mount *mnt);
241int VnodeHashInit(void);
242uint32_t VfsHashIndex(struct Vnode *vnode);
243int VfsHashGet(const struct Mount *mount, uint32_t hash, struct Vnode **vnode, VfsHashCmp *fun, void *arg);
244void VfsHashRemove(struct Vnode *vnode);
245int VfsHashInsert(struct Vnode *vnode, uint32_t hash);
246void ChangeRoot(struct Vnode *newRoot);
247BOOL VnodeInUseIter(const struct Mount *mount);
248struct Vnode *VnodeGetRoot(void);
249void VnodeMemoryDump(void);
250mode_t GetUmask(void);
251int VfsPermissionCheck(uint fuid, uint fgid, mode_t fileMode, int accMode);
252int VfsVnodePermissionCheck(const struct Vnode *node, int accMode);
256int VnodeClearCache(void);
257
258#endif /* !_VNODE_H_ */
双向链表由内联函数实现 http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-apx-dll....
INT64 ssize_t
Definition: los_typedef.h:79
size_t BOOL
Definition: los_typedef.h:88
此结构用于记录 vnode 的属性
Definition: vnode.h:81
unsigned attr_chg_size
节点大小
Definition: vnode.h:88
unsigned attr_chg_ctime
节点自身被修改时间
Definition: vnode.h:91
unsigned attr_chg_uid
用户ID
Definition: vnode.h:86
unsigned attr_chg_atime
节点最近访问时间
Definition: vnode.h:89
unsigned int attr_chg_flags
额外的系统与用户标志(flag),用来保护该文件
Definition: vnode.h:84
unsigned attr_chg_mode
确定了文件的类型,以及它的所有者、它的group、其它用户访问此文件的权限 (S_IWUSR | ...)
Definition: vnode.h:85
unsigned attr_chg_gid
组ID
Definition: vnode.h:87
unsigned attr_chg_mtime
节点对应的文件内容被修改时间
Definition: vnode.h:90
unsigned int attr_chg_valid
节点改变有效性 (CHG_MODE | CHG_UID | ... )
Definition: vnode.h:83
举例: mount /dev/mmcblk0p0 /bin1/vs/sd vfat 将/dev/mmcblk0p0 挂载到/bin1/vs/sd目录
Definition: mount.h:68
vnode并不包含文件名,因为 vnode和文件名是 1:N 的关系
Definition: vnode.h:164
uint32_t hash
Definition: vnode.h:167
uint gid
Definition: vnode.h:169
struct Mount * newMount
Definition: vnode.h:181
enum VnodeType type
Definition: vnode.h:165
struct page_mapping mapping
Definition: vnode.h:183
struct VnodeOps * vop
Definition: vnode.h:174
uint32_t flag
Definition: vnode.h:177
mode_t mode
Definition: vnode.h:170
int useCount
Definition: vnode.h:166
void * data
Definition: vnode.h:176
LIST_HEAD childPathCaches
Definition: vnode.h:172
char * filePath
Definition: vnode.h:182
LIST_ENTRY hashEntry
Definition: vnode.h:178
struct file_operations_vfs * fop
Definition: vnode.h:175
struct Mount * originMount
Definition: vnode.h:180
LIST_ENTRY actFreeEntry
Definition: vnode.h:179
uint uid
Definition: vnode.h:168
LIST_HEAD parentPathCaches
Definition: vnode.h:171
struct Vnode * parent
Definition: vnode.h:173
int(* Setattr)(struct Vnode *vnode, struct stat *st)
设置节点属性
Definition: vnode.h:213
int(* Fscheck)(struct Vnode *vnode, struct fs_dirent_s *dir)
检查功能
Definition: vnode.h:218
int(* Create)(struct Vnode *parent, const char *name, int mode, struct Vnode **vnode)
创建节点
Definition: vnode.h:190
int(* Lookup)(struct Vnode *parent, const char *name, int len, struct Vnode **vnode)
查询节点
Definition: vnode.h:191
int(* Getattr)(struct Vnode *vnode, struct stat *st)
获取节点属性
Definition: vnode.h:212
int(* Opendir)(struct Vnode *vnode, struct fs_dirent_s *dir)
打开目录节点
Definition: vnode.h:209
int(* Open)(struct Vnode *vnode, int fd, int mode, int flags)
打开节点
Definition: vnode.h:193
int(* Reclaim)(struct Vnode *vnode)
回 收节点
Definition: vnode.h:197
int(* Close)(struct Vnode *vnode)
关闭节点
Definition: vnode.h:196
int(* Truncate64)(struct Vnode *vnode, off64_t len)
缩减或扩展大小
Definition: vnode.h:217
int(* Rmdir)(struct Vnode *parent, struct Vnode *vnode, const char *dirName)
删除目录节点
Definition: vnode.h:199
int(* Chattr)(struct Vnode *vnode, struct IATTR *attr)
改变节点属性(change attr)
Definition: vnode.h:214
ssize_t(* WritePage)(struct Vnode *vnode, char *buffer, off_t pos, size_t buflen)
Definition: vnode.h:195
ssize_t(* Readlink)(struct Vnode *vnode, char *buffer, size_t bufLen)
Definition: vnode.h:221
ssize_t(* ReadPage)(struct Vnode *vnode, char *buffer, off_t pos)
Definition: vnode.h:194
int(* Readdir)(struct Vnode *vnode, struct fs_dirent_s *dir)
读目录节点
Definition: vnode.h:208
int(* Rewinddir)(struct Vnode *vnode, struct fs_dirent_s *dir)
定位目录节点
Definition: vnode.h:210
int(* Link)(struct Vnode *src, struct Vnode *dstParent, struct Vnode **dst, const char *dstName)
Definition: vnode.h:219
int(* Closedir)(struct Vnode *vnode, struct fs_dirent_s *dir)
关闭目录节点
Definition: vnode.h:211
int(* Rename)(struct Vnode *src, struct Vnode *dstParent, const char *srcName, const char *dstName)
重命名
Definition: vnode.h:215
int(* Truncate)(struct Vnode *vnode, off_t len)
缩减或扩展大小
Definition: vnode.h:216
int(* Unlink)(struct Vnode *parent, struct Vnode *vnode, const char *fileName)
取消硬链接
Definition: vnode.h:198
int(* Mkdir)(struct Vnode *parent, const char *dirName, mode_t mode, struct Vnode **vnode)
创建目录节点
Definition: vnode.h:200
int(* Symlink)(struct Vnode *parentVnode, struct Vnode **newVnode, const char *path, const char *target)
Definition: vnode.h:220
ARG_NUM_3 int
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 ARG_NUM_0 ARG_NUM_2 ARG_NUM_1 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_4 off64_t
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 ARG_NUM_0 ARG_NUM_2 ARG_NUM_1 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_4 ARG_NUM_5 ARG_NUM_6 ARG_NUM_3 ARG_NUM_5 ARG_NUM_7 ARG_NUM_1 ARG_NUM_4 ARG_NUM_5 ARG_NUM_4 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_7 ARG_NUM_3 ARG_NUM_3 ARG_NUM_3 ARG_NUM_7 ARG_NUM_3 ARG_NUM_2 char ARG_NUM_2 ARG_NUM_1 ARG_NUM_0 ARG_NUM_0 ARG_NUM_3 void ARG_NUM_1 ARG_NUM_0 unsigned ARG_NUM_0 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_5 ARG_NUM_3 ARG_NUM_3 ARG_NUM_4 ARG_NUM_1 ARG_NUM_1 ARG_NUM_3 ARG_NUM_2 mode_t
LIST_HEAD * GetVnodeVirtualList(void)
Definition: vnode.c:731
int VnodesInit(void)
Definition: vnode.c:91
int VnodeDevInit(void)
设备初始化,设备结点:/dev目录下,对应一个设备,如/dev/mmcblk0
Definition: vnode.c:627
int VnodeDrop(void)
归还锁
Definition: vnode.c:292
VnodeType
Definition: vnode.h:134
@ VNODE_TYPE_LNK
Definition: vnode.h:142
@ VNODE_TYPE_DIR
Definition: vnode.h:137
@ VNODE_TYPE_FIFO
Definition: vnode.h:141
@ VNODE_TYPE_CHR
Definition: vnode.h:139
@ VNODE_TYPE_BLK
Definition: vnode.h:138
@ VNODE_TYPE_UNKNOWN
Definition: vnode.h:135
@ VNODE_TYPE_REG
Definition: vnode.h:136
@ VNODE_TYPE_BCHR
Definition: vnode.h:140
BOOL VnodeInUseIter(const struct Mount *mount)
mount是否正在被某个索引节点使用
Definition: vnode.c:269
int VfsHashGet(const struct Mount *mount, uint32_t hash, struct Vnode **vnode, VfsHashCmp *fun, void *arg)
通过哈希值获取节点信息
Definition: vnode_hash.c:89
int VfsHashInsert(struct Vnode *vnode, uint32_t hash)
插入哈希表
Definition: vnode_hash.c:128
int VnodeClearCache(void)
Definition: vnode.c:741
int VnodeLookupFullpath(const char *fullpath, struct Vnode **vnode, uint32_t flags)
根节点内部改变
Definition: vnode.c:496
int VnodeFree(struct Vnode *vnode)
是否 vnode 节点
Definition: vnode.c:212
int VfsPermissionCheck(uint fuid, uint fgid, mode_t fileMode, int accMode)
int VnodeHold(void)
拿锁,封装互斥量
Definition: vnode.c:283
int VfsHashCmp(struct Vnode *vnode, void *arg)
Definition: vnode.h:228
mode_t GetUmask(void)
获取用户创建文件掩码
Definition: vfs_other.c:715
LIST_HEAD * GetVnodeFreeList(void)
Definition: vnode.c:726
uint32_t VfsHashIndex(struct Vnode *vnode)
通过节点获取哈希索引值
Definition: vnode_hash.c:76
int VfsVnodePermissionCheck(const struct Vnode *node, int accMode)
Definition: vfs_other.c:80
int VnodeLookupAt(const char *path, struct Vnode **vnode, uint32_t flags, struct Vnode *orgVnode)
通过路径 查找索引节点.路径和节点是 N:1的关系, 硬链接
Definition: vnode.c:412
int VnodeHashInit(void)
Definition: vnode_hash.c:44
void VfsHashRemove(struct Vnode *vnode)
从哈希链表中摘除索引节点
Definition: vnode_hash.c:118
int VnodeAlloc(struct VnodeOps *vop, struct Vnode **vnode)
申请分配一个 vnode 节点,vop为操作节点的驱动程序
Definition: vnode.c:166
LOS_DL_LIST LIST_ENTRY
Definition: vnode.h:40
void ChangeRoot(struct Vnode *newRoot)
改变根节点
Definition: vnode.c:536
LOS_DL_LIST LIST_HEAD
Definition: vnode.h:39
void VnodeRefDec(struct Vnode *vnode)
LIST_HEAD * GetVnodeActiveList(void)
Definition: vnode.c:736
int VnodeFreeAll(const struct Mount *mnt)
释放mount下所有的索引节点
Definition: vnode.c:251
struct Vnode * VnodeGetRoot(void)
Definition: vnode.c:660
void VnodeMemoryDump(void)
Definition: vnode.c:706
int VnodeLookup(const char *path, struct Vnode **vnode, uint32_t flags)
通过路径查询vnode节点
Definition: vnode.c:491