Index: uspace/lib/libblock/libblock.c
===================================================================
--- uspace/lib/libblock/libblock.c	(revision 6284978581040c06c173f1990897a36fe2cd2cb2)
+++ uspace/lib/libblock/libblock.c	(revision 0c243b47a3b83c55eb04286f7246f90cbe615ad8)
@@ -177,4 +177,5 @@
 {
 	void *bb_buf;
+	int rc;
 
 	devcon_t *devcon = devcon_search(dev_handle);
@@ -189,8 +190,9 @@
 	off_t bufpos = 0;
 	size_t buflen = 0;
-	if (!block_read(dev_handle, &bufpos, &buflen, &off,
-	    bb_buf, size, size)) {
+	rc = block_read(dev_handle, &bufpos, &buflen, &off,
+	    bb_buf, size, size);
+	if (rc != EOK) {
 	    	free(bb_buf);
-		return EIO;	/* XXX real error code */
+		return rc;
 	}
 	devcon->bb_buf = bb_buf;
@@ -220,7 +222,7 @@
  * @param block_size	Block size to be used for the transfer.
  *
- * @return		True on success, false on failure.
+ * @return		EOK on success or a negative return code on failure.
  */
-bool
+int
 block_read(int dev_handle, off_t *bufpos, size_t *buflen, off_t *pos, void *dst,
     size_t size, size_t block_size)
@@ -257,5 +259,5 @@
 			    *pos / block_size, block_size, &retval);
 			if ((rc != EOK) || (retval != EOK))
-				return false;
+				return (rc != EOK ? rc : retval);
 			
 			*bufpos = 0;
@@ -264,5 +266,5 @@
 	}
 	
-	return true;
+	return EOK;
 }
 
@@ -286,6 +288,6 @@
 	b->size = bs;
 
-	if (!block_read(dev_handle, &bufpos, &buflen, &pos, b->data,
-	    bs, bs)) {
+	if (block_read(dev_handle, &bufpos, &buflen, &pos, b->data,
+	    bs, bs) != EOK) {
 		free(b->data);
 		free(b);
Index: uspace/lib/libblock/libblock.h
===================================================================
--- uspace/lib/libblock/libblock.h	(revision 6284978581040c06c173f1990897a36fe2cd2cb2)
+++ uspace/lib/libblock/libblock.h	(revision 0c243b47a3b83c55eb04286f7246f90cbe615ad8)
@@ -77,5 +77,5 @@
 extern void block_put(block_t *);
 
-extern bool block_read(int, off_t *, size_t *, off_t *, void *, size_t, size_t);
+extern int block_read(int, off_t *, size_t *, off_t *, void *, size_t, size_t);
 
 #endif
Index: uspace/srv/fs/tmpfs/tmpfs_dump.c
===================================================================
--- uspace/srv/fs/tmpfs/tmpfs_dump.c	(revision 6284978581040c06c173f1990897a36fe2cd2cb2)
+++ uspace/srv/fs/tmpfs/tmpfs_dump.c	(revision 0c243b47a3b83c55eb04286f7246f90cbe615ad8)
@@ -66,6 +66,6 @@
 		uint32_t size;
 		
-		if (!block_read(dev, bufpos, buflen, pos, &entry, sizeof(entry),
-		    TMPFS_BLOCK_SIZE))
+		if (block_read(dev, bufpos, buflen, pos, &entry, sizeof(entry),
+		    TMPFS_BLOCK_SIZE) != EOK)
 			return false;
 		
@@ -86,6 +86,6 @@
 			}
 			
-			if (!block_read(dev, bufpos, buflen, pos, fname,
-			    entry.len, TMPFS_BLOCK_SIZE)) {
+			if (block_read(dev, bufpos, buflen, pos, fname,
+			    entry.len, TMPFS_BLOCK_SIZE) != EOK) {
 				ops->destroy((void *) node);
 				free(fname);
@@ -101,6 +101,6 @@
 			free(fname);
 			
-			if (!block_read(dev, bufpos, buflen, pos, &size,
-			    sizeof(size), TMPFS_BLOCK_SIZE))
+			if (block_read(dev, bufpos, buflen, pos, &size,
+			    sizeof(size), TMPFS_BLOCK_SIZE) != EOK)
 				return false;
 			
@@ -112,6 +112,6 @@
 			
 			node->size = size;
-			if (!block_read(dev, bufpos, buflen, pos, node->data,
-			    size, TMPFS_BLOCK_SIZE))
+			if (block_read(dev, bufpos, buflen, pos, node->data,
+			    size, TMPFS_BLOCK_SIZE) != EOK)
 				return false;
 			
@@ -128,6 +128,6 @@
 			}
 			
-			if (!block_read(dev, bufpos, buflen, pos,
-			    fname, entry.len, TMPFS_BLOCK_SIZE)) {
+			if (block_read(dev, bufpos, buflen, pos, fname,
+			    entry.len, TMPFS_BLOCK_SIZE) != EOK) {
 				ops->destroy((void *) node);
 				free(fname);
@@ -170,6 +170,6 @@
 	
 	char tag[6];
-	if (!block_read(dev, &bufpos, &buflen, &pos, tag, 5,
-	    TMPFS_BLOCK_SIZE))
+	if (block_read(dev, &bufpos, &buflen, &pos, tag, 5,
+	    TMPFS_BLOCK_SIZE) != EOK)
 		goto error;
 	
