summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/imfs/imfs_mount.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libfs/src/imfs/imfs_mount.c')
-rw-r--r--cpukit/libfs/src/imfs/imfs_mount.c54
1 files changed, 21 insertions, 33 deletions
diff --git a/cpukit/libfs/src/imfs/imfs_mount.c b/cpukit/libfs/src/imfs/imfs_mount.c
index 3ec16da3f7..243e5a0e30 100644
--- a/cpukit/libfs/src/imfs/imfs_mount.c
+++ b/cpukit/libfs/src/imfs/imfs_mount.c
@@ -1,16 +1,12 @@
/*
* IMFS_mount
*
- * This routine will look at a mount table entry that we are going to
- * add to the mount table. If the mount point rtems_filesystem
- * location_info_t struct refers to a node that is a directory,
- * the node will be marked as a mount point by setting its directory.mt_fs
- * pointer to point to the mount table entry that we are about to add
- * to the mount table chain.
- *
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
+ * Modifications to support reference counting in the file system are
+ * Copyright (c) 2012 embedded brains GmbH.
+ *
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
@@ -19,35 +15,27 @@
*/
#if HAVE_CONFIG_H
-#include "config.h"
+ #include "config.h"
#endif
-#include <errno.h>
-
#include "imfs.h"
-#include <rtems/libio_.h>
-#include <rtems/seterr.h>
-int IMFS_mount(
- rtems_filesystem_mount_table_entry_t *mt_entry
-)
+int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry )
{
- IMFS_jnode_t *node;
-
- node = mt_entry->mt_point_node.node_access;
-
- /*
- * Is the node that we are mounting onto a directory node ?
- */
-
- if ( node->type != IMFS_DIRECTORY )
- rtems_set_errno_and_return_minus_one( ENOTDIR );
-
- /*
- * Set mt_fs pointer to point to the mount table entry for
- * the mounted file system.
- */
-
- node->info.directory.mt_fs = mt_entry;
- return 0;
+ int rv = 0;
+ IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access;
+
+ if ( node->type == IMFS_DIRECTORY ) {
+ if ( node->info.directory.mt_fs == NULL ) {
+ node->info.directory.mt_fs = mt_entry;
+ } else {
+ errno = EBUSY;
+ rv = -1;
+ }
+ } else {
+ errno = ENOTDIR;
+ rv = -1;
+ }
+
+ return rv;
}