Index: uspace/lib/fs/libfs.c
===================================================================
--- uspace/lib/fs/libfs.c	(revision 663664703394632860eadef65798f751d575e737)
+++ uspace/lib/fs/libfs.c	(revision 11baebb6d23efc311c4c9c9772859860a30c3aa3)
@@ -45,4 +45,5 @@
 #include <mem.h>
 #include <sys/stat.h>
+#include <sys/statfs.h>
 #include <stdlib.h>
 
@@ -218,4 +219,35 @@
 	async_answer_0(rid, rc);
 }
+#include<stdio.h>
+static void vfs_out_statfs(ipc_callid_t rid, ipc_call_t *req)
+{	
+	printf("TRACE: vfs_out_statfs\n");
+	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
+	fs_index_t index = (fs_index_t) IPC_GET_ARG2(*req);
+	
+	fs_node_t *fn;
+	int rc = libfs_ops->node_get(&fn, service_id, index);
+	on_error(rc, answer_and_return(rid, rc));
+	
+	ipc_callid_t callid;
+	size_t size;
+	if ((!async_data_read_receive(&callid, &size)) ||
+	    (size != sizeof(struct stat))) {
+		libfs_ops->node_put(fn);
+		async_answer_0(callid, EINVAL);
+		async_answer_0(rid, EINVAL);
+		return;
+	}
+	
+	struct statfs statfs;
+	memset(&statfs, 0, sizeof(struct statfs));
+	
+	statfs.f_bsize = libfs_ops->size_block(service_id);
+
+	libfs_ops->node_put(fn);
+	
+	async_data_read_finalize(callid, &statfs, sizeof(struct statfs));
+	async_answer_0(rid, EOK);
+}
 
 static void vfs_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
@@ -276,4 +308,7 @@
 		case VFS_OUT_SYNC:
 			vfs_out_sync(callid, &call);
+			break;
+		case VFS_OUT_STATFS:
+			vfs_out_statfs(callid, &call);
 			break;
 		default:
Index: uspace/lib/fs/libfs.h
===================================================================
--- uspace/lib/fs/libfs.h	(revision 663664703394632860eadef65798f751d575e737)
+++ uspace/lib/fs/libfs.h	(revision 11baebb6d23efc311c4c9c9772859860a30c3aa3)
@@ -93,5 +93,5 @@
 	bool (* is_file)(fs_node_t *);
 	service_id_t (* service_get)(fs_node_t *);
-	unsigned int (* size_block)(fs_node_t *);
+	long (* size_block)(service_id_t);
 } libfs_ops_t;
 
