USB: serial: qcserial: add new usb-id for Dell Wireless DW5826e
[platform/kernel/linux-rpi.git] / crypto / af_alg.c
index ea6fb8e..68cc929 100644 (file)
@@ -1116,9 +1116,13 @@ EXPORT_SYMBOL_GPL(af_alg_sendmsg);
 void af_alg_free_resources(struct af_alg_async_req *areq)
 {
        struct sock *sk = areq->sk;
+       struct af_alg_ctx *ctx;
 
        af_alg_free_areq_sgls(areq);
        sock_kfree_s(sk, areq, areq->areqlen);
+
+       ctx = alg_sk(sk)->private;
+       ctx->inflight = false;
 }
 EXPORT_SYMBOL_GPL(af_alg_free_resources);
 
@@ -1188,11 +1192,19 @@ EXPORT_SYMBOL_GPL(af_alg_poll);
 struct af_alg_async_req *af_alg_alloc_areq(struct sock *sk,
                                           unsigned int areqlen)
 {
-       struct af_alg_async_req *areq = sock_kmalloc(sk, areqlen, GFP_KERNEL);
+       struct af_alg_ctx *ctx = alg_sk(sk)->private;
+       struct af_alg_async_req *areq;
+
+       /* Only one AIO request can be in flight. */
+       if (ctx->inflight)
+               return ERR_PTR(-EBUSY);
 
+       areq = sock_kmalloc(sk, areqlen, GFP_KERNEL);
        if (unlikely(!areq))
                return ERR_PTR(-ENOMEM);
 
+       ctx->inflight = true;
+
        areq->areqlen = areqlen;
        areq->sk = sk;
        areq->first_rsgl.sgl.sgt.sgl = areq->first_rsgl.sgl.sgl;