Index: contrib/arch/uspace/srv/vfs/vfs.bp
===================================================================
--- contrib/arch/uspace/srv/vfs/vfs.bp	(revision 07fdf2039be8c557cff859a000458feabc41d241)
+++ contrib/arch/uspace/srv/vfs/vfs.bp	(revision 07fdf2039be8c557cff859a000458feabc41d241)
@@ -0,0 +1,131 @@
+!ns.IPC_M_CONNECT_TO_ME ;
+(
+	?vfs.IPC_M_CONNECT_ME_TO ;
+	(
+		?vfs.VFS_IN_REGISTER {
+			?vfs.IPC_M_DATA_WRITE ;
+			?vfs.IPC_M_CONNECT_TO_ME ;
+			?vfs.IPC_M_SHARE_IN
+		} +
+		
+		?vfs.VFS_IN_MOUNT {
+			?vfs.IPC_M_DATA_WRITE /* mount point */ ;
+			?vfs.IPC_M_DATA_WRITE /* mount options */ ;
+			?vfs.IPC_M_DATA_WRITE /* fs name */ ;
+			?vfs.IPC_M_PING ;
+			(
+				
+				!fs.VFS_OUT_MOUNTED ;
+				!fs.IPC_M_DATA_WRITE /* mount options */
+			) /* root fs */ +
+			(
+				!fs.VFS_OUT_MOUNT ;
+				!fs.IPC_M_CONNECTION_CLONE ;
+				!fs.VFS_M_DATA_WRITE /* mount options */
+			) /* non-root fs */
+		} +
+		
+		?vfs.VFS_IN_OPEN {
+			?vfs.IPC_M_DATA_WRITE /* path */ ;
+			[vfs_lookup_internal] ;
+			(
+				(
+					[vfs_grab_phone] ;
+					!fs.VFS_OUT_TRUNCATE ;
+					[vfs_release_phone]
+				) +
+				NULL
+			)
+		} +
+		
+		?vfs.VFS_IN_OPEN_NODE {
+			[vfs_grab_phone] ;
+			!fs.VFS_OUT_OPEN_NODE ;
+			[vfs_release_phone] ;
+			(
+				(
+					[vfs_grab_phone] ;
+					!fs.VFS_OUT_TRUNCATE ;
+					[vfs_release_phone]
+				) +
+				NULL
+			)
+		} +
+		
+		?vfs.VFS_IN_CLOSE {
+			[vfs_grab_phone] ;
+			!fs.VFS_OUT_CLOSE ;
+			[vfs_release_phone]
+		} +
+		
+		?vfs.VFS_IN_READ {
+			?vfs.IPC_M_DATA_READ {
+				[vfs_grab_phone] ;
+				!fs.VFS_OUT_READ /* payload */ ;
+				!fs.IPC_M_DATA_READ /* forwarded */ ;
+				[vfs_release_phone]
+			}
+		} +
+		
+		?vfs.VFS_IN_WRITE {
+			?vfs.IPC_M_DATA_WRITE {
+				[vfs_grab_phone] ;
+				!fs.VFS_OUT_WRITE /* payload */ ;
+				!fs.IPC_M_DATA_WRITE /* forwarded */ ;
+				[vfs_release_phone]
+			}
+		} +
+		
+		?vfs.VFS_IN_SEEK +
+		
+		?vfs.VFS_IN_TRUNCATE {
+			[vfs_grab_phone] ;
+			!fs.VFS_OUT_TRUNCATE ;
+			[vfs_release_phone]
+		} +
+		
+		?vfs.VFS_IN_FSTAT {
+			?vfs.IPC_M_DATA_READ /* struct stat */ {
+				[vfs_grab_phone] ;
+				!fs.VFS_OUT_STAT ;
+				!fs.IPC_M_DATA_READ /* forwarded */ ;
+				[vfs_release_phone]
+			}
+		} +
+		
+		?vfs.VFS_IN_STAT {
+			?vfs.IPC_M_DATA_WRITE /* path */ ;
+			?vfs.IPC_M_DATA_READ /* struct stat */ {
+				[vfs_lookup_internal] ;
+				!fs.VFS_OUT_STAT ;
+				!fs.IPC_M_DATA_READ /* forwarded */
+			}
+		} +
+		
+		?vfs.VFS_IN_MKDIR {
+			?vfs.IPC_M_DATA_WRITE /* path */ ;
+			[vfs_lookup_internal]
+		} +
+		
+		?vfs.VFS_IN_UNLINK {
+			?vfs.IPC_M_DATA_WRITE /* path */ ;
+			[vfs_lookup_internal]
+		} +
+		
+		?vfs.VFS_IN_RENAME {
+			?vfs.IPC_M_DATA_WRITE /* old path */ ;
+			?vfs.IPC_M_DATE_WRITE /* new path */ ;
+			[vfs_lookup_internal] /* lookup old path */ ;
+			[vfs_lookup_internal] /* lookup parent of new path */ ;
+			[vfs_lookup_internal] /* destroy old link for the new path */ ;
+			[vfs_lookup_internal] /* create new link for the new path */ ;
+			[vfs_lookup_internal] /* destroy link for the old path */
+		} +
+		
+		?vfs.VFS_IN_SYNC {
+			!fs.VFS_OUT_SYNC
+		}
+		
+	)* ;
+	?vfs.IPC_M_PHONE_HUNGUP
+)*
