From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761724AbdDSJdp (ORCPT ); Wed, 19 Apr 2017 05:33:45 -0400 Received: from mail-ve1eur01on0067.outbound.protection.outlook.com ([104.47.1.67]:6176 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1761695AbdDSJdl (ORCPT ); Wed, 19 Apr 2017 05:33:41 -0400 Authentication-Results: spf=pass (sender IP is 193.47.165.134) smtp.mailfrom=mellanox.com; grimberg.me; dkim=none (message not signed) header.d=none;grimberg.me; dmarc=pass action=none header.from=mellanox.com; Subject: Re: [PATCH] nvmet: convert from kmap to nvmet_copy_from_sgl To: Logan Gunthorpe , , References: <1492558335-2845-1-git-send-email-logang@deltatee.com> CC: Christoph Hellwig , Sagi Grimberg From: Max Gurtovoy Message-ID: <3cf1fbf9-8b1d-4acb-e680-87efa5ca7c6d@mellanox.com> Date: Wed, 19 Apr 2017 12:33:09 +0300 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <1492558335-2845-1-git-send-email-logang@deltatee.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.223.3.143] X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:193.47.165.134;IPV:NLI;CTRY:IL;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(39450400003)(39840400002)(39860400002)(39410400002)(39850400002)(39400400002)(2980300002)(438002)(199003)(11905935001)(377454003)(24454002)(189002)(9170700003)(31686004)(31696002)(575784001)(47776003)(76176999)(65806001)(6306002)(65956001)(54356999)(50986999)(65826007)(5660300001)(77096006)(356003)(54906002)(86362001)(229853002)(8676002)(189998001)(4326008)(2906002)(50466002)(53546009)(4001350100001)(8936002)(23746002)(64126003)(33646002)(38730400002)(83506001)(81166006)(305945005)(106466001)(36756003)(3846002)(7736002)(230700001)(2950100002)(6116002)(2201001)(3940600001)(2101003);DIR:OUT;SFP:1101;SCL:1;SRVR:DB6PR0502MB2935;H:mtlcas13.mtl.com;FPR:;SPF:Pass;MLV:sfv;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;AM1FFO11FD021;1:OeKuYrpFyOrwNHUVLDOUmzykhF068PJn+vxe0MrChPHIQahaMLcuXdosvipcFe36N0DV5uW2DZXyi3m1pYaGL6h0FW0Lpd/RPUzfABFP5do5DZGBcDaTsTuKbtxdSeMP75WZ7vgW0coi304mj1lczZgGTvaSrm2v9vqW3fJ86gv5Ew3/52/HfYutp7kIqf53zRdCTfmnC4TIJHczu3SxsO0g+yaXwxR1khy1p4PbFxQEJe2y9C66notoOGfWmsTi279sfZZDUy2VPXQ0IHLdUOeAhKwI685Pg7VP3kvNjio9wLROCoIe2Md/XrO6+ZgDWKEn5Qw+cCYVLQVQ/7ay90K8xkBQXHZHq9aJOGESTkGX+Obb3DkBxM+MbQz9La0fPvZwF0Vok+Iknez392Mv6xDzWbNQhdJp1f/ju2qBCKE3In7NfQGM88bnqlzqKmR6YGhm8THdl2jWmDqQmkpcI7qdw4l/CzxfO0lXke+TGBdktCLXv0ZT1kdSJ56CYUR9YXdY1ENS2UQHV7lHDS8Br2igf6ekt1aEMWANneWLQdYRMVzMzyQJVQ+ATcApV3p6 X-MS-Office365-Filtering-Correlation-Id: 5786f3bd-e750-4fa3-7993-08d4870727b2 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002)(2017030254075)(201703131423075)(201703031133081)(201702281549075);SRVR:DB6PR0502MB2935; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0502MB2935;3:Ofq31fv+itEuS0nQHn65wRQ7y6hPxefei5Jj7gJGPUqQ8npxFE6GeXsz/O2HMJKGHKCMCOq3iILMFB/9vXfT+aTirvcc267XbyLnTSK0dVaGClw+IwnxtuimtKdw2d8mj6smZw7m/rvPMERa4Nd37AeFvyLllt7Fq0CXNZk0Te2udjBcRAtdEJHzqklAOTjDWsTnTiu4imOsqBtWGUAeQtOwBUlzkycU5q1ZflTn144rBnPtImdvS3oHyaZakvVkodV7pARDGA7Rl05B0rm8f6ZSd6RHp6oBtmrBEvcgPSW8rPHsM7/1Q49b8KziWbHaBogiRkVPWIHjCXJiK9QNnL0+2ZJC0omstNVOXE/JmYUlGL/fDO8O6Uc6DoY5MrXUd2W27Dc6KDnJuH2WBikge1hAl08+Sfi9QuqKLLWhyaQz41nxBcgSKlksF/WQWCMLNYXgHegd/z9Y4a4DWPiJ3Bzx3p4ig+xRaXs7BLg6VO3FfVCHDo9ZN3hNsA/7cJhMYM177toDwF4VdBJTltpxsA== X-Microsoft-Exchange-Diagnostics: 1;DB6PR0502MB2935;25:E4Hhy1FYwhsM0ioLYOnrRA57P9o47Miz0DNS9bqYTUQG9oywYYLDiY4jzeqMx8Dm1A9f/Eo3+U92+SG2oWY4/RVcBqkJ2etWRyNNPa9r+ZdGpHuFOoctOlyqPvUaukPxSRj5sUPxym+C7wYwXc9rV6b25jBaBDLiuBYrLWOwtlqOZLgaVy3SR6j/pVnN/DDePC4hBXKErdbmcL3lOMggWbNT/MMZqgUslqBaH+PcUAeJ/c/Exx92gEIOuO1krV0akD2YSZ7WZjeZWxaSIsPNn9If0vFN7wBbEoqnpR8qCK96/F6LWOdcEDd9fvAvR6fVYP/NNYaMnwzWuyg9NAG4/UlLIIDmlyJPti7vn4L2mQEPFfsaBRV5cJUShN3KzGIOgY9Xk7qCTrAhUN0Kjm/MNnY52grCGH3j3OIJncrQxrQe6AMo0rUxgW0OrUfvZyXKHxoD3Qknr3g1K4aZFu5Lhg==;31:HUfexzUDZp+CLvQJHEsI1c9tDrCe9E9gVD1imPyNq8MjVfRS7zb1pU4JtVydEAH9MY0f2WAM5HbxJmJj3W+zi7nELsYpcrphb0A6b1+XB7Io9gX2DJXbc0fLqQleGXH608vtB59LGbBQtpv/Eq7faD9F1OK942wP6IOgaP8UPvrbXJHklkm4q6j14wbX0aiE5s4S3TPMJyj7yFv/riG90ROSdnK2BTqA80zFlGFEV5klTI/vuH1dxJAocXkrXTu9kjlAQVY9wh3D3eWoVFMtLYiDVOrmEdg1FU90cRvdJZo= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0502MB2935;20:9THudE3zgYv9sPpI01zKc7qMVT+ijQzInpJuOm9PnpOvu6rSfHZy5SLLQoqtrpjO7bQD/UtkI8YtvVKg7rRUBUiTOnrb0/JTb3rLVM7Dih1fK1BLfp6P67S2lWEEYp15qJuvRIgR46Lt4OKoDs7zJHcovacSeDH4MZIXtz09bvWE6nYV3Q+xTbumdAN0lm/ZtNUpF8UorkkPP52mf4N7oT+CDjafprwUq7CcvXPDf7xpQ6famBPkJSTtDdZYSIAvh4YccS2SyWbvD8zfbXSxJ8tcfzxIqlkLpBgSWiIdIsAsGAJ2NlU3K2PpzZ4FbHeVYSl+Lc8OHmDltrDsV2RkcLQkE05JFkXpoQnsKMbWftCIHj0jifkP7SeQGCvE0IlP5i+bMO8DqFY7FSciKYKDNjuMqCYK+k2/OfdKIXEBnZFWh0aPaSOS8bbkmpabRa3od2w4hhbGp1e3HZrj6gIDxF9Z+mGvwLprPTWWCQoazfOK/MUuRQNI5raBMzV1JdCu X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(20558992708506); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(13016025)(5005006)(8121501046)(13018025)(93006095)(93004095)(3002001)(10201501046)(6055026)(6041248)(20161123564025)(20161123560025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(20161123555025)(6072148);SRVR:DB6PR0502MB2935;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0502MB2935; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0502MB2935;4:dThIGMzXFHDKfKVq70MzdAAneHvcWc1glzNJZ0pmrjP5Kdy1r4KXAYbiWuIRGkuyRA8oWmVY1mA6l61HAtJzi2RguCSbGnqZxhAXxo3ZgnEp1uHz6+E41jfNflPIs2kDvMCckLUqhiAzBrOononwtUWhJx6kBcna/Y+87Qty/Ls+hvon+BWIzhX2ogVdX/NqYem5rF7QXDXzTYYeAiu/YW8eRvO3lB9CW5yaQjcL9M9CnksUGdBIP8tPhQgkBUsnP4wy8z05qfQySE/rAxqvYF5sd3nYvS1U0OhvbmWrQry9eSAbVCc55Un3h8r/xoQwCgI8kXxwJy/O+ydGjGRy8/jRryBcZdU7IE+d8B88F+vIEqXErGb0FYeZEGTgO/QGDcwjmv13OCAlRw8xcG8CwzAPhilQHiMifUSEgFoxJXsat8+pNSSceTHBs6aCZ+0UQw/LZgSbux3FLlLnHXyrg9XxXn+8iXOCkSUZokHJKpJVH1Bn03X5qyE5htKwxz2A6vVQC57HJiu5cCxU44hhzw6YqhSBJz/CvR2Kt0SSFe7CvS0dPvvueSME0MjMUGt1mMCFAv8QStgMUsREtufQxVftCBtQbmMVxS85XU/bjr3wWGHvhcFocE/FWBu8tKfSi1jRiWtkW79F1F8JD0ydQT95uICkLjce5jou+rRbHPrPw2OdWu8LbDnmvbnh0WrEn1zm6zH2MIIabhqM1jZhg3FL2+RnmHwHKIqrMqD4t49jsOoZp1YWs8Lo+K+v3WpLnukFBKc9fsS98flFQgJGipsHySZ6hJNomeOjusF0zuzmbDG0UfYTlkccxhh4NYoC X-Forefront-PRVS: 028256169F X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;DB6PR0502MB2935;23:juQ2dIYPL3tYup7YMh/OD6Gdg6PE1Fub59r?= =?Windows-1252?Q?AkiNS+xWpNZD3/H3cXOlrcz+buTs9Iba4dJvFGZVKrNeeAxfAKcO2xgn?= =?Windows-1252?Q?LkzS0zoGcTbxUFUY8tSkKTyfEEzWWta6/NS5uTdz3Enl8URa4qb4G9L1?= =?Windows-1252?Q?jcArkTWMM2zVofh0zjyZLDDHki2OU7sCnmUnFI5i4oiBZsMJBEALqE3R?= =?Windows-1252?Q?p2xfY+Fz1KN/D1QGfbDCSas1DbYpkPzTGKN6GgU96ycWb4JGo0OQGrLw?= =?Windows-1252?Q?RaRvVtTHMRrvTCLzzhmnvHO5tTKt78HwOpmcuNK/Bw3fDaWbW0mNmmdL?= =?Windows-1252?Q?/AHS8lgYC/OPl+jBO8aWBrFpo7U5zmUPESH33KCDhwhXgMGFh33WifWJ?= =?Windows-1252?Q?IXxI+HCf8TPUzCU/yGU3aYnCw/wEvSqPIazEcmt0eHl2zD4ouxbFd4it?= =?Windows-1252?Q?m6lucLv21Iy1eOZWucKQ8USp2TBZyfn0jFfzVT9q2oYJLqWJQlKlDiBS?= =?Windows-1252?Q?Sz+NOFqwKWOvitxi1QlDlnW0HVniVlHMmXS2Q8JamXrU4gzEXZRCnI/o?= =?Windows-1252?Q?zo0jeTN7lyIro3q/2+Qmvnxye7rz1qHBf3JLz1gOsdgU3Kdlptou+neO?= =?Windows-1252?Q?7sJ8YIW25CgJdUVjxJViEQkI3hlS8Egl93y1mRFxL4Q7UPCti0trGCjn?= =?Windows-1252?Q?LB83IfglOW+7F6ZOmL/0UJnx+GvTizH19Ar8qv27kRpxGT6huhFdh+/Y?= =?Windows-1252?Q?xFojW1lYzQMhu2tojfb44V193TZTt2bR5xKvrVoqqtG2GduHlRN9zcMm?= =?Windows-1252?Q?LIRqdalirEXedpn8UyaPVLilCCmQ46h2SeScl7KJRr2YsdWwyJoLEzzY?= =?Windows-1252?Q?TfY24uWgRRXqoOK9tWQ5yu913wpkbrDKeNS//EKTNkbq92u/RHeDU2Pg?= =?Windows-1252?Q?ybpDm8FisqFL/BPPCSR25qeuBxxRC/Si3hxwIN6k4peW8z2pORztqOgy?= =?Windows-1252?Q?Q2fEB+ThHaBR4sJE+Jn7BCa0INSRS4Rr0xJQbVcKSkERftLtbrQ3dWZM?= =?Windows-1252?Q?W28nAwRzFaeEZyUOCrCvA7+uMH2aeY2ujFtRFjvcBKqvGPxktDSXfLEb?= =?Windows-1252?Q?5kjETHj3BF61R/zL4doT8Iwkubf6sgNgRUftOuVPeVCzV35Kw8h6e0+e?= =?Windows-1252?Q?EnQJHH+LTZ43hHMyStzLdlJXjrRNh4Vm17bT858Lr6Wr+OuNE/WDx0i4?= =?Windows-1252?Q?PufF7K3Y6pYozshEtZxedpvM6cL4F/fc0BoX8LnXBquBaBVt+rfFFoxC?= =?Windows-1252?Q?v0r3L14GsnIkyAVD3GECi3OBoCymNbexw1CbF2I72/Oy6uImAVs9pMMh?= =?Windows-1252?Q?RkefkF4IPZJS9RkuYxMXcqh1gRlPS8z+o7cSlzoeLJZ0UONMrftefZAU?= =?Windows-1252?Q?cD6amHKriYQWenNYrwnmfGNOiNrBFS635IGbdTNBn2dsY9Iwr3JJ97Db?= =?Windows-1252?Q?MVSKgcnMHHY0KNaXu5LNhKHaH7bMk?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0502MB2935;6:PBZL0rnrEayWfXHwh+MrU0sdNE9Xp5oHTRfWpIhIqfKjczCSCAN8cOEyzFxdiuQUACtgdVKdXawNQxAE631gdOfZ6+2Z3bAC//jD7rtV3O2CPKbMN79bS35Oeiq6XqwZnnHPB2I43iPao86Tsm0wu3kr+KBZcRhRExhG0dc3Gv0QuKMOyXnRGCi/WwXock7Paj6+wW/UJkXMVeJVMaXatXdAh61sVjQ6DH6zYcq6JNmSooymSHJIQc7e4dOx1Ynq3Ttv02bPEBO4yPw9el2qALMT7nMw7N+rlulVeKyAOznFEDIcs7fUBlPvzjZC2cC8Np2RlBXk2WZKWkw31DH/Mo1WyLOxCs6lUkUZAPhH1PjYtyE7fj3QJooKXroZDbsQ5OzqKR8fzrKBfv0S+EFPAuXswXyF+nj5qNTN6mt8GwKr839y3zZ2fP2/qHNfV9vCiGwERJ6lFBs58rDz5Ml9SifyPI0b0G7ap7egLqyK6aM=;5:4RlhJCjICchVEm7fTg2u3NjIFHv5rCMaZafWZfhV7QiQx6gk7UypEtRL3E9rHPGsfAsS9m7IAGWCYOxX5DnNGv5BzJ6vW15y1gvgg6Oucae77gjNT7pMBo/Tcw6NrGd1b+RGTBQo29hvTHDEgNE34A==;24:sWXwPJs6WDvFhpHJPcAyAf2t7d1vdmIHiDrELkRggwcnKC/NK8FYaXXtpTYGFDornLqncsD3SgMCBaHUDxZ/fT8XqlxBZstCOlYcswGtVF8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0502MB2935;7:GnY9rNGuTCv2GbrtXHni15jOByEesY/sUaj7U6gOsc4GwoJRZDXyJdLvcIXyJAsBdd96bLScUP/ZQyfbZg1mlPWOV5RKS2dHcb+bkObnyGsfMZorkf5XmgbzaQFd9tUbD7KpGg4iLt8lvNMFwPywVF+NjOlZTyJQ7L/+cm0wQmIwR2jzJVuDhVcSeQ2ZaZuTK8F3jdzYxMCIffQ/Llpx2bLakRwk5Iu+pbRoXJN11F/RBkfwJMQNWSmJqvytk6FRnnW0wyeQ6nb9WXFeZQKtYtpBQq/tzvj9Sd7x8LYWdm4culvEU5qARobaUiJYce1LIzTalgG1+riRELNLmWjulQ== X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2017 09:33:36.4271 (UTC) X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=a652971c-7d2e-4d9b-a6a4-d149256f461b;Ip=[193.47.165.134];Helo=[mtlcas13.mtl.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0502MB2935 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Logan, On 4/19/2017 2:32 AM, Logan Gunthorpe wrote: > This is safer as it doesn't rely on the data being stored in > a single page in an sgl. > > It also aids our effort to start phasing out users of sg_page. See [1]. > > For this we kmalloc some memory, copy to it and free at the end. Note: > we can't allocate this memory on the stack as the kbuild test robot > reports some frame size overflows on i386. > > [1] https://lwn.net/Articles/720053/ > > Signed-off-by: Logan Gunthorpe > Cc: Christoph Hellwig > Cc: Sagi Grimberg > --- > drivers/nvme/target/fabrics-cmd.c | 32 +++++++++++++++++++++++++------- > 1 file changed, 25 insertions(+), 7 deletions(-) > > diff --git a/drivers/nvme/target/fabrics-cmd.c b/drivers/nvme/target/fabrics-cmd.c > index 8bd022af..2e0ab10 100644 > --- a/drivers/nvme/target/fabrics-cmd.c > +++ b/drivers/nvme/target/fabrics-cmd.c > @@ -122,7 +122,15 @@ static void nvmet_execute_admin_connect(struct nvmet_req *req) > struct nvmet_ctrl *ctrl = NULL; > u16 status = 0; > > - d = kmap(sg_page(req->sg)) + req->sg->offset; > + d = kmalloc(sizeof(*d), GFP_KERNEL); I'd prefer removing the dynamic allocation and use d on the stack to simplify the code. Any thoughts ? > + if (!d) { > + status = NVME_SC_INTERNAL; > + goto complete; > + } > + > + status = nvmet_copy_from_sgl(req, 0, d, sizeof(*d)); > + if (status) > + goto out; > > /* zero out initial completion result, assign values as needed */ > req->rsp->result.u32 = 0; > @@ -143,7 +151,7 @@ static void nvmet_execute_admin_connect(struct nvmet_req *req) > } > > status = nvmet_alloc_ctrl(d->subsysnqn, d->hostnqn, req, > - le32_to_cpu(c->kato), &ctrl); > + le32_to_cpu(c->kato), &ctrl); > if (status) > goto out; > > @@ -158,7 +166,8 @@ static void nvmet_execute_admin_connect(struct nvmet_req *req) > req->rsp->result.u16 = cpu_to_le16(ctrl->cntlid); > > out: > - kunmap(sg_page(req->sg)); > + kfree(d); > +complete: > nvmet_req_complete(req, status); > } > > @@ -170,7 +179,15 @@ static void nvmet_execute_io_connect(struct nvmet_req *req) > u16 qid = le16_to_cpu(c->qid); > u16 status = 0; > > - d = kmap(sg_page(req->sg)) + req->sg->offset; > + d = kmalloc(sizeof(*d), GFP_KERNEL); here too. > + if (!d) { > + status = NVME_SC_INTERNAL; > + goto complete; > + } > + > + status = nvmet_copy_from_sgl(req, 0, d, sizeof(*d)); > + if (status) > + goto out; > > /* zero out initial completion result, assign values as needed */ > req->rsp->result.u32 = 0; > @@ -183,8 +200,8 @@ static void nvmet_execute_io_connect(struct nvmet_req *req) > } > > status = nvmet_ctrl_find_get(d->subsysnqn, d->hostnqn, > - le16_to_cpu(d->cntlid), > - req, &ctrl); > + le16_to_cpu(d->cntlid), > + req, &ctrl); > if (status) > goto out; > > @@ -205,7 +222,8 @@ static void nvmet_execute_io_connect(struct nvmet_req *req) > pr_info("adding queue %d to ctrl %d.\n", qid, ctrl->cntlid); > > out: > - kunmap(sg_page(req->sg)); > + kfree(d); > +complete: > nvmet_req_complete(req, status); > return; > >