Index: uspace/lib/c/generic/vfs/vfs.c
===================================================================
--- uspace/lib/c/generic/vfs/vfs.c	(revision b1cdc44ad2cd4a3803682d95ac9b851ebb33cc98)
+++ uspace/lib/c/generic/vfs/vfs.c	(revision b1b1891d9751df01c489eaf2296e7e543ec7e08c)
@@ -650,32 +650,17 @@
 int mkdir(const char *path, mode_t mode)
 {
-	sysarg_t rc;
-	aid_t req;
-	
 	size_t pa_size;
 	char *pa = absolutize(path, &pa_size);
-	if (!pa)
+	if (!pa) {
 		return ENOMEM;
-	
-	async_exch_t *exch = vfs_exchange_begin();
-	
-	req = async_send_1(exch, VFS_IN_MKDIR, mode, NULL);
-	rc = async_data_write_start(exch, pa, pa_size);
-	if (rc != EOK) {
-		vfs_exchange_end(exch);
-		free(pa);
-
-		sysarg_t rc_orig;
-		async_wait_for(req, &rc_orig);
-
-		if (rc_orig == EOK)
-			return (int) rc;
-		else
-			return (int) rc_orig;
-	}
-	vfs_exchange_end(exch);
-	free(pa);
-	async_wait_for(req, &rc);
-	return rc;
+	}
+	
+	int ret = _vfs_walk(-1, pa, WALK_MUST_CREATE | WALK_DIRECTORY);
+	if (ret < 0) {
+		return ret;
+	}
+	
+	close(ret);
+	return EOK;
 }
 
