Index: uspace/app/df/df.c
===================================================================
--- uspace/app/df/df.c	(revision 11baebb6d23efc311c4c9c9772859860a30c3aa3)
+++ uspace/app/df/df.c	(revision 5930e3f1d24e5be1fe249bd81c683a3dec338378)
@@ -59,7 +59,6 @@
 		mtab_ent_t *mtab_ent = list_get_instance(cur, mtab_ent_t,
 		    link);
-		if (statfs(/*mtab_ent->mp*/ "/data", &st) < 0)
-			return 1;
-			
+		statfs(mtab_ent->mp, &st);
+		printf("block size:%ld\n", st.f_bsize);
 		printf("%13s %15lld %9lld %9lld %3ld%% %s\n", 
 			mtab_ent->fs_name,
@@ -67,5 +66,5 @@
 			(long long) st.f_bfree * st.f_bsize,
 			(long long) (st.f_blocks - st.f_bfree) * st.f_bsize,
-			PERCENTAGE(st.f_blocks - st.f_bfree, st.f_blocks),
+			(st.f_blocks)?PERCENTAGE(st.f_blocks - st.f_bfree, st.f_blocks):0L,
 			mtab_ent->mp);
 	}
Index: uspace/app/trace/trace.c
===================================================================
--- uspace/app/trace/trace.c	(revision 11baebb6d23efc311c4c9c9772859860a30c3aa3)
+++ uspace/app/trace/trace.c	(revision 5930e3f1d24e5be1fe249bd81c683a3dec338378)
@@ -724,4 +724,6 @@
 	o = oper_new("stat", 0, arg_def, V_ERRNO, 0, resp_def);
 	proto_add_oper(p, VFS_IN_STAT, o);
+	o = oper_new("statfs", 0, arg_def, V_ERRNO, 0, resp_def);
+	proto_add_oper(p, VFS_IN_STATFS, o);
 
 	proto_register(SERVICE_VFS, p);
Index: uspace/lib/c/generic/vfs/vfs.c
===================================================================
--- uspace/lib/c/generic/vfs/vfs.c	(revision 11baebb6d23efc311c4c9c9772859860a30c3aa3)
+++ uspace/lib/c/generic/vfs/vfs.c	(revision 5930e3f1d24e5be1fe249bd81c683a3dec338378)
@@ -893,5 +893,4 @@
 }
 
-#include <stdio.h>
 int statfs(const char *path, struct statfs *statfs)
 {
@@ -904,5 +903,4 @@
 	if (!pa)
 		return ENOMEM;
-	
 	async_exch_t *exch = vfs_exchange_begin();
 	
@@ -918,8 +916,6 @@
 			return (int) rc_orig;
 	}
-	printf("TRACE: send VFS_IN_STATFS\n");
-	rc = async_data_read_start(exch, statfs, sizeof(struct statfs));
-	if (rc != EOK) {
-		printf("TRACE: error reply\n");
+	rc = async_data_read_start(exch, (void *) statfs, sizeof(struct statfs));
+	if (rc != EOK) {
 		vfs_exchange_end(exch);
 		free(pa);
Index: uspace/lib/fs/libfs.c
===================================================================
--- uspace/lib/fs/libfs.c	(revision 11baebb6d23efc311c4c9c9772859860a30c3aa3)
+++ uspace/lib/fs/libfs.c	(revision 5930e3f1d24e5be1fe249bd81c683a3dec338378)
@@ -75,4 +75,5 @@
 static void libfs_open_node(libfs_ops_t *, fs_handle_t, ipc_callid_t,
     ipc_call_t *);
+static void libfs_statfs(libfs_ops_t *, fs_handle_t, ipc_callid_t, ipc_call_t *);
 
 static void vfs_out_mounted(ipc_callid_t rid, ipc_call_t *req)
@@ -219,36 +220,9 @@
 	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);
-}
-
+{
+	libfs_statfs(libfs_ops, reg.fs_handle, rid, req);
+}
 static void vfs_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
@@ -865,4 +839,37 @@
 }
 
+void libfs_statfs(libfs_ops_t *ops, fs_handle_t fs_handle, ipc_callid_t rid,
+    ipc_call_t *request)
+{
+	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*request);
+	fs_index_t index = (fs_index_t) IPC_GET_ARG2(*request);
+	
+	fs_node_t *fn;
+	int rc = 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 statfs))) {
+		ops->node_put(fn);
+		async_answer_0(callid, EINVAL);
+		async_answer_0(rid, EINVAL);
+		return;
+	}
+	
+	struct statfs statfs;
+	memset(&statfs, 0, sizeof(struct statfs));
+
+	if (NULL != ops->size_block)	
+		statfs.f_bsize = ops->size_block(service_id);
+	
+	ops->node_put(fn);
+	
+	async_data_read_finalize(callid, &statfs, sizeof(struct statfs));
+	async_answer_0(rid, EOK);
+}
+
+
 /** Open VFS triplet.
  *
Index: uspace/srv/fs/ext4fs/ext4fs_ops.c
===================================================================
--- uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision 11baebb6d23efc311c4c9c9772859860a30c3aa3)
+++ uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision 5930e3f1d24e5be1fe249bd81c683a3dec338378)
@@ -101,4 +101,5 @@
 static bool ext4fs_is_file(fs_node_t *node);
 static service_id_t ext4fs_service_get(fs_node_t *node);
+static long ext4fs_size_block(service_id_t);
 
 /* Static variables */
@@ -836,4 +837,17 @@
 	ext4fs_node_t *enode = EXT4FS_NODE(fn);
 	return enode->instance->service_id;
+}
+
+long ext4fs_size_block(service_id_t service_id)
+{
+	ext4fs_instance_t *inst;
+	int rc = ext4fs_instance_get(service_id, &inst);
+	if (rc != EOK)
+		return rc;
+	if (NULL == inst)
+		return ENOENT;
+	ext4_superblock_t *sb = inst->filesystem->superblock;
+	uint32_t block_size = ext4_superblock_get_block_size(sb);
+	return block_size;
 }
 
@@ -857,5 +871,6 @@
 	.is_directory = ext4fs_is_directory,
 	.is_file = ext4fs_is_file,
-	.service_get = ext4fs_service_get
+	.service_get = ext4fs_service_get,
+	.size_block = ext4fs_size_block
 };
 
Index: uspace/srv/fs/mfs/mfs_ops.c
===================================================================
--- uspace/srv/fs/mfs/mfs_ops.c	(revision 11baebb6d23efc311c4c9c9772859860a30c3aa3)
+++ uspace/srv/fs/mfs/mfs_ops.c	(revision 5930e3f1d24e5be1fe249bd81c683a3dec338378)
@@ -1149,5 +1149,5 @@
 	if (NULL == inst)
 		return ENOENT;
-	block_size = inst->sbi->block_size;	
+	block_size = inst->sbi->block_size;
 	return block_size;
 }
