diff --git a/fs/vfs/fs_open.c b/fs/vfs/fs_open.c index d637499e385dab13583d438dfb4d2c3333545208..f33eda25d2b8a48c1f55ee00b5a9be96b5dbad3a 100755 --- a/fs/vfs/fs_open.c +++ b/fs/vfs/fs_open.c @@ -225,14 +225,17 @@ int fp_open(char *fullpath, int oflags, mode_t mode) if ((ret != OK) && (oflags & O_CREAT) && vnode) { + vnode->useCount++; /* if file not exist, but parent dir of the file is exist */ if (VfsVnodePermissionCheck(vnode, (WRITE_OP | EXEC_OP))) { ret = -EACCES; + vnode->useCount--; VnodeDrop(); goto errout_without_count; } ret = do_creat(&vnode, fullpath, mode); + vnode->useCount--; if (ret != OK) { VnodeDrop(); diff --git a/fs/vfs/fs_rename.c b/fs/vfs/fs_rename.c index 13d095b4f5b73aab6aa9d1d2449949096960f65b..31aac41b4c723958ae0e006e4aef9505fb530c37 100644 --- a/fs/vfs/fs_rename.c +++ b/fs/vfs/fs_rename.c @@ -196,7 +196,9 @@ int do_rename(int oldfd, const char *oldpath, int newfd, const char *newpath) ret = -ENOSYS; goto errout_with_vnode; } + new_parent_vnode->useCount++; ret = old_vnode->vop->Rename(old_vnode, new_parent_vnode, oldname, newname); + new_parent_vnode->useCount--; if (ret < 0) { goto errout_with_vnode;