Update #2843.
---
 cpukit/libfs/src/jffs2/src/fs-rtems.c | 44 +++++++++++------------------------
 cpukit/libfs/src/jffs2/src/os-rtems.h |  3 ++-
 cpukit/sapi/include/confdefs.h        |  9 +------
 3 files changed, 16 insertions(+), 40 deletions(-)

diff --git a/cpukit/libfs/src/jffs2/src/fs-rtems.c 
b/cpukit/libfs/src/jffs2/src/fs-rtems.c
index 262bec9b27..652a8e7dbe 100644
--- a/cpukit/libfs/src/jffs2/src/fs-rtems.c
+++ b/cpukit/libfs/src/jffs2/src/fs-rtems.c
@@ -315,18 +315,14 @@ typedef struct {
        struct jffs2_inode_cache *inode_cache[];
 } rtems_jffs2_fs_info;
 
-static void rtems_jffs2_do_lock(const struct super_block *sb)
+static void rtems_jffs2_do_lock(struct super_block *sb)
 {
-       rtems_status_code sc = rtems_semaphore_obtain(sb->s_mutex, RTEMS_WAIT, 
RTEMS_NO_TIMEOUT);
-       assert(sc == RTEMS_SUCCESSFUL);
-       (void) sc; /* avoid unused variable warning */
+       rtems_recursive_mutex_lock(&sb->s_mutex);
 }
 
-static void rtems_jffs2_do_unlock(const struct super_block *sb)
+static void rtems_jffs2_do_unlock(struct super_block *sb)
 {
-       rtems_status_code sc = rtems_semaphore_release(sb->s_mutex);
-       assert(sc == RTEMS_SUCCESSFUL);
-       (void) sc; /* avoid unused variable warning */
+       rtems_recursive_mutex_unlock(&sb->s_mutex);
 }
 
 static void rtems_jffs2_free_directory_entries(struct _inode *inode)
@@ -366,15 +362,9 @@ static void rtems_jffs2_free_fs_info(rtems_jffs2_fs_info 
*fs_info, bool do_mount
                free(c->blocks);
        }
 
-       if (sb->s_mutex != 0) {
-               rtems_status_code sc = rtems_semaphore_delete(sb->s_mutex);
-               assert(sc == RTEMS_SUCCESSFUL);
-               (void) sc; /* avoid unused variable warning */
-       }
-
        rtems_jffs2_flash_control_destroy(fs_info->sb.s_flash_control);
        
rtems_jffs2_compressor_control_destroy(fs_info->sb.s_compressor_control);
-
+       rtems_recursive_mutex_destroy(&sb->s_mutex);
        free(fs_info);
 }
 
@@ -883,16 +873,16 @@ static const rtems_filesystem_eval_path_generic_config 
rtems_jffs2_eval_config =
 
 static void rtems_jffs2_lock(const rtems_filesystem_mount_table_entry_t 
*mt_entry)
 {
-       const rtems_jffs2_fs_info *fs_info = mt_entry->fs_info;
-       const struct super_block *sb = &fs_info->sb;
+       rtems_jffs2_fs_info *fs_info = mt_entry->fs_info;
+       struct super_block *sb = &fs_info->sb;
 
        rtems_jffs2_do_lock(sb);
 }
 
 static void rtems_jffs2_unlock(const rtems_filesystem_mount_table_entry_t 
*mt_entry)
 {
-       const rtems_jffs2_fs_info *fs_info = mt_entry->fs_info;
-       const struct super_block *sb = &fs_info->sb;
+       rtems_jffs2_fs_info *fs_info = mt_entry->fs_info;
+       struct super_block *sb = &fs_info->sb;
 
        rtems_jffs2_do_unlock(sb);
 }
