diff options
Diffstat (limited to 'cpukit/libfs/src/imfs/imfs_mount.c')
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_mount.c | 54 |
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; } |