===================================================================
@@ -859,6 +859,7 @@ static void complete_journal_encrypt(str
static bool do_crypt(bool encrypt, struct skcipher_request *req, struct journal_completion *comp)
{
int r;
+retry:
skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
complete_journal_encrypt, comp);
if (likely(encrypt))
@@ -874,6 +875,10 @@ static bool do_crypt(bool encrypt, struc
reinit_completion(&comp->ic->crypto_backoff);
return true;
}
+ if (r == -ENOMEM) {
+ msleep(1);
+ goto retry;
+ }
dm_integrity_io_error(comp->ic, "encrypt", r);
return false;
}
dm-integrity: sleep and retry on allocation errors Some hardware crypto drivers use GFP_ATOMIC allocations in the request routine. These allocations can randomly fail - for example, they fail if too many network packets are received. If we propagated the failure up to the I/O stack, it would cause I/O errors. So, we sleep and retry. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Cc: stable@vger.kernel.org --- drivers/md/dm-integrity.c | 5 +++++ 1 file changed, 5 insertions(+) -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel