This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch releases/12.8
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 9c3fc9130421dc54e5033eacdc22d13f27830869
Author: hujun5 <[email protected]>
AuthorDate: Mon Dec 16 12:15:05 2024 +0800

    fs: fix comment in https://github.com/apache/nuttx/pull/15163
    
    Signed-off-by: hujun5 <[email protected]>
---
 fs/inode/fs_files.c | 18 +++++-------------
 1 file changed, 5 insertions(+), 13 deletions(-)

diff --git a/fs/inode/fs_files.c b/fs/inode/fs_files.c
index fc9be258cc..b8bf8b7faf 100644
--- a/fs/inode/fs_files.c
+++ b/fs/inode/fs_files.c
@@ -76,17 +76,15 @@ static FAR struct file *files_fget_by_index(FAR struct 
filelist *list,
 
   filep = &list->fl_files[l1][l2];
 #ifdef CONFIG_FS_REFCOUNT
-  int32_t refs = 0;
-
   if (filep->f_inode != NULL)
     {
       /* When the reference count is zero but the inode has not yet been
        * released, At this point we should return a null pointer
        */
 
+      int32_t refs = atomic_read(&filep->f_refs);
       do
         {
-          refs = atomic_read(&filep->f_refs);
           if (refs == 0)
             {
               filep = NULL;
@@ -99,18 +97,12 @@ static FAR struct file *files_fget_by_index(FAR struct 
filelist *list,
     {
       filep = NULL;
     }
-  else
+  else if (atomic_fetch_add(&filep->f_refs, 1) == 0)
     {
-      do
-        {
-          if (atomic_cmpxchg(&filep->f_refs, &refs, 2))
-            {
-              *new = true;
-              break;
-            }
-        }
-      while (!atomic_try_cmpxchg(&filep->f_refs, &refs, refs + 1));
+      atomic_fetch_add(&filep->f_refs, 1);
+      *new = true;
     }
+
 #else
   if (filep->f_inode == NULL && new == NULL)
     {

Reply via email to