[dm-devel] [PATCH 5/4] dm-integrity: sleep and retry on allocation errors
Mikulas Patocka
mpatocka at redhat.com
Tue Jun 2 11:53:05 UTC 2020
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 at redhat.com>
Cc: stable at vger.kernel.org
---
drivers/md/dm-integrity.c | 5 +++++
1 file changed, 5 insertions(+)
Index: linux-2.6/drivers/md/dm-integrity.c
===================================================================
--- linux-2.6.orig/drivers/md/dm-integrity.c 2020-04-05 21:11:02.000000000 +0200
+++ linux-2.6/drivers/md/dm-integrity.c 2020-06-02 13:49:36.000000000 +0200
@@ -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;
}
More information about the dm-devel
mailing list