if (!err) {
                struct xts_request_ctx *rctx = skcipher_request_ctx(req);
 
-               rctx->subreq.base.flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
+               rctx->subreq.base.flags &= CRYPTO_TFM_REQ_MAY_BACKLOG;
                err = xts_xor_tweak_post(req, true);
 
                if (!err && unlikely(req->cryptlen % XTS_BLOCK_SIZE)) {
                        err = xts_cts_final(req, crypto_skcipher_encrypt);
-                       if (err == -EINPROGRESS)
+                       if (err == -EINPROGRESS || err == -EBUSY)
                                return;
                }
        }
        if (!err) {
                struct xts_request_ctx *rctx = skcipher_request_ctx(req);
 
-               rctx->subreq.base.flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
+               rctx->subreq.base.flags &= CRYPTO_TFM_REQ_MAY_BACKLOG;
                err = xts_xor_tweak_post(req, false);
 
                if (!err && unlikely(req->cryptlen % XTS_BLOCK_SIZE)) {
                        err = xts_cts_final(req, crypto_skcipher_decrypt);
-                       if (err == -EINPROGRESS)
+                       if (err == -EINPROGRESS || err == -EBUSY)
                                return;
                }
        }