Currently, we have a complicated inode hierarchy for representing different states of a file or a directory. For example, when a file is being created, it is represented by an INodeFileUnderConstruction. When a file is being closed, the inode is replaced by an INodeFile. If it is reopened for append, the inode is replaced again by an INodeFileUnderConstruction. This JIRA is to flatten the inode hierarchy. We may also improve the performance by eliminating the inode replacement in runtime.