summaryrefslogtreecommitdiff
path: root/cpukit/libfs/src/imfs/imfs_creat.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-02-21 17:24:10 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-03-13 12:24:15 +0100
commit2e0ce55bf04861e9f80bf51621286b9a1a2c5af1 (patch)
treefc89dd3972bbf496d1575c0d996feaea342780aa /cpukit/libfs/src/imfs/imfs_creat.c
parent316507ab91ecabe73db1af03d74be398e24837b8 (diff)
IMFS: Use unprotected chain operations
Directory entry add or removal operations are protected by the file system instance lock. There is no need for protected chain operations.
Diffstat (limited to 'cpukit/libfs/src/imfs/imfs_creat.c')
-rw-r--r--cpukit/libfs/src/imfs/imfs_creat.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/cpukit/libfs/src/imfs/imfs_creat.c b/cpukit/libfs/src/imfs/imfs_creat.c
index 4c030a210f..caf82be250 100644
--- a/cpukit/libfs/src/imfs/imfs_creat.c
+++ b/cpukit/libfs/src/imfs/imfs_creat.c
@@ -22,6 +22,11 @@
#include <stdlib.h>
#include <string.h>
+static void IMFS_initialize_directory( IMFS_jnode_t *dir )
+{
+ rtems_chain_initialize_empty( &dir->info.directory.Entries );
+}
+
/*
* Create an IMFS filesystem node of an arbitrary type that is NOT
* the root directory node.
@@ -39,8 +44,6 @@ IMFS_jnode_t *IMFS_create_node(
IMFS_jnode_t *parent;
IMFS_fs_info_t *fs_info;
- IMFS_assert( parent_loc != NULL );
-
parent = parent_loc->node_access;
fs_info = parent_loc->mt_entry->fs_info;
@@ -55,7 +58,7 @@ IMFS_jnode_t *IMFS_create_node(
* Set the type specific information
*/
if ( type == IMFS_DIRECTORY ) {
- rtems_chain_initialize_empty(&node->info.directory.Entries);
+ IMFS_initialize_directory( node );
} else if ( type == IMFS_HARD_LINK ) {
node->info.hard_link.link_node = info->hard_link.link_node;
} else if ( type == IMFS_SYM_LINK ) {
@@ -80,10 +83,10 @@ IMFS_jnode_t *IMFS_create_node(
/*
* This node MUST have a parent, so put it in that directory list.
*/
- node->Parent = parent;
- node->st_ino = ++fs_info->ino_count;
+ IMFS_assert( parent != NULL );
+ IMFS_add_to_directory( parent, node );
- rtems_chain_append( &parent->info.directory.Entries, &node->Node );
+ node->st_ino = ++fs_info->ino_count;
return node;
}
@@ -165,7 +168,7 @@ IMFS_jnode_t *IMFS_create_root_node(void)
*
* NOTE: Root node is always a directory.
*/
- rtems_chain_initialize_empty(&node->info.directory.Entries);
+ IMFS_initialize_directory( node );
return node;
}