memset(rctx, 0, sizeof(struct sun8i_ce_hash_reqctx));
 
        ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm);
-       rctx->fallback_req.base.flags = areq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP;
+       ahash_request_set_callback(&rctx->fallback_req,
+                                  areq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
+                                  areq->base.complete, areq->base.data);
 
        return crypto_ahash_init(&rctx->fallback_req);
 }
        struct sun8i_ce_hash_tfm_ctx *tfmctx = crypto_ahash_ctx(tfm);
 
        ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm);
-       rctx->fallback_req.base.flags = areq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP;
+       ahash_request_set_callback(&rctx->fallback_req,
+                                  areq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
+                                  areq->base.complete, areq->base.data);
 
        return crypto_ahash_export(&rctx->fallback_req, out);
 }
        struct sun8i_ce_hash_tfm_ctx *tfmctx = crypto_ahash_ctx(tfm);
 
        ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm);
-       rctx->fallback_req.base.flags = areq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP;
+       ahash_request_set_callback(&rctx->fallback_req,
+                                  areq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
+                                  areq->base.complete, areq->base.data);
 
        return crypto_ahash_import(&rctx->fallback_req, in);
 }
        sun8i_ce_hash_stat_fb_inc(tfm);
 
        ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm);
-       rctx->fallback_req.base.flags = areq->base.flags &
-                                       CRYPTO_TFM_REQ_MAY_SLEEP;
-       rctx->fallback_req.result = areq->result;
+       ahash_request_set_callback(&rctx->fallback_req,
+                                  areq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
+                                  areq->base.complete, areq->base.data);
+       ahash_request_set_crypt(&rctx->fallback_req, NULL, areq->result, 0);
 
        return crypto_ahash_final(&rctx->fallback_req);
 }
        struct sun8i_ce_hash_tfm_ctx *tfmctx = crypto_ahash_ctx(tfm);
 
        ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm);
-       rctx->fallback_req.base.flags = areq->base.flags &
-                                       CRYPTO_TFM_REQ_MAY_SLEEP;
-       rctx->fallback_req.nbytes = areq->nbytes;
-       rctx->fallback_req.src = areq->src;
+       ahash_request_set_callback(&rctx->fallback_req,
+                                  areq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
+                                  areq->base.complete, areq->base.data);
+       ahash_request_set_crypt(&rctx->fallback_req, areq->src, NULL, areq->nbytes);
 
        return crypto_ahash_update(&rctx->fallback_req);
 }
        sun8i_ce_hash_stat_fb_inc(tfm);
 
        ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm);
-       rctx->fallback_req.base.flags = areq->base.flags &
-                                       CRYPTO_TFM_REQ_MAY_SLEEP;
-
-       rctx->fallback_req.nbytes = areq->nbytes;
-       rctx->fallback_req.src = areq->src;
-       rctx->fallback_req.result = areq->result;
+       ahash_request_set_callback(&rctx->fallback_req,
+                                  areq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
+                                  areq->base.complete, areq->base.data);
+       ahash_request_set_crypt(&rctx->fallback_req, areq->src, areq->result,
+                               areq->nbytes);
 
        return crypto_ahash_finup(&rctx->fallback_req);
 }
        sun8i_ce_hash_stat_fb_inc(tfm);
 
        ahash_request_set_tfm(&rctx->fallback_req, tfmctx->fallback_tfm);
-       rctx->fallback_req.base.flags = areq->base.flags &
-                                       CRYPTO_TFM_REQ_MAY_SLEEP;
-
-       rctx->fallback_req.nbytes = areq->nbytes;
-       rctx->fallback_req.src = areq->src;
-       rctx->fallback_req.result = areq->result;
+       ahash_request_set_callback(&rctx->fallback_req,
+                                  areq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP,
+                                  areq->base.complete, areq->base.data);
+       ahash_request_set_crypt(&rctx->fallback_req, areq->src, areq->result,
+                               areq->nbytes);
 
        return crypto_ahash_digest(&rctx->fallback_req);
 }