Minor file system clean-up

This commit is contained in:
Gregory Nutt 2015-06-11 11:24:20 -06:00
parent ed9c45bcef
commit 8293a5e773
10 changed files with 39 additions and 24 deletions

View File

@ -235,9 +235,9 @@ FAR DIR *opendir(FAR const char *path)
*/ */
inode_semtake(); inode_semtake();
if (!path || *path == 0 || strcmp(path, "/") == 0) if (path == NULL || *path == '\0' || strcmp(path, "/") == 0)
{ {
inode = root_inode; inode = g_root_inode;
isroot = true; isroot = true;
relpath = NULL; relpath = NULL;
} }

View File

@ -44,6 +44,8 @@
#include <nuttx/compiler.h> #include <nuttx/compiler.h>
#include <nuttx/fs/fs.h> #include <nuttx/fs/fs.h>
#include "inode/inode.h"
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
****************************************************************************/ ****************************************************************************/
@ -61,8 +63,6 @@ extern "C"
#define EXTERN extern #define EXTERN extern
#endif #endif
extern FAR struct inode *root_inode;
/**************************************************************************** /****************************************************************************
* Public Function Prototypes * Public Function Prototypes
****************************************************************************/ ****************************************************************************/

View File

@ -203,7 +203,7 @@ int foreach_inode(foreach_inode_t handler, FAR void *arg)
/* Start the recursion at the root inode */ /* Start the recursion at the root inode */
inode_semtake(); inode_semtake();
ret = foreach_inodelevel(root_inode, info); ret = foreach_inodelevel(g_root_inode, info);
inode_semgive(); inode_semgive();
/* Free the info structure and return the result */ /* Free the info structure and return the result */
@ -224,7 +224,7 @@ int foreach_inode(foreach_inode_t handler, FAR void *arg)
/* Start the recursion at the root inode */ /* Start the recursion at the root inode */
inode_semtake(); inode_semtake();
ret = foreach_inodelevel(root_inode, &info); ret = foreach_inodelevel(g_root_inode, &info);
inode_semgive(); inode_semgive();
return ret; return ret;

View File

@ -82,7 +82,7 @@ static struct inode_sem_s g_inode_sem;
* Public Variables * Public Variables
****************************************************************************/ ****************************************************************************/
FAR struct inode *root_inode = NULL; FAR struct inode *g_root_inode = NULL;
/**************************************************************************** /****************************************************************************
* Private Functions * Private Functions
@ -290,7 +290,7 @@ FAR struct inode *inode_search(FAR const char **path,
FAR const char **relpath) FAR const char **relpath)
{ {
FAR const char *name = *path + 1; /* Skip over leading '/' */ FAR const char *name = *path + 1; /* Skip over leading '/' */
FAR struct inode *node = root_inode; FAR struct inode *node = g_root_inode;
FAR struct inode *left = NULL; FAR struct inode *left = NULL;
FAR struct inode *above = NULL; FAR struct inode *above = NULL;
@ -396,7 +396,9 @@ FAR struct inode *inode_search(FAR const char **path,
void inode_free(FAR struct inode *node) void inode_free(FAR struct inode *node)
{ {
if (node) /* Verify that we were passed valid pointer to an inode */
if (node != NULL)
{ {
inode_free(node->i_peer); inode_free(node->i_peer);
inode_free(node->i_child); inode_free(node->i_child);

View File

@ -93,9 +93,14 @@ void inode_release(FAR struct inode *node)
if (node->i_crefs <= 0 && (node->i_flags & FSNODEFLAG_DELETED) != 0) if (node->i_crefs <= 0 && (node->i_flags & FSNODEFLAG_DELETED) != 0)
{ {
/* If the inode has been properly unlinked, then the peer pointer
* should be NULL.
*/
inode_semgive(); inode_semgive();
inode_free(node->i_child);
kmm_free(node); DEBUGASSERT(node->i_peer == NULL);
inode_free(node);
} }
else else
{ {

View File

@ -120,7 +120,7 @@ FAR struct inode *inode_unlink(FAR const char *path)
else else
{ {
root_inode = node->i_peer; g_root_inode = node->i_peer;
} }
node->i_peer = NULL; node->i_peer = NULL;
@ -167,10 +167,12 @@ int inode_remove(FAR const char *path)
} }
else else
{ {
/* And delete it now -- recursively to delete all of its children */ /* And delete it now -- recursively to delete all of its children.
* Since it has been unlinked, then the peer pointer should be NULL.
*/
inode_free(node->i_child); DEBUGASSERT(node->i_peer == NULL);
kmm_free(node); inode_free(node);
return OK; return OK;
} }
} }

View File

@ -132,8 +132,8 @@ static void inode_insert(FAR struct inode *node,
else else
{ {
node->i_peer = root_inode; node->i_peer = g_root_inode;
root_inode = node; g_root_inode = node;
} }
} }

View File

@ -123,7 +123,7 @@ extern "C"
#define EXTERN extern #define EXTERN extern
#endif #endif
EXTERN FAR struct inode *root_inode; EXTERN FAR struct inode *g_root_inode;
/**************************************************************************** /****************************************************************************
* Public Function Prototypes * Public Function Prototypes

View File

@ -174,11 +174,14 @@ void mq_inode_release(FAR struct inode *inode)
mq_msgqfree(msgq); mq_msgqfree(msgq);
inode->u.i_mqueue = NULL; inode->u.i_mqueue = NULL;
/* Release and free the inode container */ /* Release and free the inode container. If it has been properly
* unlinked, then the peer pointer should be NULL.
*/
inode_semgive(); inode_semgive();
inode_free(inode->i_child);
kmm_free(inode); DEBUGASSERT(inode->i_peer == NULL);
inode_free(inode);
return; return;
} }

View File

@ -134,11 +134,14 @@ int sem_close(FAR sem_t *sem)
sem_destroy(&nsem->ns_sem); sem_destroy(&nsem->ns_sem);
group_free(NULL, nsem); group_free(NULL, nsem);
/* Release and free the inode */ /* Release and free the inode container. If it has been properly
* unlinked, then the peer pointer should be NULL.
*/
inode_semgive(); inode_semgive();
inode_free(inode->i_child);
kmm_free(inode); DEBUGASSERT(inode->i_peer == NULL);
inode_free(inode);
return OK; return OK;
} }