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 E4D7EC636CC for ; Wed, 15 Feb 2023 14:21:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2ADC46B0072; Wed, 15 Feb 2023 09:21:32 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 25E296B0073; Wed, 15 Feb 2023 09:21:32 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0FF286B0074; Wed, 15 Feb 2023 09:21:32 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id F15F06B0072 for ; Wed, 15 Feb 2023 09:21:31 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 21B71C0E56 for ; Wed, 15 Feb 2023 14:21:31 +0000 (UTC) X-FDA: 80469739182.27.23EF688 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) by imf02.hostedemail.com (Postfix) with ESMTP id EB97980015 for ; Wed, 15 Feb 2023 14:21:27 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=szeredi.hu header.s=google header.b=QclEkGeJ; spf=pass (imf02.hostedemail.com: domain of miklos@szeredi.hu designates 209.85.208.48 as permitted sender) smtp.mailfrom=miklos@szeredi.hu; dmarc=pass (policy=quarantine) header.from=szeredi.hu ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1676470888; 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=++V9SJUmsd6aNbKrrX2Vp+eNjsbnSXfCTQVhInkUQuc=; b=TTOLzBe1wvIc2VYDu5OyenE6WtcawdThmWOeDqbbK2VbIAHth98UHVAm9adgmFtr7pW3as 56/idj2XsbqTYDVCFNQ86yWeE2BndMI4Zjtr0kF5ImGzYQ91KyPLJrnP1y2QpU8i3gfC71 GeB6tMlu8VOR1vYg2aRTb+nYU4imrhs= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=szeredi.hu header.s=google header.b=QclEkGeJ; spf=pass (imf02.hostedemail.com: domain of miklos@szeredi.hu designates 209.85.208.48 as permitted sender) smtp.mailfrom=miklos@szeredi.hu; dmarc=pass (policy=quarantine) header.from=szeredi.hu ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1676470888; a=rsa-sha256; cv=none; b=vXq8ewJtglm9RGN//JiJSrrqFux83fbTS/ca6bzeNF5DX6rGhmtNxegrQUONr0aLI2jjnM NT6f5mtd0mJR2LyByD2bJhChFbVXP20XZ4dJP2GQcMbebxLMbR4sW/fPDsOyRyTPJXdKvX tyR0MNGAxFyzI2NtjFL3t6x6avgKKh8= Received: by mail-ed1-f48.google.com with SMTP id dz21so10273620edb.13 for ; Wed, 15 Feb 2023 06:21:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=szeredi.hu; s=google; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=++V9SJUmsd6aNbKrrX2Vp+eNjsbnSXfCTQVhInkUQuc=; b=QclEkGeJaDyJ2MN5w5QfiCQ8de3GeG3+uTs0OA0VXOnBAp915fljIHV1IoA0RRTgBT AtADNyKxCgemkhvl5YgtEnxsHWDPD2qAlpo1Q2gcyAmZ5eGOMZ5gqoKGNxqR9q50Kbl4 K/tC+qnzux1LedbCJfBuAcn4PWcWuom4pMdcE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=++V9SJUmsd6aNbKrrX2Vp+eNjsbnSXfCTQVhInkUQuc=; b=QUFwlBAbpPszApWJ+d63d3+5oW+YzDu31jBPsHMH3JUnjgAPrydvq+I7FkT5ZSgQ3z VK7m4nhMD0FWTrZLDkelp/bxqKklR9LXcngTYtOzjBQcD3P22BrlXmXZLq3+LNT/v+wU gh5hxeF049Epw1p7ykIvScT8VDhi/p0FqyJFR0+gGpxzeOHYZQjXD6bIB7Jt+zfMKkt7 wIGeTydE8Nkq6j4b2j8OhSKUDTWkzGKPxeC1GAXRHpZcKzkYCmw/ZI/qmgunerGW+lGJ jTFVY0/gTlURtU8JDhnTqQDffxy0BCSX/KHJRsnTKTkFLgQ3/FMn0J+peHHKfSJYl6BD uiZA== X-Gm-Message-State: AO0yUKXAz6mDFDTWlWE6bJYllBCw5cSvOJ1sVnv8/DHwuOb2WhpU+mQW Yl5LFeZVmmCmX91LhcksICvXmrNcryjPCWHzdmsnMA== X-Google-Smtp-Source: AK7set8J/qhKUo3tQQmCquV6hVX4BcOX1+D6GldAwjXvhuzacLJCUaR0kGWnZj+kS/ecBNI3awJmTaF7IFjItE9S1tU= X-Received: by 2002:a50:ab5a:0:b0:4ac:c453:6d5f with SMTP id t26-20020a50ab5a000000b004acc4536d5fmr1188884edc.8.1676470886215; Wed, 15 Feb 2023 06:21:26 -0800 (PST) MIME-Version: 1.0 References: <20230214171330.2722188-1-dhowells@redhat.com> <20230214171330.2722188-6-dhowells@redhat.com> In-Reply-To: <20230214171330.2722188-6-dhowells@redhat.com> From: Miklos Szeredi Date: Wed, 15 Feb 2023 15:21:15 +0100 Message-ID: Subject: Re: [PATCH v14 05/17] overlayfs: Implement splice-read To: David Howells Cc: Jens Axboe , Al Viro , Christoph Hellwig , Matthew Wilcox , Jan Kara , Jeff Layton , David Hildenbrand , Jason Gunthorpe , Logan Gunthorpe , Hillf Danton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Christoph Hellwig , John Hubbard , linux-unionfs@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Stat-Signature: mzy7kns1eph7eoqx764xpbsio3wi7ct3 X-Rspam-User: X-Rspamd-Queue-Id: EB97980015 X-Rspamd-Server: rspam06 X-HE-Tag: 1676470887-588322 X-HE-Meta: U2FsdGVkX1/LsPtJ3jimdhblK1o2d5yXAce/iL2xPoolKLsqWMsGbVth8gw1p3eKSSwhMxCw7Azc4OHNNeBxhJ5tx+ghkZ1e4qmeh2lkMUeilPvh6Kc1eyB3iUBzOx3aD9H2/CIWcWQfNap2H7kq9Larmy6PbWpb7e8t3Ui5q4DR50KzLAZNMiClnzNjPNnhXM6zDLOuOjCUBzGJpXsLIPuDc5VEfJ5kwOTe32U3Lioo8Mid3Xo1Oebnt/UUyp7SF+fEmorFVw8Zd/FeSq/bynt3j6mbHEWwID4wit2iZuLzyWiS+xoEUxlXCtujD4Esn/3ueFEuz7QaMBB3pGRQoi5zwNKu5xMztSWU1/Kdpj6RXcuvZgxT/3+tBDXqujCHCCVStxW3ImlPdubPiKt329PmFReWX2AflOvu6ffgP7qz6Li3cb6he6wfTsUHSSUSYOrATeEz/L6LqC6Cfhmva8HOFq3OPJ0quttLz3xomAqc/v4pAs4H3CmmHqvhqEUiLRx4UV9wgkVaPhAEnOa6IamvVtjBeCNyur9GFjcOoeHzf1e1zecJY2NDIJjxljPvmkcIk2CSozGnsvxkiyMDZEtpq0H7uMGCP377z6Zk8IQlLWoqabM13w65frH49FV8eYimjWIQXQVpwULaQG4KAyqeOQpHZ/LDwvaOttKTm8NPM9lVSGOjf1UFIgm5ApAWw/3t7L2O3O4paXZN1LkzdmRcq86ofkKw1Ry62J6FjSlGcDdUw2U7LbvufKrRrQNJ3yqpn4vvQTi/VzLm8VMQAw8anEWbozXy84lRTxYZzdyX2MNzdmet2V7NucwKk1bvYvAEE1gqBiidT0+vqxDgh72DeijtLhmxs7qmPR7Ivw8aA8sMjb0FK+jGW4PzaKjyWEesc7xfBuL4cDJaELLEB2FbC6ER6qZN4sXCtCiNog2AnY+Q30+30RpizJ6Z86AqL0tGfEuLdiMRtIAneGA 4Sq3oXyg vLhvMX7l3A0qa/LvHtLXfItulPmlmh0bH80BScD933/lIaLMEwjUBKKUO6wN4Oy9A98nyBJanbCWIiqnC8fKVV2xURSFnmQwLbImX4HtychSaj96ySHA33sKye1LAz9uqQxl8vILTpJixFWIs5fAYjABFI8N3Qn5oRBIEiVYD8JL/Ng41Yb2Xdn7hUxCmikjBm7M937TkyeqX+WTrujrslGqBZauPEuKaAiAcaQSLsxSsnFY4BeprOdvRi4oxk1ueWTZMER8B5eBjmIaxVz11/+5nxF6uD7ZrO6W1VoWqdKXD5lzxN1qj0hnmxOxcoa1vJO8ileQlala6orsd/7JHqK9X5vLeKQDWqKEnAhHEBKJOjZrQcG2eLXB17Q7LPAGNNhTNWnsxTNKh9dq5xKGXuWkDNXXyUlVtGWxkK5gmyWyeIo724vh0owWu/4Nzp2Y9jFqYHHPfNeyBSNzrd8DiuD/Tf9FhFKXetMbjE2zecQxIG60aN9o4TEb/wVbG3ibFnTmRHBW4nDgdmPYKFv+Xk3AQpg== 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 Tue, 14 Feb 2023 at 18:14, David Howells wrote: > > Implement splice-read for overlayfs by passing the request down a layer > rather than going through generic_file_splice_read() which is going to be > changed to assume that ->read_folio() is present on buffered files. > > Signed-off-by: David Howells > cc: Christoph Hellwig > cc: Jens Axboe > cc: Al Viro > cc: John Hubbard > cc: David Hildenbrand > cc: Matthew Wilcox > cc: Miklos Szeredi > cc: linux-unionfs@vger.kernel.org > cc: linux-block@vger.kernel.org > cc: linux-fsdevel@vger.kernel.org > cc: linux-mm@kvack.org > --- > fs/overlayfs/file.c | 36 +++++++++++++++++++++++++++++++++++- > 1 file changed, 35 insertions(+), 1 deletion(-) > > diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c > index c9d0c362c7ef..267b61df6fcd 100644 > --- a/fs/overlayfs/file.c > +++ b/fs/overlayfs/file.c > @@ -419,6 +419,40 @@ static ssize_t ovl_write_iter(struct kiocb *iocb, struct iov_iter *iter) > return ret; > } > > +static ssize_t ovl_splice_read(struct file *in, loff_t *ppos, > + struct pipe_inode_info *pipe, size_t len, > + unsigned int flags) > +{ > + const struct cred *old_cred; > + struct fd real; > + ssize_t ret; > + > + ret = ovl_real_fdget(in, &real); > + if (ret) > + return ret; > + > + ret = -EINVAL; > + if (in->f_flags & O_DIRECT && > + !(real.file->f_mode & FMODE_CAN_ODIRECT)) > + goto out_fdput; This is unnecessary, as it was already done in ovl_real_fdget() -> ovl_real_fdget_meta() -> ovl_change_flags(). > + if (!real.file->f_op->splice_read) > + goto out_fdput; > + > + ret = rw_verify_area(READ, in, ppos, len); Should be on real.file. > + if (unlikely(ret < 0)) > + return ret; Leaks fd. > + > + old_cred = ovl_override_creds(file_inode(in)->i_sb); > + ret = real.file->f_op->splice_read(real.file, ppos, pipe, len, flags); > + > + revert_creds(old_cred); > + ovl_file_accessed(in); > +out_fdput: > + fdput(real); > + > + return ret; > +} > + > /* > * Calling iter_file_splice_write() directly from overlay's f_op may deadlock > * due to lock order inversion between pipe->mutex in iter_file_splice_write() > @@ -695,7 +729,7 @@ const struct file_operations ovl_file_operations = { > .fallocate = ovl_fallocate, > .fadvise = ovl_fadvise, > .flush = ovl_flush, > - .splice_read = generic_file_splice_read, > + .splice_read = ovl_splice_read, > .splice_write = ovl_splice_write, > > .copy_file_range = ovl_copy_file_range, >