crypto: acomp - Clone folios properly

The folios contain references to the request itself so they must
be setup again in the cloned request.

Fixes: 5f3437e9c8 ("crypto: acomp - Simplify folio handling")
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
pull/1250/head
Herbert Xu 2025-05-01 20:37:30 +08:00
parent 8f66ccbd8f
commit 0efae41128
2 changed files with 20 additions and 6 deletions

View File

@ -566,5 +566,23 @@ int acomp_walk_virt(struct acomp_walk *__restrict walk,
}
EXPORT_SYMBOL_GPL(acomp_walk_virt);
struct acomp_req *acomp_request_clone(struct acomp_req *req,
size_t total, gfp_t gfp)
{
struct acomp_req *nreq;
nreq = container_of(crypto_request_clone(&req->base, total, gfp),
struct acomp_req, base);
if (nreq == req)
return req;
if (req->src == &req->chain.ssg)
nreq->src = &nreq->chain.ssg;
if (req->dst == &req->chain.dsg)
nreq->dst = &nreq->chain.dsg;
return nreq;
}
EXPORT_SYMBOL_GPL(acomp_request_clone);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Asynchronous compression type");

View File

@ -551,11 +551,7 @@ static inline struct acomp_req *acomp_request_on_stack_init(
return req;
}
static inline struct acomp_req *acomp_request_clone(struct acomp_req *req,
size_t total, gfp_t gfp)
{
return container_of(crypto_request_clone(&req->base, total, gfp),
struct acomp_req, base);
}
struct acomp_req *acomp_request_clone(struct acomp_req *req,
size_t total, gfp_t gfp);
#endif