From mboxrd@z Thu Jan 1 00:00:00 1970 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7FF81C0015E for ; Wed, 19 Jul 2023 20:16:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 097B028008E; Wed, 19 Jul 2023 16:16:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0470C28004C; Wed, 19 Jul 2023 16:16:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E796228008E; Wed, 19 Jul 2023 16:16:30 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id D665F28004C for ; Wed, 19 Jul 2023 16:16:30 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 6B776A043B for ; Wed, 19 Jul 2023 20:16:30 +0000 (UTC) X-FDA: 81029468940.17.29EECE1 Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by imf09.hostedemail.com (Postfix) with ESMTP id 567F2140024 for ; Wed, 19 Jul 2023 20:16:27 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=google header.b=coi65PEz; spf=pass (imf09.hostedemail.com: domain of torvalds@linuxfoundation.org designates 209.85.167.51 as permitted sender) smtp.mailfrom=torvalds@linuxfoundation.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689797788; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ReDr3/cUrrY5O6f157kS0Oes02zkOeh4YD/h5uR7Jps=; b=WIwyZ9ZIbPKJPRJFDIVtQ/kxycGBByhDItEbbmM/VUWFAfQmx1LGv0Nni/IhWY5WGA+kxN 0Qhk/nMXG/7L9sRwq6J9JsERYKmIkTdWjTZ865jOPz3owNh+f23Y50UzEt0gXmP9GlqTxL nby7UtKed3FkKwhgyUZe1ZWPjWN25rw= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=google header.b=coi65PEz; spf=pass (imf09.hostedemail.com: domain of torvalds@linuxfoundation.org designates 209.85.167.51 as permitted sender) smtp.mailfrom=torvalds@linuxfoundation.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689797788; a=rsa-sha256; cv=none; b=Z7DoSOUINRIPOPiezvLViYL5MntcYT08cgn17XbzaV/Qx3vz+viLRTeUij3NqoHkP3NwwK 3z8eNOYVHljzmTK4NKa2gFxwbCRCE6uD3lfMMsq0L1OpqYI6CB+LrHpTq2AKW5yh/jREem fq5yH4xgxfPdDWvcWvi4Y+X1jWDVQLQ= Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-4fbf09a9139so11974133e87.2 for ; Wed, 19 Jul 2023 13:16:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux-foundation.org; s=google; t=1689797786; x=1692389786; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ReDr3/cUrrY5O6f157kS0Oes02zkOeh4YD/h5uR7Jps=; b=coi65PEzCV7rCDEfL1mpkcR6k+K28LAsBIXeiZTCZLjyw2Hy4j+ku4FXsXBZCMuun9 P4YFf7zHA3iWFEyAOCYUleRCXXLr6ChxfuWsEDVI8+N1e2T11Lo54fctsXWy4wHwot4X ek09n/z1vP6HGncPkGB8YnuM4OcDKlXEa7zZM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689797786; x=1692389786; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ReDr3/cUrrY5O6f157kS0Oes02zkOeh4YD/h5uR7Jps=; b=FKpJzXmSksYuNI7+u614/Thwig7uUu3mHeeS0YZ/9C5K4oi488alLfakCQgLmsdSuC WeUn8L4pJmJS8MHrw23Iq97VMg/yfLfB9dc+LuVWPeF6ra7ehbAsWP/JkzEb6xwwIlUy bqJOowthhrRtcu/9QV9l5Vqs0REs80yGOrlkSqinCSYqSJmkF/nrMeLELafLNU+lw80H toagrXcK/B8mr92NwGQAmyNbJ7Zym8yhlyN6W9myqLfa9IqzgpT8lMcRLURY44wiihpt i8626ZU9fp4IU8Z2ZVythTYLWJ6KmBrtIZ6hgbc5ApaPP7cJ1HO/DOWeeXh+V6EpxEMk Wjow== X-Gm-Message-State: ABy/qLbu/FBIHMvK8fnevkFkv4CWTSlf6medgcLm4ucQRGyMQfNsmfwy tQN4d+v08wbN/oj01QvlJK3hngvVDXUDIdoY3jnYojWf X-Google-Smtp-Source: APBJJlHx6COFTcyigx2IUrKqEfnNtcMr/YfimDVkpCHvzKXBuJrVgfT8B2iDYpIAYH2feFFwv5kK3Q== X-Received: by 2002:a05:6512:3e21:b0:4f8:5af4:73f1 with SMTP id i33-20020a0565123e2100b004f85af473f1mr927171lfv.32.1689797786151; Wed, 19 Jul 2023 13:16:26 -0700 (PDT) Received: from mail-lf1-f53.google.com (mail-lf1-f53.google.com. [209.85.167.53]) by smtp.gmail.com with ESMTPSA id a6-20020a056512390600b004f1400630d3sm1105727lfu.35.2023.07.19.13.16.25 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 19 Jul 2023 13:16:25 -0700 (PDT) Received: by mail-lf1-f53.google.com with SMTP id 2adb3069b0e04-4fb5bcb9a28so11933001e87.3 for ; Wed, 19 Jul 2023 13:16:25 -0700 (PDT) X-Received: by 2002:a05:6512:368c:b0:4fb:85ad:b6e2 with SMTP id d12-20020a056512368c00b004fb85adb6e2mr613569lfs.50.1689797784754; Wed, 19 Jul 2023 13:16:24 -0700 (PDT) MIME-Version: 1.0 References: <20230629155433.4170837-1-dhowells@redhat.com> <20230629155433.4170837-2-dhowells@redhat.com> In-Reply-To: From: Linus Torvalds Date: Wed, 19 Jul 2023 13:16:07 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [RFC PATCH 1/4] splice: Fix corruption of spliced data after splice() returns To: Matthew Wilcox Cc: Miklos Szeredi , Matt Whitlock , David Howells , netdev@vger.kernel.org, Dave Chinner , Jens Axboe , linux-fsdevel@kvack.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Christoph Hellwig , linux-fsdevel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 567F2140024 X-Rspam-User: X-Stat-Signature: 6o1a9gmwa9qyhgja4fhydyf1uepmf75g X-Rspamd-Server: rspam01 X-HE-Tag: 1689797787-143637 X-HE-Meta: U2FsdGVkX1+GPk9jGAYJ9UtJ05qxNl0E0hwC1nJ853QLJAeB3Ir/DhwMSeoOwUpWXtpW3AeABy/cpkkeyCfTMtacCN4g9BSGweA9Ja6D375kN7A63lT6n7apOAZZ3WP/Hhm2662GOGns3pSjg3kd95MQnEKlSVbuBiAPBUH6htQy3iYeLKHjZjqgG5/O8R7SiS6u+VhwG/R7Ct+05UWrprGGqKBYspScT9c8QN3Tf8QbY3YQ+ThJm7itNyUZP4DRyth0pclYswxFu23De0ctBk3064GkYMpPQcvcogglQ4RmvXXH2VR9HqT2+W5cTb6SqIXctyGMbiGDm4mipLACDpnhU28jBTF3k+F4HD2HVnV1G2Im1BtWq7FRMCB2OadMLmE+kbENu3d6UzrkHSxCYSc5EUQLg52FF0UxoyLHxuogDZ+2jXbUT4F1z4WI0ueaaF4yWsU+HoMX8bJHGzBLI7rN+BWzgawbkSHnnZ9JgpUeFNON/DQJddW/1suKVfPqyGREDRVZd4NWRuH0/WhgZrIG9GQCC1asUVcuavEKpAMSIhF6YufV9uER0Rg50zDvcnWSN1e0uMFjxXsbpesX69MuKytBMkNxfwaMphgPdjtTsqxlSVlXdPSnQG8AFfcURdmPif21sARxFaYxRSGnwYcH2MZEQ4CVmrbBSZbNmfQ2nJjxit+cPyBqPtuMRWXxsiHW+/2V0skKTvPA9lNN1f2GidxndeYZwS9SNiRRYI3uaxtkPzFkEMrkxE6F3Rdeq0YQ7wXYLoqfr41mFbYfq8NW5G44cZzUNeT/dnpgkaHugfU4khw30AxjmUs6tY+ehAkshsfETHrPnE7GgkZ5/oo3TokaLOQqc4Q3DJBfET+zZFOHg7Wfkfgml35GHvRd6L2F6yCmWqeqJdDq0tSU+oA0Fa6CTjxx6618zJeAZqoG8opsZyRcDgnqMPtt6j0vC4UaGSzRgZhZMwITEP0 P6CAhTon flIgQXE9B54dRAh0eiEtO3Yrn9T5soMZ6ANxBwEyCVtRe0dYNLrjWFaCYqipWk5Ww173zt/ucHvCTDQf2MEJsNO0mDZ31Ej+blx91Lo3GAFv25UFuIyeEPwYLxu5sCrp7qkR95c6Md/QLf/Eh2gfGoHPkAUfLNgaWOnlGbAoBcDndvzLd8FrWvfvu21atM8sNZAU+s+s86mHsN42+uEjdUWATFyw9c4bspSx0vTy5eqh7aYnglAWyINTi7MgDeaJ1FpAxCZ4TbhjzWHqoLtMOMPxhZ9RyU56R2WKm7AbYuIV8eQxNILILeDoCKSSjJx0iwi/ZwdLi0GSqQeQWEsVrc/dUEzmGCGnzVaAqpy5c/hDL/WTufN1T1HRbXIeyaM8wpdnBk2xdNdEJO6MvBLh6LLWkzF1Emp5zC3SjGWlLHLuJt5z0qBv0Z8e+bAq3Eu5NQVjrSSMuFmekiruXDfWTFuNN2GaV2rjl9BWJ80VDnErfXV2PJ7CYd/Q1Vjr/ISLj04Y4UmwL1pTXRF1rPf/pHO2ZLLQJLt7udAXvrq8sRcQwGLbZYAv9wTu0zA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, 19 Jul 2023 at 12:44, Matthew Wilcox wrote: > > So what's the API that provides the semantics of _copying_? It's called "read()" and "write()". Seriously. The *ONLY* reason for splice() existing is for zero-copy. If you don't want zero-copy (aka "copy by reference"), don't use splice. Stop arguing against it. If you don't want zero-copy, you use read() and write(). It really is that simple. And no, we don't start some kind of crazy "versioned zero-copy with COW". That's a fundamental mistake. It's a mistake that has been done - several times - and made perhaps most famous by Hurd, that made that a big thing. And yes, this has been documented *forever*. It may not have been documented on the first line, because IT WAS SO OBVIOUS. The whole reason splice() is fast is because it avoids the actual copy, and does a copy-by-reference. That's still a copy. But a copy-by-reference is a special thing. If you don't know what copy-by-reference is, or don't want it, don't use splice(). I don't know how many different ways I can say the same thing. IF YOU DON'T WANT ZERO-COPY, DON'T USE SPLICE. IF YOU DON'T UNDERSTAND THE DIFFERENCE BETWEEN COPY-BY-VALUE AND COPY-BY-REFERENCE, DON'T USE SPLICE. IF YOU DON'T UNDERSTAND THE *POINT* OF SPLICE, DON'T USE SPLICE. It's kind of a bit like pointers in C: if you don't understand pointers but use them anyway, you're going to have a hard time. That's not the fault of the pointers. Pointers are very very powerful. But if you are used to languages that only do copy-by-value, you are going to think they are bad things. Linus