Index: uspace/lib/c/generic/vfs/vfs.c
===================================================================
--- uspace/lib/c/generic/vfs/vfs.c	(revision ce52ae70b995989a7049392cb62236f3dfbf4de1)
+++ uspace/lib/c/generic/vfs/vfs.c	(revision 651c8dbd8d3b9a89ca7da022f6cf99629d9f467e)
@@ -893,41 +893,28 @@
 }
 
-int statfs(const char *path, struct statfs *statfs)
-{
-	sysarg_t rc;
-	sysarg_t rc_orig;
+int statfs(const char *path, struct statfs *st)
+{
+	sysarg_t rc, rc_orig;
 	aid_t req;
 	size_t pa_size;
-	
+
 	char *pa = absolutize(path, &pa_size);
 	if (!pa)
 		return ENOMEM;
-	async_exch_t *exch = vfs_exchange_begin();
-	
+
+	async_exch_t *exch = vfs_exchange_begin();
+
 	req = async_send_0(exch, VFS_IN_STATFS, NULL);
 	rc = async_data_write_start(exch, pa, pa_size);
-	if (rc != EOK) {
-		vfs_exchange_end(exch);
-		free(pa);
-		async_wait_for(req, &rc_orig);
-		if (rc_orig == EOK)
-			return (int) rc;
-		else
-			return (int) rc_orig;
-	}
-	rc = async_data_read_start(exch, (void *) statfs, sizeof(struct statfs));
-	if (rc != EOK) {
-		vfs_exchange_end(exch);
-		free(pa);
-		async_wait_for(req, &rc_orig);
-		if (rc_orig == EOK)
-			return (int) rc;
-		else
-			return (int) rc_orig;
-	}
+	if (rc != EOK)
+		goto exit;
+
+	rc = async_data_read_start(exch, (void *) st, sizeof(*st));
+
+exit:
 	vfs_exchange_end(exch);
 	free(pa);
-	async_wait_for(req, &rc);
-	return rc;
+	async_wait_for(req, &rc_orig);
+	return (int) (rc_orig != EOK ? rc_orig : rc);
 }
 
