summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2026-07-31 15:13:53 +0800
committerGitHub <[email protected]>2026-07-31 15:13:53 +0800
commit2b01936f113fe050d8eca5d9e5e8c4fc724889b7 (patch)
tree95bf90d54227613929d1238da59f201897fc0e3c /components
parent36f52133ec2e8f7d5c53358bcbd96f2b0e5ac132 (diff)
components/dfs: unify vnode lock names
Diffstat (limited to 'components')
-rw-r--r--components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c4
-rw-r--r--components/dfs/dfs_v2/filesystems/tmpfs/dfs_tmpfs.c4
-rw-r--r--components/dfs/dfs_v2/include/dfs_file.h1
-rw-r--r--components/dfs/dfs_v2/src/dfs_vnode.c26
4 files changed, 32 insertions, 3 deletions
diff --git a/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c b/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c
index 52d3cafdac..eab787cde4 100644
--- a/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c
+++ b/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c
@@ -447,7 +447,7 @@ int dfs_elm_open(struct dfs_file *file)
}
file->vnode->data = dir;
- rt_mutex_init(&file->vnode->lock, file->dentry->pathname, RT_IPC_FLAG_PRIO);
+ dfs_vnode_lock_init(file->vnode, file->dentry);
return RT_EOK;
}
else
@@ -488,7 +488,7 @@ int dfs_elm_open(struct dfs_file *file)
file->vnode->size = f_size(fd);
file->vnode->type = FT_REGULAR;
file->vnode->data = fd;
- rt_mutex_init(&file->vnode->lock, file->dentry->pathname, RT_IPC_FLAG_PRIO);
+ dfs_vnode_lock_init(file->vnode, file->dentry);
if (file->flags & O_APPEND)
{
diff --git a/components/dfs/dfs_v2/filesystems/tmpfs/dfs_tmpfs.c b/components/dfs/dfs_v2/filesystems/tmpfs/dfs_tmpfs.c
index 996c01df78..011e6e14c2 100644
--- a/components/dfs/dfs_v2/filesystems/tmpfs/dfs_tmpfs.c
+++ b/components/dfs/dfs_v2/filesystems/tmpfs/dfs_tmpfs.c
@@ -266,6 +266,7 @@ find_subpath:
{
if (rt_strcmp(file->name, filename) == 0)
{
+ /* cppcheck-suppress uninitvar */
*size = file->size;
rt_spin_unlock(&superblock->lock);
@@ -455,7 +456,7 @@ static int dfs_tmpfs_open(struct dfs_file *file)
RT_ASSERT(file->vnode->ref_count > 0);
if(file->vnode->ref_count == 1)
{
- rt_mutex_init(&file->vnode->lock, file->dentry->pathname, RT_IPC_FLAG_PRIO);
+ dfs_vnode_lock_init(file->vnode, file->dentry);
}
return 0;
@@ -525,6 +526,7 @@ static int dfs_tmpfs_getdents(struct dfs_file *file,
if (index >= (rt_size_t)file->fpos)
{
d = dirp + count;
+ /* cppcheck-suppress uninitvar */
if (n_file->type == TMPFS_TYPE_FILE)
{
d->d_type = DT_REG;
diff --git a/components/dfs/dfs_v2/include/dfs_file.h b/components/dfs/dfs_v2/include/dfs_file.h
index 5010ed4534..0e609e9eef 100644
--- a/components/dfs/dfs_v2/include/dfs_file.h
+++ b/components/dfs/dfs_v2/include/dfs_file.h
@@ -124,6 +124,7 @@ struct dfs_file
int dfs_vnode_init(struct dfs_vnode *vnode, int type, const struct dfs_file_ops *fops);
struct dfs_vnode *dfs_vnode_create(void);
int dfs_vnode_destroy(struct dfs_vnode* vnode);
+rt_err_t dfs_vnode_lock_init(struct dfs_vnode *vnode, struct dfs_dentry *dentry);
struct dfs_vnode *dfs_vnode_ref(struct dfs_vnode *vnode);
void dfs_vnode_unref(struct dfs_vnode *vnode);
diff --git a/components/dfs/dfs_v2/src/dfs_vnode.c b/components/dfs/dfs_v2/src/dfs_vnode.c
index d46885e0b3..462f94e05e 100644
--- a/components/dfs/dfs_v2/src/dfs_vnode.c
+++ b/components/dfs/dfs_v2/src/dfs_vnode.c
@@ -9,6 +9,7 @@
*/
#include <dfs_file.h>
+#include <dfs_dentry.h>
#include <dfs_mnt.h>
#ifdef RT_USING_PAGECACHE
#include "dfs_pcache.h"
@@ -64,6 +65,31 @@ struct dfs_vnode *dfs_vnode_create(void)
}
/**
+ * @brief Initialize the lock of a virtual node (vnode)
+ *
+ * @param[in,out] vnode Pointer to the vnode containing the lock
+ * @param[in] dentry Pointer to the dentry used to identify the vnode
+ *
+ * @return RT_EOK on success, or -RT_EINVAL if a parameter is invalid
+ */
+rt_err_t dfs_vnode_lock_init(struct dfs_vnode *vnode, struct dfs_dentry *dentry)
+{
+ char lock_name[RT_NAME_MAX];
+ uint32_t path_hash;
+
+ if (vnode == RT_NULL || dentry == RT_NULL)
+ {
+ return -RT_EINVAL;
+ }
+
+ path_hash = dfs_dentry_full_path_crc32(dentry);
+ rt_snprintf(lock_name, sizeof(lock_name), "vn-%04x",
+ (unsigned int)(path_hash & 0xffffU));
+
+ return rt_mutex_init(&vnode->lock, lock_name, RT_IPC_FLAG_PRIO);
+}
+
+/**
* @brief Destroy a virtual node (vnode) and free its resources
*
* @param[in] vnode Pointer to the vnode to be destroyed