From patchwork Sat Mar 8 17:19:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 14007594 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B5C71537A7 for ; Sat, 8 Mar 2025 17:18:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741454329; cv=none; b=OjZoVzb9tg1ezFJbA1vj5NIWrLdpy1Mn4I4Hvn77iV/dqlNSp2LMgwYl2e/ipRrYf6e3A7gsh8jRMnHy72DoDe6zSWfvjBK5ob01alld3iEhlPgKGGMYm9Pute+PUUkMlw0UpGQMY+2KO0L5ARujvnvBlus6SgMZ7ppu//i0x2M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741454329; c=relaxed/simple; bh=6i80ovfyORr/yhpKrJOs36/bZR5GrUw7XKI3ji4sT7k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qWGDuFkI0IbsRUw8ghu7cNobdd8AqNy9nGDwJMwHJzGp3Sk4hikQ9zpIrSN+y13zqwhant4Iyiye2f8oyyUbA+eo1bj9ey24xE+oc9pD+ONHpnLCaMeYL+Eiz21dxy4JWveevrwUMXSnpLVLlpu/RSDnow3QQzRkUhbjOm/ST1o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ImF9er5d; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ImF9er5d" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-3913d129c1aso319485f8f.0 for ; Sat, 08 Mar 2025 09:18:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741454325; x=1742059125; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LtqE12gnw7EN2lb/Iz3kGSiNacNbNCkQGVrgI9+v/qo=; b=ImF9er5d2te8nxOx2ysYJOfVMeMYTpRy5HXc8Wrx0ppTsrKCLxvrSvBBjn10GkkoWc 5+40oTopE7GeqrJ/oDz7Z06fiB7N5xXuADKlri+uHesMIPqiutclUuJjCnOnDgAFQWQ3 YtikcnW9P/ct5a2qImG6cQBZD4VNREd4K8OHHjZjDIU3C7b9fmPOtUhFa/2B28yM45ZU Rio6BKBxGEU6MVyBYA9oYWUOTCxmuDU9tl9iSJvEglZhRpFAb2TYRJ18y4eLfJxRelqf 1pAjvIXs7kNi4sDhGcEzLU2osa+1D1tdAhM/J9wmNAxZYSmL3LzeIxX46EKGkeofJotN 4xhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741454325; x=1742059125; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LtqE12gnw7EN2lb/Iz3kGSiNacNbNCkQGVrgI9+v/qo=; b=GQr6XLbSdDS1T+ocf/UY7QGjV/tMbrYGTBIJPpAcm4o5VrQoOLjiYmEBb42QbQlH8P znRV+mbIdOYm93Lkw8y7xu1YoaYIHgPn3zrdXKS3uzV3tlgcFDc+73OFE1b8MiA78Fos SZWJjSd3cPquEyoHtnIls+zesuvYRLmPdcIqBknnKrWiV28vjvLMqqfnhxjTo6dKxwHJ i1juBAvnWcR/AERW1Roy8Z/b3yhR/JieUn0mOZ2XDYbr0/pYeDQhazigEYNOc1WLarb2 VdX8BDrd2clD++dDgREZOx3BQbdS0m1DzDpu/p8z3K59ljfDApB1IfdHwSjpd+mEKcsR nodA== X-Gm-Message-State: AOJu0Yw6rbjVLYnK0TY6wGzn7ZiCTcVGjKvbAkqkd0XrXG+XFz24vwPF GrQxOOXYwm5MgXbGGwWW4VqXoFUSXVAjRQGUBGOldhkp6pPfCTG2HQyPGQ== X-Gm-Gg: ASbGnctX2nWXRISDVGGB1ejfBnpl191lOrwY6U6KKT0FBj7d5QVgrEL0qDx83JmsSkV ewJHvBXawNjqZ5VcUS5vyV6Cxi9yIZ720j8fGgUnIaSIFTLqp5gJJKc34Glujh7+qG26cWf3tvQ 3jKsUFSU4VstKjkxcSdumnXbqoSVITnuL+NcFlvbK7+0rI1OHMzq13C3wSfrJfPyUIR6a9SKx16 I7txxwOERIg64WI82sqYqtvjIWiO8l2anEiuz/WdVqPShZo/e3Ayn78/VcqzhGMPKv8t1XOAHvv l8DBCVF9+cPDKX0Mbyq2+4knCJjAYkYhf/V+jOvrWLR7nyEayIsquCCvog== X-Google-Smtp-Source: AGHT+IEUpmQxacOa9j1ObadDbtMeuX8nBeeQCI7UfrPW4UX+7/RqYJN1T97JzxCcEnpb3Si6WsY+PQ== X-Received: by 2002:a5d:6d8a:0:b0:38d:d166:d44 with SMTP id ffacd0b85a97d-3913af38f92mr2562472f8f.23.1741454324903; Sat, 08 Mar 2025 09:18:44 -0800 (PST) Received: from 127.0.0.1localhost ([85.255.236.160]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c015c2csm9196679f8f.49.2025.03.08.09.18.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Mar 2025 09:18:42 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 1/2] io_uring: return -EAGAIN to continue multishot Date: Sat, 8 Mar 2025 17:19:32 +0000 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: io-uring@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Multishot errors can be mapped 1:1 to normal errors, but there are not identical. It leads to a peculiar situation where all multishot requests has to check in what context they're run and return different codes. Unify them starting with EAGAIN / IOU_ISSUE_SKIP_COMPLETE(EIOCBQUEUED) pair, which mean that core io_uring still owns the request and it should be retried. In case of multishot it's naturally just continues to poll, otherwise it might poll, use iowq or do any other kind of allowed blocking. Introduce IOU_RETRY aliased to -EAGAIN for that. Apart from obvious upsides, multishot can now also check for misuse of IOU_ISSUE_SKIP_COMPLETE. Signed-off-by: Pavel Begunkov --- io_uring/io_uring.c | 4 +--- io_uring/io_uring.h | 8 ++++++++ io_uring/net.c | 47 ++++++++++++++------------------------------- io_uring/poll.c | 3 ++- io_uring/rw.c | 11 ++++------- 5 files changed, 29 insertions(+), 44 deletions(-) diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index fa342be39158..6499d8e4d3d0 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -1791,10 +1791,8 @@ int io_poll_issue(struct io_kiocb *req, io_tw_token_t tw) ret = __io_issue_sqe(req, issue_flags, &io_issue_defs[req->opcode]); + WARN_ON_ONCE(ret == IOU_ISSUE_SKIP_COMPLETE); WARN_ON_ONCE(ret == IOU_OK); - - if (ret == IOU_ISSUE_SKIP_COMPLETE) - ret = 0; return ret; } diff --git a/io_uring/io_uring.h b/io_uring/io_uring.h index daf0e3b740ee..3409740f6417 100644 --- a/io_uring/io_uring.h +++ b/io_uring/io_uring.h @@ -22,6 +22,14 @@ enum { IOU_OK = 0, IOU_ISSUE_SKIP_COMPLETE = -EIOCBQUEUED, + /* + * The request has more work to do and should be retried. io_uring will + * attempt to wait on the file for eligible opcodes, but otherwise + * it'll be handed to iowq for blocking execution. It works for normal + * requests as well as for the multi shot mode. + */ + IOU_RETRY = -EAGAIN, + /* * Requeue the task_work to restart operations on this request. The * actual value isn't important, should just be not an otherwise diff --git a/io_uring/net.c b/io_uring/net.c index 34a28689ec99..d9befb6fb8a7 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -898,8 +898,7 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret, */ if ((req->flags & REQ_F_APOLL_MULTISHOT) && !mshot_finished && io_req_post_cqe(req, *ret, cflags | IORING_CQE_F_MORE)) { - int mshot_retry_ret = IOU_ISSUE_SKIP_COMPLETE; - + *ret = IOU_RETRY; io_mshot_prep_retry(req, kmsg); /* Known not-empty or unknown state, retry */ if (cflags & IORING_CQE_F_SOCK_NONEMPTY || kmsg->msg.msg_inq < 0) { @@ -907,12 +906,9 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret, return false; /* mshot retries exceeded, force a requeue */ sr->nr_multishot_loops = 0; - mshot_retry_ret = IOU_REQUEUE; + if (issue_flags & IO_URING_F_MULTISHOT) + *ret = IOU_REQUEUE; } - if (issue_flags & IO_URING_F_MULTISHOT) - *ret = mshot_retry_ret; - else - *ret = -EAGAIN; return true; } @@ -1070,16 +1066,15 @@ int io_recvmsg(struct io_kiocb *req, unsigned int issue_flags) if (ret < min_ret) { if (ret == -EAGAIN && force_nonblock) { - if (issue_flags & IO_URING_F_MULTISHOT) { + if (issue_flags & IO_URING_F_MULTISHOT) io_kbuf_recycle(req, issue_flags); - return IOU_ISSUE_SKIP_COMPLETE; - } - return -EAGAIN; + + return IOU_RETRY; } if (ret > 0 && io_net_retry(sock, flags)) { sr->done_io += ret; req->flags |= REQ_F_BL_NO_RECYCLE; - return -EAGAIN; + return IOU_RETRY; } if (ret == -ERESTARTSYS) ret = -EINTR; @@ -1207,12 +1202,10 @@ int io_recv(struct io_kiocb *req, unsigned int issue_flags) ret = sock_recvmsg(sock, &kmsg->msg, flags); if (ret < min_ret) { if (ret == -EAGAIN && force_nonblock) { - if (issue_flags & IO_URING_F_MULTISHOT) { + if (issue_flags & IO_URING_F_MULTISHOT) io_kbuf_recycle(req, issue_flags); - return IOU_ISSUE_SKIP_COMPLETE; - } - return -EAGAIN; + return IOU_RETRY; } if (ret > 0 && io_net_retry(sock, flags)) { sr->len -= ret; @@ -1312,10 +1305,7 @@ int io_recvzc(struct io_kiocb *req, unsigned int issue_flags) return IOU_STOP_MULTISHOT; return IOU_OK; } - - if (issue_flags & IO_URING_F_MULTISHOT) - return IOU_ISSUE_SKIP_COMPLETE; - return -EAGAIN; + return IOU_RETRY; } void io_send_zc_cleanup(struct io_kiocb *req) @@ -1692,16 +1682,9 @@ int io_accept(struct io_kiocb *req, unsigned int issue_flags) put_unused_fd(fd); ret = PTR_ERR(file); if (ret == -EAGAIN && force_nonblock && - !(accept->iou_flags & IORING_ACCEPT_DONTWAIT)) { - /* - * if it's multishot and polled, we don't need to - * return EAGAIN to arm the poll infra since it - * has already been done - */ - if (issue_flags & IO_URING_F_MULTISHOT) - return IOU_ISSUE_SKIP_COMPLETE; - return ret; - } + !(accept->iou_flags & IORING_ACCEPT_DONTWAIT)) + return IOU_RETRY; + if (ret == -ERESTARTSYS) ret = -EINTR; } else if (!fixed) { @@ -1720,9 +1703,7 @@ int io_accept(struct io_kiocb *req, unsigned int issue_flags) io_req_post_cqe(req, ret, cflags | IORING_CQE_F_MORE)) { if (cflags & IORING_CQE_F_SOCK_NONEMPTY || arg.is_empty == -1) goto retry; - if (issue_flags & IO_URING_F_MULTISHOT) - return IOU_ISSUE_SKIP_COMPLETE; - return -EAGAIN; + return IOU_RETRY; } io_req_set_res(req, ret, cflags); diff --git a/io_uring/poll.c b/io_uring/poll.c index 176854882ba6..52e3c3e923f4 100644 --- a/io_uring/poll.c +++ b/io_uring/poll.c @@ -289,11 +289,12 @@ static int io_poll_check_events(struct io_kiocb *req, io_tw_token_t tw) } } else { int ret = io_poll_issue(req, tw); + if (ret == IOU_STOP_MULTISHOT) return IOU_POLL_REMOVE_POLL_USE_RES; else if (ret == IOU_REQUEUE) return IOU_POLL_REQUEUE; - if (ret < 0) + if (ret != IOU_RETRY && ret < 0) return ret; } diff --git a/io_uring/rw.c b/io_uring/rw.c index bf35599d1078..9a9c636defad 100644 --- a/io_uring/rw.c +++ b/io_uring/rw.c @@ -1068,9 +1068,7 @@ int io_read_mshot(struct io_kiocb *req, unsigned int issue_flags) */ if (io_kbuf_recycle(req, issue_flags)) rw->len = 0; - if (issue_flags & IO_URING_F_MULTISHOT) - return IOU_ISSUE_SKIP_COMPLETE; - return -EAGAIN; + return IOU_RETRY; } else if (ret <= 0) { io_kbuf_recycle(req, issue_flags); if (ret < 0) @@ -1088,16 +1086,15 @@ int io_read_mshot(struct io_kiocb *req, unsigned int issue_flags) rw->len = 0; /* similarly to above, reset len to 0 */ if (io_req_post_cqe(req, ret, cflags | IORING_CQE_F_MORE)) { - if (issue_flags & IO_URING_F_MULTISHOT) { + if (issue_flags & IO_URING_F_MULTISHOT) /* * Force retry, as we might have more data to * be read and otherwise it won't get retried * until (if ever) another poll is triggered. */ io_poll_multishot_retry(req); - return IOU_ISSUE_SKIP_COMPLETE; - } - return -EAGAIN; + + return IOU_RETRY; } } From patchwork Sat Mar 8 17:19:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 14007595 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6890A190470 for ; Sat, 8 Mar 2025 17:18:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741454330; cv=none; b=Y95ZKzR0GWNPrrG7VAx2D8g2jVLDnF9hR7qsk1Hr9lkdL5NXZ2ai0XqjPBV8bVxqWGDPrpxK9ivQbvX6jvDEx0tP5ugIlmTo/57HUclBXlnhZxL2t/ZscjVB+wZ/2v+xzshQ/cVqgvMXKlltmSBsnrwC5xkEiVMqSTxEAG6h4dM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741454330; c=relaxed/simple; bh=3A8Y6YUb7rsSuSmBvvPbmFYnPhoHu03bD2he3yxVf7M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=t360yzcnatdfQxREAO7GhKTmf6sU2OWaI03N5fivrEE2iQxD2LeeMTSzxaT90PYlkVI/hhx9H3PmmWldS7ncNbHJ+M3DMWOCKq1mQAQacDkKIZZ6LBnBC4ZySrQPIMHbNx6xQ294Yq7ePk5e5X9j4vb1WHh7kJvZieoMvhkMPyM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZYGQhmKB; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZYGQhmKB" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3912e96c8e8so1525065f8f.2 for ; Sat, 08 Mar 2025 09:18:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741454326; x=1742059126; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IrfV06AGx1xESncwZXqS4RDr35jlCOstJ8qP3MW0Z4U=; b=ZYGQhmKBwzNSiewLl3vQu6WJW8nqCAYLtLSeEyqBt0Y0YFHZr9ZvHnRKaN3MIZs/lZ 0CDf8wnJZwzCsP0aD2wJxcrqXFvHwfxmOZaEfs4bbtTAGkwRKhDdU9Fv4L58Yuopqp6R Hd4H5+10oX9U+lkPNVJv93EIv6EI/4o9kpg2/EdLRkRflCRrsJFnyQFcjaV4hxpZst5j fX0h1i1RN5FvR6N3c1xWPlOf8SW+pFF2/COzMJO3g/RcslFCafAYCozJxEqFh525khr5 UQN1ZxUtpDFUb2G7VR1bRdENQR6uc/0Tno+YNU/fpByXfsqVGHfd39q+AzTicBmnqa+w 8hPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741454326; x=1742059126; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IrfV06AGx1xESncwZXqS4RDr35jlCOstJ8qP3MW0Z4U=; b=jMoYdLLQE1yNlhOg737V1jHB9gGBplKANCUqGcrVmtZeV5ZeuVBvpqavScWGXey7v3 u+IRW0m/R9WKs42u+jNXMF7HGz2aoyhlFLq47ywW2OjFGR/VhaXgoy9qVygp8wqJiSwV AKmHFdm2oQM/L9Wy+oPLGsCNCtF9wE2Q/BXybdnJk6HBT3sRZCbi/wxdYXaC2dmz1goJ ErHmq2MRuVAoJdKk4ZcxZCpzy7Tkribnib0UX06hi9m6WtI8tDiZa9ffFafH/j4bZ2t7 rII0t5WX/u+z2tGlvds+X7U730I6XAMRsjw1+tmcMV6Ps/UfXrwDHSDH+IvrxpwUaXqc Htew== X-Gm-Message-State: AOJu0Yyt1hrWi6IBfrSceVJrBHRGKFdGfJHzR7asz3UvURZ2bOMLaCXu WsFpygtV3G0yeH3HG6d+DkNFIeBalpajh6jqmW3xyGO3xEZuD87sLUU8CQ== X-Gm-Gg: ASbGncsjjrx6X2DWyWSEp1No86TC0n08DfJNLAZIoiNT9ZvJsVUoNDGiuskkHITOL4n yJZ0t4sJTjwTbJKfvd4rCi3bvAyL77eQC64DI7gHbSY0Ov8jVamOhIqGsnA5Hi2HiCc72Lc3iSY u+sp0vV/1NtV/Qw43M1jaM9hMHstW0/abGBBJdKgVheQRyvWym435qSyrghGQogroYG88RaOaRg EcO1bxWAHsZldFeibv0x2GnWqtp/7ybXEIsrHPjv4akO8C4zi/PWkCsXwDYt+G97TcsyIHgBuPP 1IsBCEFiagbwL5OnTA3X8tXXtUWdTJSA8W58KhRocyFv80bKW11z2XZGWw== X-Google-Smtp-Source: AGHT+IF8kAXBHsTLpHGTl+IXL6I1WMOD7EFYyzfwi5vBpk+hdI5Z/knviphZDMkoVoctn2NmqKtV4Q== X-Received: by 2002:a5d:5f93:0:b0:391:2e6a:30fe with SMTP id ffacd0b85a97d-39132da07d0mr5482701f8f.39.1741454326252; Sat, 08 Mar 2025 09:18:46 -0800 (PST) Received: from 127.0.0.1localhost ([85.255.236.160]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c015c2csm9196679f8f.49.2025.03.08.09.18.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Mar 2025 09:18:45 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 2/2] io_uring: unify STOP_MULTISHOT with IOU_OK Date: Sat, 8 Mar 2025 17:19:33 +0000 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: io-uring@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 IOU_OK means that the request ownership is now handed back to core io_uring and it has to complete it using the result provided in req->cqe. Same is true for multishot and IOU_STOP_MULTISHOT. Rename it into IOU_COMPLETE to avoid confusion and use for both modes. Signed-off-by: Pavel Begunkov --- io_uring/io_uring.c | 1 - io_uring/io_uring.h | 11 +++-------- io_uring/net.c | 19 ++++--------------- io_uring/poll.c | 2 +- io_uring/rw.c | 4 +--- 5 files changed, 9 insertions(+), 28 deletions(-) diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index 6499d8e4d3d0..5ff30a7092ed 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -1792,7 +1792,6 @@ int io_poll_issue(struct io_kiocb *req, io_tw_token_t tw) ret = __io_issue_sqe(req, issue_flags, &io_issue_defs[req->opcode]); WARN_ON_ONCE(ret == IOU_ISSUE_SKIP_COMPLETE); - WARN_ON_ONCE(ret == IOU_OK); return ret; } diff --git a/io_uring/io_uring.h b/io_uring/io_uring.h index 3409740f6417..2308f39ed915 100644 --- a/io_uring/io_uring.h +++ b/io_uring/io_uring.h @@ -19,7 +19,9 @@ #endif enum { - IOU_OK = 0, + IOU_OK = 0, /* deprecated, use IOU_COMPLETE */ + IOU_COMPLETE = 0, + IOU_ISSUE_SKIP_COMPLETE = -EIOCBQUEUED, /* @@ -36,13 +38,6 @@ enum { * valid error code, yet less than -MAX_ERRNO and valid internally. */ IOU_REQUEUE = -3072, - - /* - * Intended only when both IO_URING_F_MULTISHOT is passed - * to indicate to the poll runner that multishot should be - * removed and the result is set on req->cqe.res. - */ - IOU_STOP_MULTISHOT = -ECANCELED, }; struct io_wait_queue { diff --git a/io_uring/net.c b/io_uring/net.c index d9befb6fb8a7..9fa5c9570875 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -915,11 +915,7 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret, /* Finish the request / stop multishot. */ finish: io_req_set_res(req, *ret, cflags); - - if (issue_flags & IO_URING_F_MULTISHOT) - *ret = IOU_STOP_MULTISHOT; - else - *ret = IOU_OK; + *ret = IOU_COMPLETE; io_req_msg_cleanup(req, issue_flags); return true; } @@ -1288,9 +1284,7 @@ int io_recvzc(struct io_kiocb *req, unsigned int issue_flags) if (len && zc->len == 0) { io_req_set_res(req, 0, 0); - if (issue_flags & IO_URING_F_MULTISHOT) - return IOU_STOP_MULTISHOT; - return IOU_OK; + return IOU_COMPLETE; } if (unlikely(ret <= 0) && ret != -EAGAIN) { if (ret == -ERESTARTSYS) @@ -1300,10 +1294,7 @@ int io_recvzc(struct io_kiocb *req, unsigned int issue_flags) req_set_fail(req); io_req_set_res(req, ret, 0); - - if (issue_flags & IO_URING_F_MULTISHOT) - return IOU_STOP_MULTISHOT; - return IOU_OK; + return IOU_COMPLETE; } return IOU_RETRY; } @@ -1709,9 +1700,7 @@ int io_accept(struct io_kiocb *req, unsigned int issue_flags) io_req_set_res(req, ret, cflags); if (ret < 0) req_set_fail(req); - if (!(issue_flags & IO_URING_F_MULTISHOT)) - return IOU_OK; - return IOU_STOP_MULTISHOT; + return IOU_COMPLETE; } int io_socket_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) diff --git a/io_uring/poll.c b/io_uring/poll.c index 52e3c3e923f4..8eb744eb9f4c 100644 --- a/io_uring/poll.c +++ b/io_uring/poll.c @@ -290,7 +290,7 @@ static int io_poll_check_events(struct io_kiocb *req, io_tw_token_t tw) } else { int ret = io_poll_issue(req, tw); - if (ret == IOU_STOP_MULTISHOT) + if (ret == IOU_COMPLETE) return IOU_POLL_REMOVE_POLL_USE_RES; else if (ret == IOU_REQUEUE) return IOU_POLL_REQUEUE; diff --git a/io_uring/rw.c b/io_uring/rw.c index 9a9c636defad..50037313555f 100644 --- a/io_uring/rw.c +++ b/io_uring/rw.c @@ -1104,9 +1104,7 @@ int io_read_mshot(struct io_kiocb *req, unsigned int issue_flags) */ io_req_set_res(req, ret, cflags); io_req_rw_cleanup(req, issue_flags); - if (issue_flags & IO_URING_F_MULTISHOT) - return IOU_STOP_MULTISHOT; - return IOU_OK; + return IOU_COMPLETE; } static bool io_kiocb_start_write(struct io_kiocb *req, struct kiocb *kiocb)