--- y/mm/filemap.c +++ f/mm/filemap.c @@ -3523,16 +3523,21 @@ repeat: filler: err = filler(file, folio); if (err < 0) { + if (folio_test_locked(folio)) + folio_unlock(folio); folio_put(folio); return ERR_PTR(err); } - folio_wait_locked(folio); if (!folio_test_uptodate(folio)) { + if (folio_test_locked(folio)) + folio_unlock(folio); folio_put(folio); return ERR_PTR(-EIO); } + if (folio_test_locked(folio)) + folio_unlock(folio); goto out; } if (folio_test_uptodate(folio))