diff --git a/fs/vfs/vfs_syscalls.c b/fs/vfs/vfs_syscalls.c
index c1e622f6ef9ff90cc2e4d9fff91450eb21a5909b..8b70a45f52101175e04467d8adbb876134fe9329 100755
--- a/fs/vfs/vfs_syscalls.c
+++ b/fs/vfs/vfs_syscalls.c
@@ -119,15 +119,15 @@ sys_open(char *path, int flags, mode_t mode, struct file *fp)
 		}
 	}
 
+	finit(fp, flags, DTYPE_VNODE, NULL, &vfs_ops);
+	fp->f_vnode = vp;
+
 	/* Request to file system */
 	if ((error = VOP_OPEN(vp, flags)) != 0) {
 		vput(vp);
 		return error;
 	}
 
-	finit(fp, flags, DTYPE_VNODE, NULL, &vfs_ops);
-	fp->f_vnode = vp;
-
 	vn_unlock(vp);
 	return 0;
 }