diff --git a/src/FileHash.php b/src/FileHash.php
index f10e409..3ef1ecb 100644
--- a/src/FileHash.php
+++ b/src/FileHash.php
@@ -197,10 +197,14 @@ class FileHash implements FileHashInterface {
    * {@inheritdoc}
    */
   public function entityStorageLoad($files): void {
+    static $auto_hash_attempts = [];
     // @todo Add a setting to toggle the auto-hash behavior?
     foreach ($files as $file) {
       foreach ($this->columns() as $column) {
-        if (!$file->{$column}->value && $this->shouldHash($file)) {
+        if (!$file->{$column}->value && $this->shouldHash($file) && empty($auto_hash_attempts[$file->id()])) {
+          // Mark this file as having been auto-hashed and do not reattempt
+          // during this execution in case of e.g. read failure.
+          $auto_hash_attempts[$file->id()] = TRUE;
           $file->original = clone($file);
           // Entity post-save will clean up the dangling "original" property.
           $file->save();
