From patchwork Mon Jul 11 11:01:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kanchan Joshi X-Patchwork-Id: 12913378 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 D2EFFCCA47B for ; Mon, 11 Jul 2022 11:28:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229697AbiGKL2y (ORCPT ); Mon, 11 Jul 2022 07:28:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40378 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231174AbiGKL2R (ORCPT ); Mon, 11 Jul 2022 07:28:17 -0400 Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8387B3AB for ; Mon, 11 Jul 2022 04:08:08 -0700 (PDT) Received: from epcas5p1.samsung.com (unknown [182.195.41.39]) by mailout1.samsung.com (KnoxPortal) with ESMTP id 20220711110805epoutp016d889a3b87901121c01a2f3956a26feb~Awb4V966t1720717207epoutp01Q for ; Mon, 11 Jul 2022 11:08:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.samsung.com 20220711110805epoutp016d889a3b87901121c01a2f3956a26feb~Awb4V966t1720717207epoutp01Q DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1657537685; bh=Aj0orf3AGy8lpupI9YMEcuCUCc0IMiiZ5gDc6E5twOM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WaIKSCyHeYzQ4btrxO2LJHcqxndWA6z/KIzA7a19mtdyKD27FD+y188+qQIMvoM+q RwrVKP/ICPmFW1AY8ih3qI6E+AQPYyQ/FqiaB5l7n/9sGhGzMJURcJ/95L0+QglWfy i4oAwPJVTbO1TIpSOUpioumzW6SrCpJuY0Wnvncc= Received: from epsnrtp2.localdomain (unknown [182.195.42.163]) by epcas5p1.samsung.com (KnoxPortal) with ESMTP id 20220711110803epcas5p12fe9f15cf54651f14188c1083cbc1b25~Awb3R-3b61352413524epcas5p1K; Mon, 11 Jul 2022 11:08:03 +0000 (GMT) Received: from epsmges5p3new.samsung.com (unknown [182.195.38.182]) by epsnrtp2.localdomain (Postfix) with ESMTP id 4LhLhc6fBTz4x9Py; Mon, 11 Jul 2022 11:08:00 +0000 (GMT) Received: from epcas5p2.samsung.com ( [182.195.41.40]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id E1.5A.09639.0940CC26; Mon, 11 Jul 2022 20:08:00 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p3.samsung.com (KnoxPortal) with ESMTPA id 20220711110800epcas5p3d338dd486fd778c5ba5bfe93a91ec8bd~Awb0EQons0447004470epcas5p39; Mon, 11 Jul 2022 11:08:00 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20220711110800epsmtrp25c9e35a541affd9ca4c353fe9b9c9a81~Awb0DWm0Y2556725567epsmtrp26; Mon, 11 Jul 2022 11:08:00 +0000 (GMT) X-AuditID: b6c32a4b-e83ff700000025a7-de-62cc0490fb1c Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id C7.9A.08905.0940CC26; Mon, 11 Jul 2022 20:08:00 +0900 (KST) Received: from localhost.localdomain (unknown [107.110.206.5]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220711110756epsmtip2a684f6bf482c84b759d98ae7414b7895~Awbwk_d090333603336epsmtip2O; Mon, 11 Jul 2022 11:07:56 +0000 (GMT) From: Kanchan Joshi To: hch@lst.de, sagi@grimberg.me, kbusch@kernel.org, axboe@kernel.dk Cc: io-uring@vger.kernel.org, linux-nvme@lists.infradead.org, linux-block@vger.kernel.org, asml.silence@gmail.com, joshiiitr@gmail.com, anuj20.g@samsung.com, gost.dev@samsung.com, Kanchan Joshi Subject: [PATCH for-next 1/4] io_uring, nvme: rename a function Date: Mon, 11 Jul 2022 16:31:52 +0530 Message-Id: <20220711110155.649153-2-joshi.k@samsung.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220711110155.649153-1-joshi.k@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrOJsWRmVeSWpSXmKPExsWy7bCmhu4EljNJBlPfGFs0TfjLbDFn1TZG i9V3+9ksbh7YyWSxcvVRJot3redYLI7+f8tmcf7tYSaLSYeuMVrsvaVtMX/ZU3aLda/fszjw eOycdZfd4/y9jSwel8+Wemxa1cnmsXlJvcfumw1sHn1bVjF6fN4kF8ARlW2TkZqYklqkkJqX nJ+SmZduq+QdHO8cb2pmYKhraGlhrqSQl5ibaqvk4hOg65aZA3SrkkJZYk4pUCggsbhYSd/O pii/tCRVISO/uMRWKbUgJafApECvODG3uDQvXS8vtcTK0MDAyBSoMCE740DLOZaCd2IVvY+u MTUwnhPuYuTkkBAwkfi67TdTFyMXh5DAbkaJru4frBDOJ0aJRY1b2CCcb4wSk18uY+9i5ABr +X/XASK+l1HiRMNDqI7PjBJT7r4BK2IT0JS4MLkUZIWIgItEZ9N0sBpmgbuMEg27VjOCJIQF 7CWudsxlA7FZBFQlVl+aDxbnFbCUmDNhCQvEffISMy99ZwexOQWsJGZu/wdVIyhxcuYTsBpm oJrmrbOZQRZICCzkkPg3/Q8TRLOLxL+1m5ghbGGJV8e3sEPYUhKf3+1lg7CTJS7NPAdVXyLx eM9BKNteovVUPzPIM8xAz6zfpQ+xi0+i9/cTJkhA8Ep0tAlBVCtK3Jv0lBXCFpd4OGMJlO0h cX1qM9jJQgK9jBL7zhRPYJSfheSDWUg+mIWwbAEj8ypGydSC4tz01GLTAuO81HJ4vCbn525i BKdYLe8djI8efNA7xMjEwXiIUYKDWUmE98/ZU0lCvCmJlVWpRfnxRaU5qcWHGE2BQTyRWUo0 OR+Y5PNK4g1NLA1MzMzMTCyNzQyVxHm9rm5KEhJITyxJzU5NLUgtgulj4uCUamBye97S9N/N TGPJosY35T9Ud+zICBJUKTCa+fPUxd+rJNJ80nYFXzadFJG2ze6Ab1FUxfz675sv+8mVt4sW ilS+nVOyLdtkw8PWE1cdvukkNd3tDwiscukpsrW1zvsyy1zvuMSDuv6XAX+Zvz17eWHBcn7l XxvMLhTqqNVGrvuV2lSaJhzoF7BB0+tS6IEZv+3/rHV2aZ5iUahZYtByrsuhq/hsvtX/SeI7 Pt08d7Z/xXtrpu6rV2Ye4FH8ILHS4vSRuEk/te5VTizLSGOUM2QsNNyct+PEebaLWoV2sQV9 c7O7V93qFv/gd3LN/6UXnn+yqznPUPWrMHz50785t7fcNnZI+DO5/zPv0VNLUmqVWIozEg21 mIuKEwGPnRbOOgQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNLMWRmVeSWpSXmKPExsWy7bCSvO4EljNJBlP/8Vs0TfjLbDFn1TZG i9V3+9ksbh7YyWSxcvVRJot3redYLI7+f8tmcf7tYSaLSYeuMVrsvaVtMX/ZU3aLda/fszjw eOycdZfd4/y9jSwel8+Wemxa1cnmsXlJvcfumw1sHn1bVjF6fN4kF8ARxWWTkpqTWZZapG+X wJVxoOUcS8E7sYreR9eYGhjPCXcxcnBICJhI/L/r0MXIxSEksJtR4uzX+2xdjJxAcXGJ5ms/ 2CFsYYmV/56zQxR9ZJS4+nw9I0gzm4CmxIXJpSA1IgJeEit6/jCB1DALPGWUmDyrnxEkISxg L3G1Yy7YUBYBVYnVl+aDxXkFLCXmTFjCArFAXmLmpe9gyzgFrCRmbv8HViMEVHPq7kwmiHpB iZMzn4DVMwPVN2+dzTyBUWAWktQsJKkFjEyrGCVTC4pz03OLDQsM81LL9YoTc4tL89L1kvNz NzGC40NLcwfj9lUf9A4xMnEwHmKU4GBWEuH9c/ZUkhBvSmJlVWpRfnxRaU5q8SFGaQ4WJXHe C10n44UE0hNLUrNTUwtSi2CyTBycUg1MAl4ygnvDIpUqGguWun04cWXvl2DhK3Wyd7zqDbrm nv9z9kQ074S6bxzKu3v6U+T0L0oK79Ta9Z5bZXp7w4GV03IaD1eHiH+X4784z/KVGUc3a+PK LfKhM2z7O7PkM1d925680sSG+/7/BZ+2frkk7HVhwVtb9px+QzdGz6YtR5Tf2VT39MYsUChk CDudUBnmetJ+R31GcUC/zXu1CM752mkPF3D0C683W6J8sGnzl61qCY03wuRCmbRFvjhf4SqJ uZDWfWbBHIWqm89KjSY9E/Bs3eph72E+OWjNjGrBLra7C+Vv56TdlFu/6YxzaPiGXW+yMrZN TomcYlfw+Fes/bR+0ff5Jccu/ExfU6HEUpyRaKjFXFScCAACFG9b/gIAAA== X-CMS-MailID: 20220711110800epcas5p3d338dd486fd778c5ba5bfe93a91ec8bd X-Msg-Generator: CA CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220711110800epcas5p3d338dd486fd778c5ba5bfe93a91ec8bd References: <20220711110155.649153-1-joshi.k@samsung.com> Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org io_uring_cmd_complete_in_task() is bit of a misnomer. It schedules a callback function for execution in task context. What callback does is private to provider, and does not have to be completion. So rename it to io_uring_cmd_execute_in_task() to allow more generic use. Signed-off-by: Kanchan Joshi Reviewed-by: Ming Lei --- drivers/nvme/host/ioctl.c | 2 +- include/linux/io_uring.h | 4 ++-- io_uring/uring_cmd.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c index a2e89db1cd63..9227e07f717e 100644 --- a/drivers/nvme/host/ioctl.c +++ b/drivers/nvme/host/ioctl.c @@ -395,7 +395,7 @@ static void nvme_uring_cmd_end_io(struct request *req, blk_status_t err) pdu->req = req; req->bio = bio; /* this takes care of moving rest of completion-work to task context */ - io_uring_cmd_complete_in_task(ioucmd, nvme_uring_task_cb); + io_uring_cmd_execute_in_task(ioucmd, nvme_uring_task_cb); } static int nvme_uring_cmd_io(struct nvme_ctrl *ctrl, struct nvme_ns *ns, diff --git a/include/linux/io_uring.h b/include/linux/io_uring.h index 4a2f6cc5a492..54063d67506b 100644 --- a/include/linux/io_uring.h +++ b/include/linux/io_uring.h @@ -29,7 +29,7 @@ struct io_uring_cmd { #if defined(CONFIG_IO_URING) void io_uring_cmd_done(struct io_uring_cmd *cmd, ssize_t ret, ssize_t res2); -void io_uring_cmd_complete_in_task(struct io_uring_cmd *ioucmd, +void io_uring_cmd_execute_in_task(struct io_uring_cmd *ioucmd, void (*task_work_cb)(struct io_uring_cmd *)); struct sock *io_uring_get_socket(struct file *file); void __io_uring_cancel(bool cancel_all); @@ -59,7 +59,7 @@ static inline void io_uring_cmd_done(struct io_uring_cmd *cmd, ssize_t ret, ssize_t ret2) { } -static inline void io_uring_cmd_complete_in_task(struct io_uring_cmd *ioucmd, +static inline void io_uring_cmd_execute_in_task(struct io_uring_cmd *ioucmd, void (*task_work_cb)(struct io_uring_cmd *)) { } diff --git a/io_uring/uring_cmd.c b/io_uring/uring_cmd.c index 0a421ed51e7e..d409b99abac5 100644 --- a/io_uring/uring_cmd.c +++ b/io_uring/uring_cmd.c @@ -16,7 +16,7 @@ static void io_uring_cmd_work(struct io_kiocb *req, bool *locked) ioucmd->task_work_cb(ioucmd); } -void io_uring_cmd_complete_in_task(struct io_uring_cmd *ioucmd, +void io_uring_cmd_execute_in_task(struct io_uring_cmd *ioucmd, void (*task_work_cb)(struct io_uring_cmd *)) { struct io_kiocb *req = cmd_to_io_kiocb(ioucmd); @@ -25,7 +25,7 @@ void io_uring_cmd_complete_in_task(struct io_uring_cmd *ioucmd, req->io_task_work.func = io_uring_cmd_work; io_req_task_work_add(req); } -EXPORT_SYMBOL_GPL(io_uring_cmd_complete_in_task); +EXPORT_SYMBOL_GPL(io_uring_cmd_execute_in_task); static inline void io_req_set_cqe32_extra(struct io_kiocb *req, u64 extra1, u64 extra2) From patchwork Mon Jul 11 11:01:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kanchan Joshi X-Patchwork-Id: 12913376 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 0F85BCCA480 for ; Mon, 11 Jul 2022 11:28:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229592AbiGKL2s (ORCPT ); Mon, 11 Jul 2022 07:28:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40496 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231205AbiGKL2R (ORCPT ); Mon, 11 Jul 2022 07:28:17 -0400 Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E2DE7B1A for ; Mon, 11 Jul 2022 04:08:17 -0700 (PDT) Received: from epcas5p3.samsung.com (unknown [182.195.41.41]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20220711110816epoutp020bae55b8552c5c729cae98597f3f2edd~AwcC8-dcN2789827898epoutp02Q for ; Mon, 11 Jul 2022 11:08:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20220711110816epoutp020bae55b8552c5c729cae98597f3f2edd~AwcC8-dcN2789827898epoutp02Q DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1657537696; bh=o09NKBCLryXYIbhTVut19weRbwkJO8JA/MTc+NYfyJQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QJSd+tFHf/gsWs2Vyi9QohGZpSSMfHg+29syb1d5o8F9Hk4lXbIWl1LkILRtwWZMb +P4OrSM5LNG8SbbDWouq0tMai8FqQv4cUThNOJxYpvRx8rMN6qbTynOpl0lvncjWzV QwcyBjOBvzW3ZyJPaSDGYp46qkH4xBTK6qUyg51M= Received: from epsnrtp2.localdomain (unknown [182.195.42.163]) by epcas5p2.samsung.com (KnoxPortal) with ESMTP id 20220711110815epcas5p25f715eec70cbb947e83e110c44270b1a~AwcCe6aS92363823638epcas5p2d; Mon, 11 Jul 2022 11:08:15 +0000 (GMT) Received: from epsmges5p3new.samsung.com (unknown [182.195.38.177]) by epsnrtp2.localdomain (Postfix) with ESMTP id 4LhLhs2s6Fz4x9Pv; Mon, 11 Jul 2022 11:08:13 +0000 (GMT) Received: from epcas5p2.samsung.com ( [182.195.41.40]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id 90.6A.09639.D940CC26; Mon, 11 Jul 2022 20:08:13 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p3.samsung.com (KnoxPortal) with ESMTPA id 20220711110812epcas5p33aa90b23aa62fb11722aa8195754becf~Awb-qJkiT1828518285epcas5p3W; Mon, 11 Jul 2022 11:08:12 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20220711110812epsmtrp2cb5467cd6c76fc82001e53763e6a1ac5~Awb-pRkEk2556725567epsmtrp2E; Mon, 11 Jul 2022 11:08:12 +0000 (GMT) X-AuditID: b6c32a4b-e6dff700000025a7-01-62cc049d545a Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id FA.9A.08905.C940CC26; Mon, 11 Jul 2022 20:08:12 +0900 (KST) Received: from localhost.localdomain (unknown [107.110.206.5]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220711110807epsmtip24d235af3e4557cf0e2c0d0551f93aac2~Awb6z6Tby0333603336epsmtip2S; Mon, 11 Jul 2022 11:08:06 +0000 (GMT) From: Kanchan Joshi To: hch@lst.de, sagi@grimberg.me, kbusch@kernel.org, axboe@kernel.dk Cc: io-uring@vger.kernel.org, linux-nvme@lists.infradead.org, linux-block@vger.kernel.org, asml.silence@gmail.com, joshiiitr@gmail.com, anuj20.g@samsung.com, gost.dev@samsung.com Subject: [PATCH for-next 2/4] nvme: compact nvme_uring_cmd_pdu struct Date: Mon, 11 Jul 2022 16:31:53 +0530 Message-Id: <20220711110155.649153-3-joshi.k@samsung.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220711110155.649153-1-joshi.k@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrEJsWRmVeSWpSXmKPExsWy7bCmhu5cljNJBhd+CVo0TfjLbDFn1TZG i9V3+9ksbh7YyWSxcvVRJot3redYLM6/PcxkMenQNUaLvbe0LeYve8puse71exYHbo+ds+6y e5y/t5HF4/LZUo9NqzrZPDYvqffYfbOBzaNvyypGj8+b5AI4orJtMlITU1KLFFLzkvNTMvPS bZW8g+Od403NDAx1DS0tzJUU8hJzU22VXHwCdN0yc4DOVFIoS8wpBQoFJBYXK+nb2RTll5ak KmTkF5fYKqUWpOQUmBToFSfmFpfmpevlpZZYGRoYGJkCFSZkZ8y8bF9whbfi2PMnrA2M3dxd jJwcEgImEmtOPWcHsYUEdjNK/H3p2cXIBWR/YpS4vekxG4TzjVGi++sqJpiOJ81PWCASexkl Tv5+xgThfGaUeP11L5DDwcEmoClxYXIpSIOIgItEZ9N0VpAaZoFtjBIn1rSzgSSEBVwljsxp A7NZBFQllr2cBGbzClhK3N3YxwaxTV5i5qXvYPdxClhJzNz+jxGiRlDi5EyQKziBhspLNG+d zQyyQEJgJodEw/JnjBDNLhLfN7yAOltY4tXxLewQtpTE53d7oRYkS1yaeQ6qpkTi8Z6DULa9 ROupfmaQZ5iBnlm/Sx9iF59E7+8nYD9KCPBKdLQJQVQrStyb9JQVwhaXeDhjCZTtIXFyfSs0 sHoZJd60PmCdwCg/C8kLs5C8MAth2wJG5lWMkqkFxbnpqcWmBcZ5qeXweE3Oz93ECE6sWt47 GB89+KB3iJGJg/EQowQHs5II75+zp5KEeFMSK6tSi/Lji0pzUosPMZoCw3gis5Rocj4wteeV xBuaWBqYmJmZmVgamxkqifN6Xd2UJCSQnliSmp2aWpBaBNPHxMEp1cA0L0GnsDy5IVdqa5sE g+DDyPA9v8/eKA6227C1irmh8oZjUBDjDN3junqvxIQPfOh1mfr6frv6VoOTi+dMrbRbH9/p 2vaiYPUFxX8Sk38fFLd16p/rb5Z8JevF/t6OFcfnTHwWH13a185U5n554uuSuUc0rCSX9MgW /7/uEFZqkJM2pV/m6b6JdvJt5w60dM9//mkn42YpmVUS68Myzt2zun7lZsDHpXGhlyL+Tfkv zyf7e5VUxnEL14JVohfNxdP2LhVZs+bmLVXRC5p7vySw3i1l5fZTCZ70a+fJzU9jL/q8XVXg 0xXLVxyzyv7V751NW7/Yb7z+4uf2EzM9/p56EcC4etGp5pNB++afrj/mo8RSnJFoqMVcVJwI AHSJtyk1BAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrCLMWRmVeSWpSXmKPExsWy7bCSvO4cljNJBidPGVo0TfjLbDFn1TZG i9V3+9ksbh7YyWSxcvVRJot3redYLM6/PcxkMenQNUaLvbe0LeYve8puse71exYHbo+ds+6y e5y/t5HF4/LZUo9NqzrZPDYvqffYfbOBzaNvyypGj8+b5AI4orhsUlJzMstSi/TtErgyZl62 L7jCW3Hs+RPWBsZu7i5GTg4JAROJJ81PWLoYuTiEBHYzSlzdupUFIiEu0XztBzuELSyx8t9z MFtI4COjxNEVOl2MHBxsApoSFyaXgoRFBLwkVvT8YQKxmQX2MUoceiMMYgsLuEocmdPGBmKz CKhKLHs5CczmFbCUuLuxjw1ivLzEzEvfwcZzClhJzNz+jxFilaXEqbszmSDqBSVOznzCAjFf XqJ562zmCYwCs5CkZiFJLWBkWsUomVpQnJueW2xYYJiXWq5XnJhbXJqXrpecn7uJERwRWpo7 GLev+qB3iJGJg/EQowQHs5II75+zp5KEeFMSK6tSi/Lji0pzUosPMUpzsCiJ817oOhkvJJCe WJKanZpakFoEk2Xi4JRqYJLWmLh/kv+0N1w2spLfnh1tep4yz6e+0SuQdUL02wPzJrs+Zcnr khWb6NV31EMqMqb1jGBV6ILLcr+CeIMKzNa8nHH6wZ+X2R+NDu4quLnm8O9bcXyLC44t2SVR wv1tVlXhTTYG3oMynVcNJx4/dKv52MUFMRet422c2522LJu35OeHxouSeknbni03v+sSnfPg 5juxvfNNLI33hR7Tq9aTf7Sp4NPz9zlrj4csWaDV+XbGQ/Wzpxo1Gv0uskjfXu/12q3Fno/x 7N3wTR84flSaNM4XYj8mk/P1WssWtWVdSdM5Gz5W/JX8WS+REiK+LXv+V2FNbtkD5dJ9D/s+ 2zhKZMaK/uZsT261NpTheazEUpyRaKjFXFScCACHKrFS9wIAAA== X-CMS-MailID: 20220711110812epcas5p33aa90b23aa62fb11722aa8195754becf X-Msg-Generator: CA CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220711110812epcas5p33aa90b23aa62fb11722aa8195754becf References: <20220711110155.649153-1-joshi.k@samsung.com> Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Anuj Gupta Mark this packed so that we can create bit more space in its container i.e. io_uring_cmd. This is in preparation to support multipathing on uring-passthrough. Move its definition to nvme.h as well. Signed-off-by: Anuj Gupta --- drivers/nvme/host/ioctl.c | 14 -------------- drivers/nvme/host/nvme.h | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c index 9227e07f717e..fc02eddd4977 100644 --- a/drivers/nvme/host/ioctl.c +++ b/drivers/nvme/host/ioctl.c @@ -340,20 +340,6 @@ struct nvme_uring_data { __u32 timeout_ms; }; -/* - * This overlays struct io_uring_cmd pdu. - * Expect build errors if this grows larger than that. - */ -struct nvme_uring_cmd_pdu { - union { - struct bio *bio; - struct request *req; - }; - void *meta; /* kernel-resident buffer */ - void __user *meta_buffer; - u32 meta_len; -}; - static inline struct nvme_uring_cmd_pdu *nvme_uring_cmd_pdu( struct io_uring_cmd *ioucmd) { diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 7323a2f61126..9d3ff6feda06 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -165,6 +165,20 @@ struct nvme_request { struct nvme_ctrl *ctrl; }; +/* + * This overlays struct io_uring_cmd pdu. + * Expect build errors if this grows larger than that. + */ +struct nvme_uring_cmd_pdu { + union { + struct bio *bio; + struct request *req; + }; + void *meta; /* kernel-resident buffer */ + void __user *meta_buffer; + u32 meta_len; +} __packed; + /* * Mark a bio as coming in through the mpath node. */ From patchwork Mon Jul 11 11:01:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kanchan Joshi X-Patchwork-Id: 12913377 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 86BA9C43334 for ; Mon, 11 Jul 2022 11:28:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230504AbiGKL2u (ORCPT ); Mon, 11 Jul 2022 07:28:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40566 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231269AbiGKL2S (ORCPT ); Mon, 11 Jul 2022 07:28:18 -0400 Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E9CE5A1 for ; Mon, 11 Jul 2022 04:08:30 -0700 (PDT) Received: from epcas5p4.samsung.com (unknown [182.195.41.42]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20220711110829epoutp02fdd2964c1639966fb4a708c99f3d9754~AwcPEmgnA3110331103epoutp02L for ; Mon, 11 Jul 2022 11:08:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20220711110829epoutp02fdd2964c1639966fb4a708c99f3d9754~AwcPEmgnA3110331103epoutp02L DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1657537709; bh=TPokgc8KiyKiXoT7NCkFEOk/43/FQR9MxdUyRi6+mZk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IiNv9mdUfdwa+nQIwKsNszwLGCQ0UpZjY40j9bhKUaNCX+D0cB4UIbNzTn8ig2Vpv hWAj+YzwMVxqroYQFK+IFqFCm5MTw+8tIvYIPDHeF7vjLHb4PFAFanKyO+9cKF4bap huiFxkAiIeXhCq8dei+GYwKebEnzbFNkhsGffBzw= Received: from epsnrtp2.localdomain (unknown [182.195.42.163]) by epcas5p1.samsung.com (KnoxPortal) with ESMTP id 20220711110828epcas5p130ed5ecf71cb8427a86abc25beb9432d~AwcODpN8E1709317093epcas5p1O; Mon, 11 Jul 2022 11:08:28 +0000 (GMT) Received: from epsmges5p2new.samsung.com (unknown [182.195.38.182]) by epsnrtp2.localdomain (Postfix) with ESMTP id 4LhLj46SHpz4x9Pv; Mon, 11 Jul 2022 11:08:24 +0000 (GMT) Received: from epcas5p2.samsung.com ( [182.195.41.40]) by epsmges5p2new.samsung.com (Symantec Messaging Gateway) with SMTP id AB.30.09566.8A40CC26; Mon, 11 Jul 2022 20:08:24 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p2.samsung.com (KnoxPortal) with ESMTPA id 20220711110824epcas5p22c8e945cb8c3c3ac46c8c2b5ab55db9b~AwcKN9xEX2363823638epcas5p2r; Mon, 11 Jul 2022 11:08:24 +0000 (GMT) Received: from epsmgms1p2.samsung.com (unknown [182.195.42.42]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20220711110824epsmtrp163c8723a98b81f7851e41ea44ecb7772~AwcKNKTnl1261612616epsmtrp1D; Mon, 11 Jul 2022 11:08:24 +0000 (GMT) X-AuditID: b6c32a4a-ba3ff7000000255e-ba-62cc04a84df3 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p2.samsung.com (Symantec Messaging Gateway) with SMTP id 7E.89.08802.8A40CC26; Mon, 11 Jul 2022 20:08:24 +0900 (KST) Received: from localhost.localdomain (unknown [107.110.206.5]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220711110820epsmtip2521d7a387b1bdcc51eb6f4dd6b6b3ffc~AwcG34GhO0331003310epsmtip2T; Mon, 11 Jul 2022 11:08:20 +0000 (GMT) From: Kanchan Joshi To: hch@lst.de, sagi@grimberg.me, kbusch@kernel.org, axboe@kernel.dk Cc: io-uring@vger.kernel.org, linux-nvme@lists.infradead.org, linux-block@vger.kernel.org, asml.silence@gmail.com, joshiiitr@gmail.com, anuj20.g@samsung.com, gost.dev@samsung.com, Kanchan Joshi Subject: [PATCH for-next 3/4] io_uring: grow a field in struct io_uring_cmd Date: Mon, 11 Jul 2022 16:31:54 +0530 Message-Id: <20220711110155.649153-4-joshi.k@samsung.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220711110155.649153-1-joshi.k@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrGJsWRmVeSWpSXmKPExsWy7bCmhu4KljNJBr8nGlk0TfjLbDFn1TZG i9V3+9ksbh7YyWSxcvVRJot3redYLI7+f8tmcf7tYSaLSYeuMVrsvaVtMX/ZU3aLda/fszjw eOycdZfd4/y9jSwel8+Wemxa1cnmsXlJvcfumw1sHn1bVjF6fN4kF8ARlW2TkZqYklqkkJqX nJ+SmZduq+QdHO8cb2pmYKhraGlhrqSQl5ibaqvk4hOg65aZA3SrkkJZYk4pUCggsbhYSd/O pii/tCRVISO/uMRWKbUgJafApECvODG3uDQvXS8vtcTK0MDAyBSoMCE74/uG46wFOwUqDu15 zdrAuJm3i5GTQ0LARGL6okusILaQwG5GiY6z9V2MXED2J0aJ5XufsEI4nxkl7q+4ywjTMXHH Q3aIxC5GibNHHzPDVR09vwXI4eBgE9CUuDC5FKRBRMBForNpOtgkZoG7jBINu1aDTRIW8Jbo +boBbDeLgKrE8n1TwXp5BSwl1jyxgFgmLzHz0nd2EJtTwEpi5vZ/YK28AoISJ2c+YQGxmYFq mrfOZoaon8shsfQLO4TtInHq4AwWCFtY4tXxLVBxKYmX/W1QdrLEpZnnmCDsEonHew5C2fYS raf6wc5hBnpl/S59iFV8Er2/nzCBhCUEeCU62oQgqhUl7k16ygphi0s8nLEEyvaQuHlrLxsk dHoZJTZ/es40gVF+FpIPZiH5YBbCtgWMzKsYJVMLinPTU4tNC4zyUsvh0Zqcn7uJEZxgtbx2 MD588EHvECMTB+MhRgkOZiUR3j9nTyUJ8aYkVlalFuXHF5XmpBYfYjQFhvBEZinR5Hxgis8r iTc0sTQwMTMzM7E0NjNUEuf1uropSUggPbEkNTs1tSC1CKaPiYNTqoFJwlxSUF2NTSLW68Vb 54aPz0+u+RLms5mRf+WhjPUMt7/YHBe78rLznNvtqYzK0qzPu4u7pEwnO/kvenDl8a4j+Q4y PhPZuZocBDqtxJ1Kma7sObi+xOSgbl92tefFi7PNUhcf6X+9MaTxxqaiAJ5TWxx7/p5JZam4 sC3i9DuGdTLf6m7dCLDIUtvQ8u7L+9bi25LXDrzestVy4+LfRbN8ts1ZE/xYbteUOx12nCxF 0zZu3GBiX9sZ/PbJrlzJVb9XdoR5fuG7c+5PcMwcb9ZZG2qPXDO56qltyWoQkcPtZJNvKLYy Idv+1oTbyQ/esmqXzd0x8epNmcWrnxQnH7+pL619n5+7aV9ih8PDp+u2KbEUZyQaajEXFScC ANYOrRM5BAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNLMWRmVeSWpSXmKPExsWy7bCSvO4KljNJBhPvs1o0TfjLbDFn1TZG i9V3+9ksbh7YyWSxcvVRJot3redYLI7+f8tmcf7tYSaLSYeuMVrsvaVtMX/ZU3aLda/fszjw eOycdZfd4/y9jSwel8+Wemxa1cnmsXlJvcfumw1sHn1bVjF6fN4kF8ARxWWTkpqTWZZapG+X wJXxfcNx1oKdAhWH9rxmbWDczNvFyMkhIWAiMXHHQ/YuRi4OIYEdjBJzPq1lhEiISzRf+8EO YQtLrPz3HKroI6PE5Gl3gBwODjYBTYkLk0tBakQEvCRW9PxhAqlhFngKVDOrH2yQsIC3RM/X DawgNouAqsTyfVOZQXp5BSwl1jyxgJgvLzHz0newXZwCVhIzt/8DaxUCKjl1dyYTiM0rIChx cuYTFhCbGai+eets5gmMArOQpGYhSS1gZFrFKJlaUJybnltsWGCUl1quV5yYW1yal66XnJ+7 iREcH1paOxj3rPqgd4iRiYPxEKMEB7OSCO+fs6eShHhTEiurUovy44tKc1KLDzFKc7AoifNe 6DoZLySQnliSmp2aWpBaBJNl4uCUamAS/uf3TIxVzYnF37C2//pmzqf8t7dc0epo0f2dtEdd epL6h03NF5s0X1vaGyjYBCz8V3w588usEyUuex1zHDdLb7GR5bTVbqmee2PLl4uc3Ew2lY8/ mPOnW2/UmVl8M85EuHT1j+B7FYcNTnzMM7Pfy3X2m79xcl2ozgQe9ZhCY7P/n/UlfvryXFrn I+rorVG3iWVbqoiHn++1AzPi594+kzDp8aGF5Tq7N96dLnE0frLb1un8ZoLbv7T1tn239Z0Z 2GE9V+2/6Q/OJ49E9MXXPutevUTt49q6BJV39Zd7vJZVvtarlwh/LPzggqmiaNElYQaXL8Wd Abty9ppwsib0fTC8/9CfLzmCa9VpZSWW4oxEQy3mouJEAKoCxfX+AgAA X-CMS-MailID: 20220711110824epcas5p22c8e945cb8c3c3ac46c8c2b5ab55db9b X-Msg-Generator: CA CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220711110824epcas5p22c8e945cb8c3c3ac46c8c2b5ab55db9b References: <20220711110155.649153-1-joshi.k@samsung.com> Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org Use the leftover space to carve 'next' field that enables linking of io_uring_cmd structs. Also introduce a list head and few helpers. This is in preparation to support nvme-mulitpath, allowing multiple uring passthrough commands to be queued. Signed-off-by: Kanchan Joshi Signed-off-by: Anuj Gupta --- include/linux/io_uring.h | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/include/linux/io_uring.h b/include/linux/io_uring.h index 54063d67506b..d734599cbcd7 100644 --- a/include/linux/io_uring.h +++ b/include/linux/io_uring.h @@ -22,9 +22,14 @@ struct io_uring_cmd { const void *cmd; /* callback to defer completions to task context */ void (*task_work_cb)(struct io_uring_cmd *cmd); + struct io_uring_cmd *next; u32 cmd_op; - u32 pad; - u8 pdu[32]; /* available inline for free use */ + u8 pdu[28]; /* available inline for free use */ +}; + +struct ioucmd_list { + struct io_uring_cmd *head; + struct io_uring_cmd *tail; }; #if defined(CONFIG_IO_URING) @@ -54,6 +59,27 @@ static inline void io_uring_free(struct task_struct *tsk) if (tsk->io_uring) __io_uring_free(tsk); } + +static inline struct io_uring_cmd *ioucmd_list_get(struct ioucmd_list *il) +{ + struct io_uring_cmd *ioucmd = il->head; + + il->head = il->tail = NULL; + + return ioucmd; +} + +static inline void ioucmd_list_add(struct ioucmd_list *il, + struct io_uring_cmd *ioucmd) +{ + ioucmd->next = NULL; + + if (il->tail) + il->tail->next = ioucmd; + else + il->head = ioucmd; + il->tail = ioucmd; +} #else static inline void io_uring_cmd_done(struct io_uring_cmd *cmd, ssize_t ret, ssize_t ret2) @@ -80,6 +106,14 @@ static inline const char *io_uring_get_opcode(u8 opcode) { return ""; } +static inline struct io_uring_cmd *ioucmd_list_get(struct ioucmd_list *il) +{ + return NULL; +} +static inline void ioucmd_list_add(struct ioucmd_list *il, + struct io_uring_cmd *ioucmd) +{ +} #endif #endif From patchwork Mon Jul 11 11:01:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kanchan Joshi X-Patchwork-Id: 12913379 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 A5A9CCCA47F for ; Mon, 11 Jul 2022 11:28:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231250AbiGKL2w (ORCPT ); Mon, 11 Jul 2022 07:28:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40580 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231324AbiGKL2S (ORCPT ); Mon, 11 Jul 2022 07:28:18 -0400 Received: from mailout4.samsung.com (mailout4.samsung.com [203.254.224.34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7A9AF112C for ; Mon, 11 Jul 2022 04:08:33 -0700 (PDT) Received: from epcas5p2.samsung.com (unknown [182.195.41.40]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20220711110831epoutp04720321662be173cb183dcb211c43e45b~AwcRc3dDn3101131011epoutp04c for ; Mon, 11 Jul 2022 11:08:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20220711110831epoutp04720321662be173cb183dcb211c43e45b~AwcRc3dDn3101131011epoutp04c DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1657537712; bh=m3GqGhDnRMO6SHZB5q3Um1iWb54ixNElLDQjpTMW9Ug=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tv3IgMiu+61U7q99p7spKfAA+rWYnkZiY++1NBPpluZkSnNPTlxWw+DfItGnfQwq6 EUQZFvWvgxv4opAWnMwszZ9rWGtw2dzw6rgtYlsJ/xA+byzKhQ/57ClsSiD16uhudW rzIj7moVQlK50EB1lQl0zSzlS3WMzxIrJorfRdHc= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas5p4.samsung.com (KnoxPortal) with ESMTP id 20220711110831epcas5p4f4775b2b0bd3c707bcac0e7fa428c89e~AwcQkEG1i0533205332epcas5p4J; Mon, 11 Jul 2022 11:08:31 +0000 (GMT) Received: from epsmges5p1new.samsung.com (unknown [182.195.38.175]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4LhLj85vCVz4x9Pr; Mon, 11 Jul 2022 11:08:28 +0000 (GMT) Received: from epcas5p2.samsung.com ( [182.195.41.40]) by epsmges5p1new.samsung.com (Symantec Messaging Gateway) with SMTP id EB.FA.09662.CA40CC26; Mon, 11 Jul 2022 20:08:28 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p3.samsung.com (KnoxPortal) with ESMTPA id 20220711110827epcas5p3fd81f142f55ca3048abc38a9ef0d0089~AwcNq2VpW0447004470epcas5p3g; Mon, 11 Jul 2022 11:08:27 +0000 (GMT) Received: from epsmgms1p2.samsung.com (unknown [182.195.42.42]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20220711110827epsmtrp2108077060fb37f177ed45746369c0710~AwcNqCQZS2556725567epsmtrp2Q; Mon, 11 Jul 2022 11:08:27 +0000 (GMT) X-AuditID: b6c32a49-86fff700000025be-6e-62cc04ac3d36 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p2.samsung.com (Symantec Messaging Gateway) with SMTP id 40.99.08802.BA40CC26; Mon, 11 Jul 2022 20:08:27 +0900 (KST) Received: from localhost.localdomain (unknown [107.110.206.5]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220711110824epsmtip22a8a4c7e13ba3772f371800bb410afc8~AwcK1FtrQ0332603326epsmtip2Q; Mon, 11 Jul 2022 11:08:24 +0000 (GMT) From: Kanchan Joshi To: hch@lst.de, sagi@grimberg.me, kbusch@kernel.org, axboe@kernel.dk Cc: io-uring@vger.kernel.org, linux-nvme@lists.infradead.org, linux-block@vger.kernel.org, asml.silence@gmail.com, joshiiitr@gmail.com, anuj20.g@samsung.com, gost.dev@samsung.com, Kanchan Joshi Subject: [PATCH for-next 4/4] nvme-multipath: add multipathing for uring-passthrough commands Date: Mon, 11 Jul 2022 16:31:55 +0530 Message-Id: <20220711110155.649153-5-joshi.k@samsung.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220711110155.649153-1-joshi.k@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrJJsWRmVeSWpSXmKPExsWy7bCmhu4aljNJBrMO6Fk0TfjLbDFn1TZG i9V3+9ksbh7YyWSxcvVRJot3redYLI7+f8tmcf7tYSaLSYeuMVrsvaVtMX/ZU3aLda/fszjw eOycdZfd4/y9jSwel8+Wemxa1cnmsXlJvcfumw1sHn1bVjF6fN4kF8ARlW2TkZqYklqkkJqX nJ+SmZduq+QdHO8cb2pmYKhraGlhrqSQl5ibaqvk4hOg65aZA3SrkkJZYk4pUCggsbhYSd/O pii/tCRVISO/uMRWKbUgJafApECvODG3uDQvXS8vtcTK0MDAyBSoMCE7Y93/ZYwFf6MrOl6t ZmlgnOHTxcjJISFgIrG3Yyt7FyMXh5DAbkaJvWf2sEA4n4Ccz3ehnM+MEvdnLGCDaek6dgqq ZRejxIKbyxGq5jX8BspwcLAJaEpcmFwK0iAi4CLR2TSdFaSGWeAuo0TDrtWMIAlhgXiJG83H mEFsFgFVib1L5zCB2LwClhLtc6+wQmyTl5h56Ts7iM0pYCUxc/s/RogaQYmTM5+wgNjMQDXN W2czgyyQEFjIITGldRMTRLOLxI/zu9ghbGGJV8e3QNlSEp/f7YV6J1ni0sxzUPUlEo/3HISy 7SVaT/UzgzzDDPTM+l36ELv4JHp/P2ECCUsI8Ep0tAlBVCtK3Jv0FOpkcYmHM5ZA2R4SH+c3 QwOrl1HizOHpTBMY5WcheWEWkhdmIWxbwMi8ilEytaA4Nz212LTAMC+1HB6zyfm5mxjBaVbL cwfj3Qcf9A4xMnEwHmKU4GBWEuH9c/ZUkhBvSmJlVWpRfnxRaU5q8SFGU2AYT2SWEk3OByb6 vJJ4QxNLAxMzMzMTS2MzQyVxXq+rm5KEBNITS1KzU1MLUotg+pg4OKUamCb5/q/f9mLT/3Xz PybOalx5NTvmweP4+Ru/edmwLGzU2OBSOzvWOGDFLTHTz8G3HPx7z1em570+xDQ9c2afrenJ WX/4k4WY/3hVZ39WfXT22d6fd1dH2Stzx/3nt6ivYWDsn8+/ZS1n/oYN03V5jM1UlwR7nvCx VhWynDQ/M7HljH/9MR8hybfe+ZH3FZJU39/vu9hn/Cs0VFciZO3C6KO7LESXui5/72l5Zf+6 +pKXcTL6SW+rdxx/deZWaPeDVWHrmT+laD86cn7y3aNzHCQlbiSuCpqiuebDwXXbozx+xC9y /zQ3SPSTpK7+qlAPPVb7nTp5802nhTq4TuSpKBKqlLzLxz23zVddMbRruxJLcUaioRZzUXEi ADDoqjo8BAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrDLMWRmVeSWpSXmKPExsWy7bCSvO5qljNJBh/n61s0TfjLbDFn1TZG i9V3+9ksbh7YyWSxcvVRJot3redYLI7+f8tmcf7tYSaLSYeuMVrsvaVtMX/ZU3aLda/fszjw eOycdZfd4/y9jSwel8+Wemxa1cnmsXlJvcfumw1sHn1bVjF6fN4kF8ARxWWTkpqTWZZapG+X wJWx7v8yxoK/0RUdr1azNDDO8Oli5OSQEDCR6Dp2ir2LkYtDSGAHo0TnilXMEAlxieZrP9gh bGGJlf+eQxV9ZJSYtuEdUBEHB5uApsSFyaUgNSICXhIrev4wgdQwCzxllJg8q58RJCEsECvx +90ksKEsAqoSe5fOYQKxeQUsJdrnXmGFWCAvMfPSd7BlnAJWEjO3/wPrFQKqOXV3JlS9oMTJ mU9YQGxmoPrmrbOZJzAKzEKSmoUktYCRaRWjZGpBcW56brFhgVFearlecWJucWleul5yfu4m RnCEaGntYNyz6oPeIUYmDsZDjBIczEoivH/OnkoS4k1JrKxKLcqPLyrNSS0+xCjNwaIkznuh 62S8kEB6YklqdmpqQWoRTJaJg1OqgSnWQ+fhva9L9SXK2PcsmD/z7J8vGX9MLycorP4ya5v+ E7+M/hkcnIFKkyxuHVFQb37cxScfrD5LSa2p4LGFD3vNwWado7/f/1sV9PichnxQeySn/snO N6HrG+R22LFbHZn6YlKZ/7JVtw5tXPzw5JUdE3pEjPr/RbgFNz2ROTTlssN6nazMNTlTJsU+ nJjwYtW00uhy48DJ+39MzDqqxdeWLDFpgQqbirdH/foTzzN+5S7iLtkS2/2JMV09YLJvSvTE /zpJR7R2bTghOpu9ateZkz47CupuOhrPrtrz8OmnKRsL/mjmm3vwT2Tv+3Lad6Jl3Muku6fM N/49WjtZcGXugZX+az6xLOa5u4Z3U3u+EktxRqKhFnNRcSIAJHDXr/8CAAA= X-CMS-MailID: 20220711110827epcas5p3fd81f142f55ca3048abc38a9ef0d0089 X-Msg-Generator: CA CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220711110827epcas5p3fd81f142f55ca3048abc38a9ef0d0089 References: <20220711110155.649153-1-joshi.k@samsung.com> Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org From: Anuj Gupta This heavily reuses nvme-mpath infrastructure for block-path. Block-path operates on bio, and uses that as long-lived object across requeue attempts. For passthrough interface io_uring_cmd happens to be such object, so add a requeue list for that. If path is not available, uring-cmds are added into that list and resubmitted on discovery of new path. Existing requeue handler (nvme_requeue_work) is extended to do this resubmission. For failed commands, failover is done directly (i.e. without first queuing into list) by resubmitting individual command from task-work based callback. Suggested-by: Sagi Grimberg Co-developed-by: Kanchan Joshi Signed-off-by: Kanchan Joshi Signed-off-by: Anuj Gupta --- drivers/nvme/host/ioctl.c | 141 ++++++++++++++++++++++++++++++++-- drivers/nvme/host/multipath.c | 36 ++++++++- drivers/nvme/host/nvme.h | 12 +++ include/linux/io_uring.h | 2 + 4 files changed, 182 insertions(+), 9 deletions(-) diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c index fc02eddd4977..281c21d3c67d 100644 --- a/drivers/nvme/host/ioctl.c +++ b/drivers/nvme/host/ioctl.c @@ -340,12 +340,6 @@ struct nvme_uring_data { __u32 timeout_ms; }; -static inline struct nvme_uring_cmd_pdu *nvme_uring_cmd_pdu( - struct io_uring_cmd *ioucmd) -{ - return (struct nvme_uring_cmd_pdu *)&ioucmd->pdu; -} - static void nvme_uring_task_cb(struct io_uring_cmd *ioucmd) { struct nvme_uring_cmd_pdu *pdu = nvme_uring_cmd_pdu(ioucmd); @@ -448,6 +442,14 @@ static int nvme_uring_cmd_io(struct nvme_ctrl *ctrl, struct nvme_ns *ns, pdu->meta_buffer = nvme_to_user_ptr(d.metadata); pdu->meta_len = d.metadata_len; + if (issue_flags & IO_URING_F_MPATH) { + req->cmd_flags |= REQ_NVME_MPATH; + /* + * we would need the buffer address (d.addr field) if we have + * to retry the command. Store it by repurposing ioucmd->cmd + */ + ioucmd->cmd = (void *)d.addr; + } blk_execute_rq_nowait(req, false); return -EIOCBQUEUED; } @@ -665,12 +667,135 @@ int nvme_ns_head_chr_uring_cmd(struct io_uring_cmd *ioucmd, int srcu_idx = srcu_read_lock(&head->srcu); struct nvme_ns *ns = nvme_find_path(head); int ret = -EINVAL; + struct device *dev = &head->cdev_device; + + if (likely(ns)) { + ret = nvme_ns_uring_cmd(ns, ioucmd, + issue_flags | IO_URING_F_MPATH); + } else if (nvme_available_path(head)) { + struct nvme_uring_cmd_pdu *pdu = nvme_uring_cmd_pdu(ioucmd); + struct nvme_uring_cmd *payload = NULL; + + dev_warn_ratelimited(dev, "no usable path - requeuing I/O\n"); + /* + * We may requeue two kinds of uring commands: + * 1. command failed post submission. pdu->req will be non-null + * for this + * 2. command that could not be submitted because path was not + * available. For this pdu->req is set to NULL. + */ + pdu->req = NULL; + /* + * passthrough command will not be available during retry as it + * is embedded in io_uring's SQE. Hence we allocate/copy here + */ + payload = kmalloc(sizeof(struct nvme_uring_cmd), GFP_KERNEL); + if (!payload) { + ret = -ENOMEM; + goto out_unlock; + } + memcpy(payload, ioucmd->cmd, sizeof(struct nvme_uring_cmd)); + ioucmd->cmd = payload; - if (ns) - ret = nvme_ns_uring_cmd(ns, ioucmd, issue_flags); + spin_lock_irq(&head->requeue_ioucmd_lock); + ioucmd_list_add(&head->requeue_ioucmd_list, ioucmd); + spin_unlock_irq(&head->requeue_ioucmd_lock); + ret = -EIOCBQUEUED; + } else { + dev_warn_ratelimited(dev, "no available path - failing I/O\n"); + } +out_unlock: srcu_read_unlock(&head->srcu, srcu_idx); return ret; } + +int nvme_uring_cmd_io_retry(struct nvme_ns *ns, struct request *oreq, + struct io_uring_cmd *ioucmd, struct nvme_uring_cmd_pdu *pdu) +{ + struct nvme_ctrl *ctrl = ns->ctrl; + struct request_queue *q = ns ? ns->queue : ctrl->admin_q; + struct nvme_uring_data d; + struct nvme_command c; + struct request *req; + struct bio *obio = oreq->bio; + void *meta = NULL; + + memcpy(&c, nvme_req(oreq)->cmd, sizeof(struct nvme_command)); + d.metadata = (__u64)pdu->meta_buffer; + d.metadata_len = pdu->meta_len; + d.timeout_ms = oreq->timeout; + d.addr = (__u64)ioucmd->cmd; + if (obio) { + d.data_len = obio->bi_iter.bi_size; + blk_rq_unmap_user(obio); + } else { + d.data_len = 0; + } + blk_mq_free_request(oreq); + req = nvme_alloc_user_request(q, &c, nvme_to_user_ptr(d.addr), + d.data_len, nvme_to_user_ptr(d.metadata), + d.metadata_len, 0, &meta, d.timeout_ms ? + msecs_to_jiffies(d.timeout_ms) : 0, + ioucmd->cmd_op == NVME_URING_CMD_IO_VEC, 0, 0); + if (IS_ERR(req)) + return PTR_ERR(req); + + req->end_io = nvme_uring_cmd_end_io; + req->end_io_data = ioucmd; + pdu->bio = req->bio; + pdu->meta = meta; + req->cmd_flags |= REQ_NVME_MPATH; + blk_execute_rq_nowait(req, false); + return -EIOCBQUEUED; +} + +void nvme_ioucmd_mpath_retry(struct io_uring_cmd *ioucmd) +{ + struct cdev *cdev = file_inode(ioucmd->file)->i_cdev; + struct nvme_ns_head *head = container_of(cdev, struct nvme_ns_head, + cdev); + int srcu_idx = srcu_read_lock(&head->srcu); + struct nvme_ns *ns = nvme_find_path(head); + unsigned int issue_flags = IO_URING_F_SQE128 | IO_URING_F_CQE32 | + IO_URING_F_MPATH; + struct device *dev = &head->cdev_device; + + if (likely(ns)) { + struct nvme_uring_cmd_pdu *pdu = nvme_uring_cmd_pdu(ioucmd); + struct request *oreq = pdu->req; + int ret; + + if (oreq == NULL) { + /* + * this was not submitted (to device) earlier. For this + * ioucmd->cmd points to persistent memory. Free that + * up post submission + */ + const void *cmd = ioucmd->cmd; + + ret = nvme_ns_uring_cmd(ns, ioucmd, issue_flags); + kfree(cmd); + } else { + /* + * this was submitted (to device) earlier. Use old + * request, bio (if it exists) and nvme-pdu to recreate + * the command for the discovered path + */ + ret = nvme_uring_cmd_io_retry(ns, oreq, ioucmd, pdu); + } + if (ret != -EIOCBQUEUED) + io_uring_cmd_done(ioucmd, ret, 0); + } else if (nvme_available_path(head)) { + dev_warn_ratelimited(dev, "no usable path - requeuing I/O\n"); + spin_lock_irq(&head->requeue_ioucmd_lock); + ioucmd_list_add(&head->requeue_ioucmd_list, ioucmd); + spin_unlock_irq(&head->requeue_ioucmd_lock); + } else { + dev_warn_ratelimited(dev, "no available path - failing I/O\n"); + io_uring_cmd_done(ioucmd, -EINVAL, 0); + } + srcu_read_unlock(&head->srcu, srcu_idx); +} #endif /* CONFIG_NVME_MULTIPATH */ int nvme_dev_uring_cmd(struct io_uring_cmd *ioucmd, unsigned int issue_flags) diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index f26640ccb955..fe5655d98c36 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include "nvme.h" @@ -80,6 +81,17 @@ void nvme_mpath_start_freeze(struct nvme_subsystem *subsys) blk_freeze_queue_start(h->disk->queue); } +static void nvme_ioucmd_failover_req(struct request *req, struct nvme_ns *ns) +{ + struct io_uring_cmd *ioucmd = req->end_io_data; + struct nvme_uring_cmd_pdu *pdu = nvme_uring_cmd_pdu(ioucmd); + + /* store the request, to reconstruct the command during retry */ + pdu->req = req; + /* retry in original submitter context */ + io_uring_cmd_execute_in_task(ioucmd, nvme_ioucmd_mpath_retry); +} + void nvme_failover_req(struct request *req) { struct nvme_ns *ns = req->q->queuedata; @@ -99,6 +111,11 @@ void nvme_failover_req(struct request *req) queue_work(nvme_wq, &ns->ctrl->ana_work); } + if (blk_rq_is_passthrough(req)) { + nvme_ioucmd_failover_req(req, ns); + return; + } + spin_lock_irqsave(&ns->head->requeue_lock, flags); for (bio = req->bio; bio; bio = bio->bi_next) { bio_set_dev(bio, ns->head->disk->part0); @@ -314,7 +331,7 @@ inline struct nvme_ns *nvme_find_path(struct nvme_ns_head *head) return ns; } -static bool nvme_available_path(struct nvme_ns_head *head) +bool nvme_available_path(struct nvme_ns_head *head) { struct nvme_ns *ns; @@ -459,7 +476,9 @@ static void nvme_requeue_work(struct work_struct *work) struct nvme_ns_head *head = container_of(work, struct nvme_ns_head, requeue_work); struct bio *bio, *next; + struct io_uring_cmd *ioucmd, *ioucmd_next; + /* process requeued bios*/ spin_lock_irq(&head->requeue_lock); next = bio_list_get(&head->requeue_list); spin_unlock_irq(&head->requeue_lock); @@ -470,6 +489,21 @@ static void nvme_requeue_work(struct work_struct *work) submit_bio_noacct(bio); } + + /* process requeued passthrough-commands */ + spin_lock_irq(&head->requeue_ioucmd_lock); + ioucmd_next = ioucmd_list_get(&head->requeue_ioucmd_list); + spin_unlock_irq(&head->requeue_ioucmd_lock); + + while ((ioucmd = ioucmd_next) != NULL) { + ioucmd_next = ioucmd->next; + ioucmd->next = NULL; + /* + * Retry in original submitter context as we would be + * processing the passthrough command again + */ + io_uring_cmd_execute_in_task(ioucmd, nvme_ioucmd_mpath_retry); + } } int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *head) diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 9d3ff6feda06..125b48e74e72 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -16,6 +16,7 @@ #include #include #include +#include #include @@ -189,6 +190,12 @@ enum { NVME_REQ_USERCMD = (1 << 1), }; +static inline struct nvme_uring_cmd_pdu *nvme_uring_cmd_pdu( + struct io_uring_cmd *ioucmd) +{ + return (struct nvme_uring_cmd_pdu *)&ioucmd->pdu; +} + static inline struct nvme_request *nvme_req(struct request *req) { return blk_mq_rq_to_pdu(req); @@ -442,6 +449,9 @@ struct nvme_ns_head { struct work_struct requeue_work; struct mutex lock; unsigned long flags; + /* for uring-passthru multipath handling */ + struct ioucmd_list requeue_ioucmd_list; + spinlock_t requeue_ioucmd_lock; #define NVME_NSHEAD_DISK_LIVE 0 struct nvme_ns __rcu *current_path[]; #endif @@ -830,6 +840,7 @@ int nvme_ns_chr_uring_cmd(struct io_uring_cmd *ioucmd, unsigned int issue_flags); int nvme_ns_head_chr_uring_cmd(struct io_uring_cmd *ioucmd, unsigned int issue_flags); +void nvme_ioucmd_mpath_retry(struct io_uring_cmd *ioucmd); int nvme_getgeo(struct block_device *bdev, struct hd_geometry *geo); int nvme_dev_uring_cmd(struct io_uring_cmd *ioucmd, unsigned int issue_flags); @@ -844,6 +855,7 @@ static inline bool nvme_ctrl_use_ana(struct nvme_ctrl *ctrl) return ctrl->ana_log_buf != NULL; } +bool nvme_available_path(struct nvme_ns_head *head); void nvme_mpath_unfreeze(struct nvme_subsystem *subsys); void nvme_mpath_wait_freeze(struct nvme_subsystem *subsys); void nvme_mpath_start_freeze(struct nvme_subsystem *subsys); diff --git a/include/linux/io_uring.h b/include/linux/io_uring.h index d734599cbcd7..57f4dfc83316 100644 --- a/include/linux/io_uring.h +++ b/include/linux/io_uring.h @@ -15,6 +15,8 @@ enum io_uring_cmd_flags { IO_URING_F_SQE128 = 4, IO_URING_F_CQE32 = 8, IO_URING_F_IOPOLL = 16, + /* to indicate that it is a MPATH req*/ + IO_URING_F_MPATH = 32, }; struct io_uring_cmd {