From patchwork Fri Jul 8 18:18:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dylan Yudaken X-Patchwork-Id: 12911601 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8CBA8C433EF for ; Fri, 8 Jul 2022 18:18:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238661AbiGHSSx (ORCPT ); Fri, 8 Jul 2022 14:18:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39836 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238791AbiGHSSu (ORCPT ); Fri, 8 Jul 2022 14:18:50 -0400 Received: from mx0b-00082601.pphosted.com (mx0b-00082601.pphosted.com [67.231.153.30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A8AF7823B8 for ; Fri, 8 Jul 2022 11:18:48 -0700 (PDT) Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 268HAbBV027511 for ; Fri, 8 Jul 2022 11:18:48 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=BEbVfYQJEMiim0GXf7aBYrR5C7mCIEETD+2C6oxId7g=; b=bUPWD2miMXG2Ym9JflugIDh6CwZypaDzxYUxMjP3yOCNzCgfZpLW9+38SdFsRi9CNu6C C6lbX9nF3LQvy8PBg2HOvsiqVATiFLT97izcZqSzEFTfgCD1N3/bJQuS/9o87fYm0crT 6GEIdiiueVxr0PyfnIgecjir2hF6IU66jYs= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3h6eg1ky56-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 08 Jul 2022 11:18:47 -0700 Received: from twshared22934.08.ash9.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:82::c) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 8 Jul 2022 11:18:47 -0700 Received: by devbig038.lla2.facebook.com (Postfix, from userid 572232) id 209F22B9EC1E; Fri, 8 Jul 2022 11:18:41 -0700 (PDT) From: Dylan Yudaken To: Jens Axboe , Pavel Begunkov , CC: , Dylan Yudaken Subject: [PATCH for-next 1/4] io_uring: fix multishot ending when not polled Date: Fri, 8 Jul 2022 11:18:35 -0700 Message-ID: <20220708181838.1495428-2-dylany@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220708181838.1495428-1-dylany@fb.com> References: <20220708181838.1495428-1-dylany@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: t7ZSTwRN_iTuP_dpz7fhUV1Ej-Vq1y_7 X-Proofpoint-GUID: t7ZSTwRN_iTuP_dpz7fhUV1Ej-Vq1y_7 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-08_14,2022-07-08_01,2022-06-22_01 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org If multishot is not actually polling then return IOU_OK rather than the result. If the result was > 0 this will confuse things further up the callstack which expect a return <= 0. Fixes: 1300ebb20286 ("io_uring: multishot recv") Signed-off-by: Dylan Yudaken --- io_uring/net.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/io_uring/net.c b/io_uring/net.c index ba7e94ff287c..188edbed1eb7 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -508,6 +508,8 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret, unsigned int c if (req->flags & REQ_F_POLLED) *ret = IOU_STOP_MULTISHOT; + else + *ret = IOU_OK; return true; } From patchwork Fri Jul 8 18:18:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dylan Yudaken X-Patchwork-Id: 12911603 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 36B30C433EF for ; Fri, 8 Jul 2022 18:19:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238280AbiGHSS7 (ORCPT ); Fri, 8 Jul 2022 14:18:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239135AbiGHSSx (ORCPT ); Fri, 8 Jul 2022 14:18:53 -0400 Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8425E82396 for ; Fri, 8 Jul 2022 11:18:52 -0700 (PDT) Received: from pps.filterd (m0148461.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 268HAXR2025070 for ; Fri, 8 Jul 2022 11:18:52 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=KdCc4KrhWrRWer2ak8qf+eJb+HmLvN8qCo6zNNUoH/s=; b=PaBj+fHoL5kPN6aqLxjEyyVH6JKD5uuvBFEG8G0Eb64IXVmaGWmveDWDPClMVoYIQ+CU 6kRdDfeyMRflKiS4vAx8wgLyWZ5bEa9+PNL5wppKbfZfEz/FQcmuQruZMB5/8ioTTfdb WgFo4qtLeQS0kph9wvMre0BCKnzwDVTVGow= Received: from mail.thefacebook.com ([163.114.132.120]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3h5y1dj772-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 08 Jul 2022 11:18:52 -0700 Received: from twshared14577.08.ash8.facebook.com (2620:10d:c085:108::4) by mail.thefacebook.com (2620:10d:c085:21d::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 8 Jul 2022 11:18:50 -0700 Received: by devbig038.lla2.facebook.com (Postfix, from userid 572232) id AEF432B9EC23; Fri, 8 Jul 2022 11:18:41 -0700 (PDT) From: Dylan Yudaken To: Jens Axboe , Pavel Begunkov , CC: , Dylan Yudaken Subject: [PATCH for-next 2/4] io_uring: support 0 length iov in buffer select in compat Date: Fri, 8 Jul 2022 11:18:36 -0700 Message-ID: <20220708181838.1495428-3-dylany@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220708181838.1495428-1-dylany@fb.com> References: <20220708181838.1495428-1-dylany@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-GUID: IjgDvSYdn3QhhUGBnWGV6EG6oiYWB4bZ X-Proofpoint-ORIG-GUID: IjgDvSYdn3QhhUGBnWGV6EG6oiYWB4bZ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-08_15,2022-07-08_01,2022-06-22_01 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org Match up work done in "io_uring: allow iov_len = 0 for recvmsg and buffer select", but for compat code path. Fixes: a68caad69ce5 ("io_uring: allow iov_len = 0 for recvmsg and buffer select") Signed-off-by: Dylan Yudaken --- io_uring/net.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/io_uring/net.c b/io_uring/net.c index 188edbed1eb7..997c17512694 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -384,16 +384,21 @@ static int __io_compat_recvmsg_copy_hdr(struct io_kiocb *req, if (req->flags & REQ_F_BUFFER_SELECT) { compat_ssize_t clen; - if (len > 1) - return -EINVAL; - if (!access_ok(uiov, sizeof(*uiov))) - return -EFAULT; - if (__get_user(clen, &uiov->iov_len)) - return -EFAULT; - if (clen < 0) + if (len == 0) { + sr->len = 0; + iomsg->free_iov = NULL; + } else if (len > 1) { return -EINVAL; - sr->len = clen; - iomsg->free_iov = NULL; + } else { + if (!access_ok(uiov, sizeof(*uiov))) + return -EFAULT; + if (__get_user(clen, &uiov->iov_len)) + return -EFAULT; + if (clen < 0) + return -EINVAL; + sr->len = clen; + iomsg->free_iov = NULL; + } } else { iomsg->free_iov = iomsg->fast_iov; ret = __import_iovec(READ, (struct iovec __user *)uiov, len, From patchwork Fri Jul 8 18:18:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dylan Yudaken X-Patchwork-Id: 12911602 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 56A43C433EF for ; Fri, 8 Jul 2022 18:18:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239139AbiGHSS4 (ORCPT ); Fri, 8 Jul 2022 14:18:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39878 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239141AbiGHSSv (ORCPT ); Fri, 8 Jul 2022 14:18:51 -0400 Received: from mx0b-00082601.pphosted.com (mx0b-00082601.pphosted.com [67.231.153.30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 526CD7D1EB for ; Fri, 8 Jul 2022 11:18:50 -0700 (PDT) Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 268HAXkB027064 for ; Fri, 8 Jul 2022 11:18:49 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=xO0ni6AN504NEFekeHKz9B4lNNoPkx+1kDAAP6+X1sM=; b=czkolZrrrPPOUz434xuhj98CRqV8y8LANFGbD6ftYsCJqXDeL62ItgXnl4picyyVYSXB rkJhRlihSHBLdCAvP8iwu+LiFvEBMqvxeWPIIm3a/gS/jpo62LqfAlhhvCUGAVEc8cwI t3CLcOZNDNDR/4vSf2zYBhtEVDBP/yrbDY0= Received: from mail.thefacebook.com ([163.114.132.120]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3h6eg1ky59-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 08 Jul 2022 11:18:49 -0700 Received: from twshared18317.08.ash9.facebook.com (2620:10d:c085:208::11) by mail.thefacebook.com (2620:10d:c085:21d::4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 8 Jul 2022 11:18:47 -0700 Received: by devbig038.lla2.facebook.com (Postfix, from userid 572232) id 7618E2B9EC2E; Fri, 8 Jul 2022 11:18:42 -0700 (PDT) From: Dylan Yudaken To: Jens Axboe , Pavel Begunkov , CC: , Dylan Yudaken Subject: [PATCH for-next 3/4] io-uring: add recycle_async to ops Date: Fri, 8 Jul 2022 11:18:37 -0700 Message-ID: <20220708181838.1495428-4-dylany@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220708181838.1495428-1-dylany@fb.com> References: <20220708181838.1495428-1-dylany@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: 7KOO3AoVSW26BWY_QUpuMIfGripjxapp X-Proofpoint-GUID: 7KOO3AoVSW26BWY_QUpuMIfGripjxapp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-08_14,2022-07-08_01,2022-06-22_01 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org Some ops recycle or cache async data when they are done. Build this into the framework for async data so that we can rely on io_uring to know when a request is done (rather than doing it inline in a handler). Signed-off-by: Dylan Yudaken --- io_uring/io_uring.c | 8 ++++++-- io_uring/opdef.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index 32110c5b4059..3e9fdaf9c72c 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -1578,8 +1578,12 @@ static void io_clean_op(struct io_kiocb *req) if (req->flags & REQ_F_CREDS) put_cred(req->creds); if (req->flags & REQ_F_ASYNC_DATA) { - kfree(req->async_data); - req->async_data = NULL; + const struct io_op_def *def = &io_op_defs[req->opcode]; + + if (!(def->recycle_async && def->recycle_async(req))) { + kfree(req->async_data); + req->async_data = NULL; + } } req->flags &= ~IO_REQ_CLEAN_FLAGS; } diff --git a/io_uring/opdef.h b/io_uring/opdef.h index ece8ed4f96c4..3de64731fc5f 100644 --- a/io_uring/opdef.h +++ b/io_uring/opdef.h @@ -34,6 +34,7 @@ struct io_op_def { int (*issue)(struct io_kiocb *, unsigned int); int (*prep_async)(struct io_kiocb *); void (*cleanup)(struct io_kiocb *); + bool (*recycle_async)(struct io_kiocb *); }; extern const struct io_op_def io_op_defs[]; From patchwork Fri Jul 8 18:18:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dylan Yudaken X-Patchwork-Id: 12911604 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2454EC43334 for ; Fri, 8 Jul 2022 18:19:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238810AbiGHSTA (ORCPT ); Fri, 8 Jul 2022 14:19:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39650 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238535AbiGHSSy (ORCPT ); Fri, 8 Jul 2022 14:18:54 -0400 Received: from mx0b-00082601.pphosted.com (mx0b-00082601.pphosted.com [67.231.153.30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BA114823B0 for ; Fri, 8 Jul 2022 11:18:53 -0700 (PDT) Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 268HAatO027372 for ; Fri, 8 Jul 2022 11:18:52 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=lgcixcPTzwnEb+MWYgxBSwdUAkCiiDjL6xo5mS4d2w4=; b=fRtfEihPBbKOVWpjil52uDyJVPZhPMl5x8J8xS251lF1xUDXy/Ygy+LriXOl2DoeUKNs uRE62feq0RSJvhvG5EVKRjtvMSdwL0Vjq4EPNKCLfFEOfP53yI4rsJ+tNnDoI+HemUL7 ZNQS7H7XhfNtyDuEry6oOxWh+wyX71On94A= Received: from mail.thefacebook.com ([163.114.132.120]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3h6eg1ky5r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 08 Jul 2022 11:18:52 -0700 Received: from twshared25478.08.ash9.facebook.com (2620:10d:c085:108::4) by mail.thefacebook.com (2620:10d:c085:21d::4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 8 Jul 2022 11:18:51 -0700 Received: by devbig038.lla2.facebook.com (Postfix, from userid 572232) id 49AD12B9EC58; Fri, 8 Jul 2022 11:18:43 -0700 (PDT) From: Dylan Yudaken To: Jens Axboe , Pavel Begunkov , CC: , Dylan Yudaken Subject: [PATCH for-next 4/4] io_uring: move netmsg recycling into io_uring cleanup Date: Fri, 8 Jul 2022 11:18:38 -0700 Message-ID: <20220708181838.1495428-5-dylany@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220708181838.1495428-1-dylany@fb.com> References: <20220708181838.1495428-1-dylany@fb.com> MIME-Version: 1.0 X-FB-Internal: Safe X-Proofpoint-ORIG-GUID: GZ3rZkJv6jImhti-lLFuOFA-kZ1mbTyI X-Proofpoint-GUID: GZ3rZkJv6jImhti-lLFuOFA-kZ1mbTyI X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-08_14,2022-07-08_01,2022-06-22_01 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org Specifically will be useful for multishot as the lifetime of a request is a bit more complicated, but generally makes things a bit neater. Signed-off-by: Dylan Yudaken --- io_uring/net.c | 10 ++++------ io_uring/net.h | 1 + io_uring/opdef.c | 2 ++ 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/io_uring/net.c b/io_uring/net.c index 997c17512694..c1cbafe96c63 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -98,18 +98,18 @@ static bool io_net_retry(struct socket *sock, int flags) return sock->type == SOCK_STREAM || sock->type == SOCK_SEQPACKET; } -static void io_netmsg_recycle(struct io_kiocb *req, unsigned int issue_flags) +bool io_netmsg_recycle(struct io_kiocb *req) { struct io_async_msghdr *hdr = req->async_data; - if (!hdr || issue_flags & IO_URING_F_UNLOCKED) - return; - if (io_alloc_cache_store(&req->ctx->netmsg_cache)) { hlist_add_head(&hdr->cache_list, &req->ctx->netmsg_cache.list); req->async_data = NULL; req->flags &= ~REQ_F_ASYNC_DATA; + return true; } + + return false; } static struct io_async_msghdr *io_recvmsg_alloc_async(struct io_kiocb *req, @@ -261,7 +261,6 @@ int io_sendmsg(struct io_kiocb *req, unsigned int issue_flags) if (kmsg->free_iov) kfree(kmsg->free_iov); req->flags &= ~REQ_F_NEED_CLEANUP; - io_netmsg_recycle(req, issue_flags); if (ret >= 0) ret += sr->done_io; else if (sr->done_io) @@ -583,7 +582,6 @@ int io_recvmsg(struct io_kiocb *req, unsigned int issue_flags) /* fast path, check for non-NULL to avoid function call */ if (kmsg->free_iov) kfree(kmsg->free_iov); - io_netmsg_recycle(req, issue_flags); req->flags &= ~REQ_F_NEED_CLEANUP; if (ret > 0) ret += sr->done_io; diff --git a/io_uring/net.h b/io_uring/net.h index 576efb602c7f..c5a897e61f10 100644 --- a/io_uring/net.h +++ b/io_uring/net.h @@ -44,6 +44,7 @@ int io_connect_prep_async(struct io_kiocb *req); int io_connect_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); int io_connect(struct io_kiocb *req, unsigned int issue_flags); +bool io_netmsg_recycle(struct io_kiocb *req); void io_flush_netmsg_cache(struct io_ring_ctx *ctx); #else static inline void io_flush_netmsg_cache(struct io_ring_ctx *ctx) diff --git a/io_uring/opdef.c b/io_uring/opdef.c index a7b84b43e6c2..b525e37f397a 100644 --- a/io_uring/opdef.c +++ b/io_uring/opdef.c @@ -153,6 +153,7 @@ const struct io_op_def io_op_defs[] = { .issue = io_sendmsg, .prep_async = io_sendmsg_prep_async, .cleanup = io_sendmsg_recvmsg_cleanup, + .recycle_async = io_netmsg_recycle, #else .prep = io_eopnotsupp_prep, #endif @@ -170,6 +171,7 @@ const struct io_op_def io_op_defs[] = { .issue = io_recvmsg, .prep_async = io_recvmsg_prep_async, .cleanup = io_sendmsg_recvmsg_cleanup, + .recycle_async = io_netmsg_recycle, #else .prep = io_eopnotsupp_prep, #endif