ChangeLog, ext2_err.et.in, unix_io.c:
  unix_io.c (unix_read_blk): If ext2fs_llseek() fails, but errno is
  	zero, then return EXT2_IO_LLSEEK_FAILED.
  ext2_err.et.in: Add a new error code, EXT2_IO_LLSEEK_FAILED.

diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c
index c2007aa..2be3e70 100644
--- a/lib/ext2fs/unix_io.c
+++ b/lib/ext2fs/unix_io.c
@@ -193,7 +193,7 @@
 	size = (count < 0) ? -count : count * channel->block_size;
 	location = (ext2_loff_t) block * channel->block_size;
 	if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) {
-		retval = errno;
+		retval = errno ? errno : EXT2_IO_LLSEEK_FAILED;
 		goto error_out;
 	}
 	actual = read(data->dev, buf, size);
@@ -242,7 +242,7 @@
 
 	location = (ext2_loff_t) block * channel->block_size;
 	if (ext2fs_llseek(data->dev, location, SEEK_SET) != location) {
-		retval = errno;
+		retval = errno ? errno : EXT2_IO_LLSEEK_FAILED;
 		goto error_out;
 	}