diff --git a/file_reader.go b/file_reader.go
index <HASH>..<HASH> 100644
--- a/file_reader.go
+++ b/file_reader.go
@@ -187,14 +187,14 @@ func (f *FileReader) Read(b []byte) (int, error) {
 		}
 	}
 
-	if f.blockReader == nil {
-		err := f.getNewBlockReader()
-		if err != nil {
-			return 0, err
+	for {
+		if f.blockReader == nil {
+			err := f.getNewBlockReader()
+			if err != nil {
+				return 0, err
+			}
 		}
-	}
 
-	for {
 		n, err := f.blockReader.Read(b)
 		f.offset += int64(n)
 
@@ -204,9 +204,12 @@ func (f *FileReader) Read(b []byte) (int, error) {
 			return n, err
 		} else if n > 0 {
 			return n, nil
-		} else {
-			f.blockReader.Close()
-			f.getNewBlockReader()
+		}
+
+		err = f.blockReader.Close()
+		f.blockReader = nil
+		if err != nil {
+			return n, err
 		}
 	}
 }
Don't swallow errors from BlockReader.Close