@@ -1245,6 +1235,10 @@ int rtems_jffs2_initialize(
        c = JFFS2_SB_INFO(sb);
 
        if (err == 0) {
+               rtems_recursive_mutex_init(&sb->s_mutex, 
RTEMS_FILESYSTEM_TYPE_JFFS2);
+       }
+
+       if (err == 0) {
                uint32_t blocks = fc->flash_size / fc->block_size;
 
                if ((fc->block_size * blocks) != fc->flash_size) {
@@ -1261,18 +1255,6 @@ int rtems_jffs2_initialize(
        }
 
        if (err == 0) {
-               rtems_status_code sc = rtems_semaphore_create(
-                       rtems_build_name('J', 'F', 'F', 'S'),
-                       1,
-                       RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY | 
RTEMS_BINARY_SEMAPHORE,
-                       0,
-                       &sb->s_mutex
-               );
-
-               err = sc == RTEMS_SUCCESSFUL ? 0 : -ENOMEM;
-       }
-
-       if (err == 0) {
                sb->s_is_readonly = !mt_entry->writeable;
                sb->s_flash_control = fc;
                sb->s_compressor_control = jffs2_mount_data->compressor_control;
diff --git a/cpukit/libfs/src/jffs2/src/os-rtems.h 
b/cpukit/libfs/src/jffs2/src/os-rtems.h
index 8dbde681d8..ab4f6d72bf 100644
--- a/cpukit/libfs/src/jffs2/src/os-rtems.h
+++ b/cpukit/libfs/src/jffs2/src/os-rtems.h
@@ -32,6 +32,7 @@
 #include <time.h>
 
 #include <rtems/jffs2.h>
+#include <rtems/thread.h>
 
 #define CONFIG_JFFS2_RTIME
 
@@ -104,7 +105,7 @@ struct super_block {
        rtems_jffs2_compressor_control  *s_compressor_control;
        bool                    s_is_readonly;
        unsigned char           s_gc_buffer[PAGE_CACHE_SIZE]; // Avoids malloc 
when user may be under memory pressure
-       rtems_id                s_mutex;
+       rtems_recursive_mutex   s_mutex;
        char                    s_name_buf[JFFS2_MAX_NAME_LEN];
 };
 
diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
index eee4c1fe47..27f5b3eedd 100755
--- a/cpukit/sapi/include/confdefs.h
+++ b/cpukit/sapi/include/confdefs.h
@@ -449,14 +449,8 @@ extern rtems_initialization_tasks_table 
Initialization_tasks[];
 #if !defined(CONFIGURE_FILESYSTEM_ENTRY_JFFS2) && \
     defined(CONFIGURE_FILESYSTEM_JFFS2)
   #include <rtems/jffs2.h>
-  #if !defined(CONFIGURE_MAXIMUM_JFFS2_MOUNTS)
-    #define CONFIGURE_MAXIMUM_JFFS2_MOUNTS 1
-  #endif
   #define CONFIGURE_FILESYSTEM_ENTRY_JFFS2 \
     { RTEMS_FILESYSTEM_TYPE_JFFS2, rtems_jffs2_initialize }
-  #define _CONFIGURE_SEMAPHORES_FOR_JFFS2 CONFIGURE_MAXIMUM_JFFS2_MOUNTS
-#else
-  #define _CONFIGURE_SEMAPHORES_FOR_JFFS2 0
 #endif
 
 /**
@@ -467,8 +461,7 @@ extern rtems_initialization_tasks_table 
Initialization_tasks[];
     (_CONFIGURE_SEMAPHORES_FOR_FIFOS + \
      _CONFIGURE_SEMAPHORES_FOR_NFS + \
      _CONFIGURE_SEMAPHORES_FOR_DOSFS + \
-     _CONFIGURE_SEMAPHORES_FOR_RFS + \
-     _CONFIGURE_SEMAPHORES_FOR_JFFS2)
+     _CONFIGURE_SEMAPHORES_FOR_RFS)
 
 #ifdef CONFIGURE_INIT
 
-- 
2.12.3

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to