diff --git a/fs/vfs/vfs_vnode.c b/fs/vfs/vfs_vnode.c
index f9da1abe994cd6a97923dae9cc520dd4be00f992..8cf9862546a9c89403e0d821ec88533cb8ecc188 100755
--- a/fs/vfs/vfs_vnode.c
+++ b/fs/vfs/vfs_vnode.c
@@ -47,7 +47,10 @@ enum vtype iftovt_tab[16] = {
 	VNON, VFIFO, VCHR, VNON, VDIR, VNON, VBLK, VNON,
 	VREG, VNON, VLNK, VNON, VSOCK, VNON, VNON, VBAD,
 };
-
+int vttoif_tab[10] = {
+	0, S_IFREG, S_IFDIR, S_IFBLK, S_IFCHR, S_IFLNK,
+	S_IFSOCK, S_IFIFO, S_IFMT, S_IFMT
+};
 
 /*
  * Memo:
diff --git a/include/osv/vnode.h b/include/osv/vnode.h
index 51cf190c0d159371bd910ecab574377c13b3f34b..2b249a6429b69fe75531d76bd0af980992567535 100755
--- a/include/osv/vnode.h
+++ b/include/osv/vnode.h
@@ -196,7 +196,10 @@ int	 vcount(struct vnode *);
 void	 vflush(struct mount *);
 
 extern enum vtype iftovt_tab[];
+extern int vttoif_tab[];
 #define IFTOVT(mode)    (iftovt_tab[((mode) & S_IFMT) >> 12])
+#define VTTOIF(indx)	(vttoif_tab[(int)(indx)])
+#define MAKEIMODE(indx, mode)   (int)(VTTOIF(indx) | (mode))
 
 __END_DECLS