diff options
| author | Mikulas Patocka <mpatocka@redhat.com> | 2025-09-17 17:52:09 +0200 |
|---|---|---|
| committer | Mikulas Patocka <mpatocka@redhat.com> | 2025-09-23 14:51:04 +0200 |
| commit | 1cd83fb79083a2431f513956afca92b690ef11ad (patch) | |
| tree | 16e0591c8fafc47f19c009668044421c9775abd0 | |
| parent | 5076d4599ce1702ab3615c7600504ba68df02168 (diff) | |
dm-integrity: prefer synchronous hash interface
The previous patch preferred async interface for the purpose of testing.
However, the synchronous interface is faster, so it should be preferred.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
| -rw-r--r-- | drivers/md/dm-integrity.c | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c index 567060fce8cf..7fc855659639 100644 --- a/drivers/md/dm-integrity.c +++ b/drivers/md/dm-integrity.c @@ -4354,13 +4354,33 @@ static int get_mac(struct crypto_shash **shash, struct crypto_ahash **ahash, int r; if (a->alg_string) { + if (shash) { + *shash = crypto_alloc_shash(a->alg_string, 0, CRYPTO_ALG_ALLOCATES_MEMORY); + if (IS_ERR(*shash)) { + *shash = NULL; + goto try_ahash; + } + if (a->key) { + r = crypto_shash_setkey(*shash, a->key, a->key_size); + if (r) { + *error = error_key; + return r; + } + } else if (crypto_shash_get_flags(*shash) & CRYPTO_TFM_NEED_KEY) { + *error = error_key; + return -ENOKEY; + } + return 0; + } +try_ahash: if (ahash) { *ahash = crypto_alloc_ahash(a->alg_string, 0, CRYPTO_ALG_ALLOCATES_MEMORY); if (IS_ERR(*ahash)) { + *error = error_alg; + r = PTR_ERR(*ahash); *ahash = NULL; - goto try_shash; + return r; } - if (a->key) { r = crypto_ahash_setkey(*ahash, a->key, a->key_size); if (r) { @@ -4371,29 +4391,10 @@ static int get_mac(struct crypto_shash **shash, struct crypto_ahash **ahash, *error = error_key; return -ENOKEY; } - return 0; } - -try_shash: - *shash = crypto_alloc_shash(a->alg_string, 0, CRYPTO_ALG_ALLOCATES_MEMORY); - if (IS_ERR(*shash)) { - *error = error_alg; - r = PTR_ERR(*shash); - *shash = NULL; - return r; - } - - if (a->key) { - r = crypto_shash_setkey(*shash, a->key, a->key_size); - if (r) { - *error = error_key; - return r; - } - } else if (crypto_shash_get_flags(*shash) & CRYPTO_TFM_NEED_KEY) { - *error = error_key; - return -ENOKEY; - } + *error = error_alg; + return -ENOENT; } return 0; |
