You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/11/28 10:04:45 UTC
[nuttx] 01/02: romfs: change lock to recursion lock
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 11fa70d53a1c8bf8dfb588b004b06802a579a1b3
Author: ligd <li...@xiaomi.com>
AuthorDate: Tue Nov 15 18:32:51 2022 +0800
romfs: change lock to recursion lock
Signed-off-by: ligd <li...@xiaomi.com>
---
fs/romfs/fs_romfs.c | 55 +++++++++++++++++++++++++++--------------------------
fs/romfs/fs_romfs.h | 2 +-
2 files changed, 29 insertions(+), 28 deletions(-)
diff --git a/fs/romfs/fs_romfs.c b/fs/romfs/fs_romfs.c
index f632464966..ad439a91e1 100644
--- a/fs/romfs/fs_romfs.c
+++ b/fs/romfs/fs_romfs.c
@@ -175,7 +175,7 @@ static int romfs_open(FAR struct file *filep, FAR const char *relpath,
/* Check if the mount is still healthy */
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
return ret;
@@ -287,7 +287,7 @@ static int romfs_open(FAR struct file *filep, FAR const char *relpath,
rm->rm_refs++;
errout_with_lock:
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
return ret;
}
@@ -314,14 +314,14 @@ static int romfs_close(FAR struct file *filep)
DEBUGASSERT(rm != NULL);
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
return ret;
}
rm->rm_refs--;
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
/* Do not check if the mount is healthy. We must support closing of
* the file even when there is healthy mount.
@@ -380,7 +380,7 @@ static ssize_t romfs_read(FAR struct file *filep, FAR char *buffer,
/* Make sure that the mount is still healthy */
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
return (ssize_t)ret;
@@ -484,7 +484,7 @@ static ssize_t romfs_read(FAR struct file *filep, FAR char *buffer,
}
errout_with_lock:
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
return ret < 0 ? ret : readsize;
}
@@ -539,7 +539,7 @@ static off_t romfs_seek(FAR struct file *filep, off_t offset, int whence)
/* Make sure that the mount is still healthy */
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
return (off_t)ret;
@@ -567,7 +567,7 @@ static off_t romfs_seek(FAR struct file *filep, off_t offset, int whence)
finfo("New file position: %jd\n", (intmax_t)filep->f_pos);
errout_with_lock:
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
return ret;
}
@@ -645,7 +645,7 @@ static int romfs_dup(FAR const struct file *oldp, FAR struct file *newp)
/* Check if the mount is still healthy */
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
return ret;
@@ -696,7 +696,7 @@ static int romfs_dup(FAR const struct file *oldp, FAR struct file *newp)
rm->rm_refs++;
errout_with_lock:
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
return ret;
}
@@ -731,7 +731,7 @@ static int romfs_fstat(FAR const struct file *filep, FAR struct stat *buf)
/* Check if the mount is still healthy */
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
return ret;
@@ -746,7 +746,7 @@ static int romfs_fstat(FAR const struct file *filep, FAR struct stat *buf)
rm->rm_hwsectorsize, buf);
}
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
return ret;
}
@@ -784,7 +784,7 @@ static int romfs_opendir(FAR struct inode *mountpt, FAR const char *relpath,
/* Make sure that the mount is still healthy */
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
goto errout_with_rdir;
@@ -828,11 +828,11 @@ static int romfs_opendir(FAR struct inode *mountpt, FAR const char *relpath,
#endif
*dir = &rdir->base;
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
return OK;
errout_with_lock:
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
errout_with_rdir:
kmm_free(rdir);
@@ -888,7 +888,7 @@ static int romfs_readdir(FAR struct inode *mountpt,
/* Make sure that the mount is still healthy */
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
return ret;
@@ -973,7 +973,7 @@ static int romfs_readdir(FAR struct inode *mountpt,
}
errout_with_lock:
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
return ret;
}
@@ -1004,7 +1004,7 @@ static int romfs_rewinddir(FAR struct inode *mountpt,
/* Make sure that the mount is still healthy */
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
return ret;
@@ -1020,7 +1020,7 @@ static int romfs_rewinddir(FAR struct inode *mountpt,
#endif
}
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
return ret;
}
@@ -1073,7 +1073,7 @@ static int romfs_bind(FAR struct inode *blkdriver, FAR const void *data,
* have to addref() here (but does have to release in ubind().
*/
- nxmutex_init(&rm->rm_lock); /* Initialize the mutex that controls access */
+ nxrmutex_init(&rm->rm_lock); /* Initialize the mutex that controls access */
rm->rm_blkdriver = blkdriver; /* Save the block driver reference */
/* Get the hardware configuration and setup buffering appropriately */
@@ -1108,6 +1108,7 @@ errout_with_buffer:
}
errout:
+ nxrmutex_destroy(&rm->rm_lock);
kmm_free(rm);
return ret;
}
@@ -1137,7 +1138,7 @@ static int romfs_unbind(FAR void *handle, FAR struct inode **blkdriver,
/* Check if there are sill any files opened on the filesystem. */
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
return ret;
@@ -1192,12 +1193,12 @@ static int romfs_unbind(FAR void *handle, FAR struct inode **blkdriver,
#ifdef CONFIG_FS_ROMFS_CACHE_NODE
romfs_freenode(rm->rm_root);
#endif
- nxmutex_destroy(&rm->rm_lock);
+ nxrmutex_destroy(&rm->rm_lock);
kmm_free(rm);
return OK;
}
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
return ret;
}
@@ -1225,7 +1226,7 @@ static int romfs_statfs(FAR struct inode *mountpt, FAR struct statfs *buf)
/* Check if the mount is still healthy */
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
return ret;
@@ -1255,7 +1256,7 @@ static int romfs_statfs(FAR struct inode *mountpt, FAR struct statfs *buf)
buf->f_namelen = NAME_MAX;
errout_with_lock:
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
return ret;
}
@@ -1342,7 +1343,7 @@ static int romfs_stat(FAR struct inode *mountpt, FAR const char *relpath,
/* Check if the mount is still healthy */
- ret = nxmutex_lock(&rm->rm_lock);
+ ret = nxrmutex_lock(&rm->rm_lock);
if (ret < 0)
{
return ret;
@@ -1373,7 +1374,7 @@ static int romfs_stat(FAR struct inode *mountpt, FAR const char *relpath,
ret = romfs_stat_common(type, nodeinfo.rn_size, rm->rm_hwsectorsize, buf);
errout_with_lock:
- nxmutex_unlock(&rm->rm_lock);
+ nxrmutex_unlock(&rm->rm_lock);
return ret;
}
diff --git a/fs/romfs/fs_romfs.h b/fs/romfs/fs_romfs.h
index 2db26b5884..20eabc3bc2 100644
--- a/fs/romfs/fs_romfs.h
+++ b/fs/romfs/fs_romfs.h
@@ -132,7 +132,7 @@ struct romfs_mountpt_s
#endif
bool rm_mounted; /* true: The file system is ready */
uint16_t rm_hwsectorsize; /* HW: Sector size reported by block driver */
- mutex_t rm_lock; /* Used to assume thread-safe access */
+ rmutex_t rm_lock; /* Used to assume thread-safe access */
uint32_t rm_refs; /* The references for all files opened on this mountpoint */
uint32_t rm_hwnsectors; /* HW: The number of sectors reported by the hardware */
uint32_t rm_volsize; /* Size of the ROMFS volume */