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 86831C77B7C for ; Mon, 22 May 2023 02:49:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D149F6B0074; Sun, 21 May 2023 22:49:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C9DEE6B0075; Sun, 21 May 2023 22:49:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B3E75900002; Sun, 21 May 2023 22:49:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 9B67E6B0074 for ; Sun, 21 May 2023 22:49:40 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 6D8881A0399 for ; Mon, 22 May 2023 02:49:40 +0000 (UTC) X-FDA: 80816360520.28.C57808B Received: from out30-133.freemail.mail.aliyun.com (out30-133.freemail.mail.aliyun.com [115.124.30.133]) by imf06.hostedemail.com (Postfix) with ESMTP id 86EB4180005 for ; Mon, 22 May 2023 02:49:37 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=none; spf=pass (imf06.hostedemail.com: domain of joseph.qi@linux.alibaba.com designates 115.124.30.133 as permitted sender) smtp.mailfrom=joseph.qi@linux.alibaba.com; dmarc=pass (policy=none) header.from=alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684723778; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ELAESE1l2Rgi1Ij8umGR0ICbsV7NekHw+cPMVgNgJOU=; b=tnaini6E2HWWTb8QazUnOHyyAaTzSJUhkhfPEfgnl6clQQ4T0n+Xt1IXu8mzHy0YD0Arwc F6lMnQRUsvD8zoqMldPRVJgB+pjMdoj82Yu8hfPoDEeeHWN2Ohyn/pPhjxv8gYzLiaFxC9 glkL+Oi9uTf0Il5fQfAqlbH4E6Fksnw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684723778; a=rsa-sha256; cv=none; b=ecy2+kBZYhsdUXilEuAUowjaczzIZw393n/+02ehbxk+chi/es3UPkHYOX3dK2L6ylX4qK EvMoaTJxnmxLdj8lCn6drMEH/EyHFT/KwzrciWna62dkAP5eddNtBJE+MkjjmstmXOly5S HmgEmoraDmXR4k/g+kXYIgPwY1CsnBk= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=none; spf=pass (imf06.hostedemail.com: domain of joseph.qi@linux.alibaba.com designates 115.124.30.133 as permitted sender) smtp.mailfrom=joseph.qi@linux.alibaba.com; dmarc=pass (policy=none) header.from=alibaba.com X-Alimail-AntiSpam:AC=PASS;BC=-1|-1;BR=01201311R151e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046056;MF=joseph.qi@linux.alibaba.com;NM=1;PH=DS;RN=21;SR=0;TI=SMTPD_---0Vj6edsh_1684723770; Received: from 30.221.132.35(mailfrom:joseph.qi@linux.alibaba.com fp:SMTPD_---0Vj6edsh_1684723770) by smtp.aliyun-inc.com; Mon, 22 May 2023 10:49:31 +0800 Message-ID: <376ab23b-52d0-d7fd-2dd9-414cbb474e01@linux.alibaba.com> Date: Mon, 22 May 2023 10:49:30 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [PATCH v21 22/30] ocfs2: Provide a splice-read stub To: David Howells , Jens Axboe , Al Viro , Christoph Hellwig Cc: Matthew Wilcox , Jan Kara , Jeff Layton , David Hildenbrand , Jason Gunthorpe , Logan Gunthorpe , Hillf Danton , Christian Brauner , Linus Torvalds , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Christoph Hellwig , Mark Fasheh , Joel Becker , ocfs2-devel@oss.oracle.com References: <20230520000049.2226926-1-dhowells@redhat.com> <20230520000049.2226926-23-dhowells@redhat.com> Content-Language: en-US From: Joseph Qi In-Reply-To: <20230520000049.2226926-23-dhowells@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 86EB4180005 X-Rspam-User: X-Stat-Signature: ygd1t1bkpixeydyqbffiiuyr1cm7tios X-Rspamd-Server: rspam03 X-HE-Tag: 1684723777-521294 X-HE-Meta: U2FsdGVkX19xg8L0sZuBYeNmNjrzPwoNSi1x8eR2kJ/LRPPyIE0RtZjMO/Re/PH/w43LGDR0+j1tEZwPIis307hZkUwDb4mf0vxcV+onQkD9sQc0c+MtSKSWiOLTe8AB3WbC7xZ7VdmjilebhcbDCK8Wu42nLga/pSmjoSD89dpkl1wO70oyR4cldCkCKmQd1MVo0tj/hbMEnsA35/1unlG1gjO7wFKcF1pUHr+vaY/SP40m5pF5+cGO5/kQH3CdyPDwCQ0S3iP5G2PDow4Z8+5KTmvn6znTZbUMUvsuG5Em/VXgqBHAp92zgTUaAVj5F94Z6oFWm3qasyD6SdQ5mnNMommdcas3Id3DqcrnkG7ak7YPXq1ClxR3+tNtaHVUFw2PU//eA/OrrNI6OCf7/zxJ8HdrN4hfNIogGYHi2OjekOXFf/4W3NHVZYGtHZZJ7jbggNFWLOKuWVTEqna2jOssBtsS3V1Kie2kVs3I0U4APN0bMP5ojLPGYR6mN+14AXLKaiICtOJxMLKZdMnZQs61GvmYbqY2E0n4B5B4Sd+eU2ZW9ExC7RxErTYGgRtkR2ONustdYeiE3r+K8GyQzJ1crbHMvq4EuNfY2T7i5Hnrufi92sbsEFBr8zSiLRjqsh2WRjkLOfa7brP8p8pRJD3x3EeIh0W90ocybiHPE20L/XyjsshlRD5rOKx5S2VgcL7QguBp+ysmnDIIBK25R8rrs7d06OwFG97YWsG7eILmNHTAEPJx809C2uxuXIsRTFfKwW50+uz+wNS7rsxvBxhURmMKffiEGbmlUbRFUokie4bS+shddIBql4iOeFWHadwVOq/mkU7iu1L4nw1VM+jcYtSZutQEOfrJxI+5wT1Jbyr5Cz3bcIKHGeWDt2T6LrfnSMvRBEYIgmQq9kAXfdlCZEU44xsA6pMGxI/6JSMjdT8L2MKlAIYcGIXPhM0TeTIqwRMmSRWCk3VV7uq +gsRpQMo 5mHT6Kro6o453xQv4NhP+W1n22G0RpyCcpd2lYLs1iEJME9SqkKf5/O8BWHLmCar4lgFOuxLFpVGZksvbbWsTtnuU36XwpUMoFz0PjYd7mbxeXBpP5vSJGFE4XiFZUt7O4GpyeLGsEZFebRs7luW7BeMnOHDpOI+nTV/6WpUyfECADA0DDZRLFyKFYot/CKBLuieuPCLazltChSiBV5Tf9yXDJ5Pn0otEbx4DmcG0MT48nZBb6rxhjU6Q5DZuTipQcybAodyVP4SfhaZf1Go5KPCAJApoD7rh0SJwdzNYY/j8Yb2x4wCDfnmVZfeqKD/UjZMBSGFBmN1fe32MMx/K/h9BPpaZasYW8BzIhpvrVhU0rCgo0wZdH5vDl1VkX+nPyxoFiWYzgQ0hImr+vvfB2iBc1xUmSU3JrRTUo/kJDfseGI/1x1/XdJMwJjg19bm7pSadE2wXDDKvoYY= 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 5/20/23 8:00 AM, David Howells wrote: > Provide a splice_read stub for ocfs2. This emits trace lines and does an > atime lock/update before calling filemap_splice_read(). Splicing from > direct I/O is handled by the caller. > > A couple of new tracepoints are added for this purpose. > > Signed-off-by: David Howells > cc: Christoph Hellwig > cc: Al Viro > cc: Jens Axboe > cc: Mark Fasheh > cc: Joel Becker > cc: Joseph Qi > cc: ocfs2-devel@oss.oracle.com > cc: linux-fsdevel@vger.kernel.org > cc: linux-block@vger.kernel.org > cc: linux-mm@kvack.org > --- > fs/ocfs2/file.c | 39 ++++++++++++++++++++++++++++++++++++++- > fs/ocfs2/ocfs2_trace.h | 3 +++ > 2 files changed, 41 insertions(+), 1 deletion(-) > > diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c > index efb09de4343d..f7e00b5689d5 100644 > --- a/fs/ocfs2/file.c > +++ b/fs/ocfs2/file.c > @@ -2581,6 +2581,43 @@ static ssize_t ocfs2_file_read_iter(struct kiocb *iocb, > return ret; > } > > +static ssize_t ocfs2_file_splice_read(struct file *in, loff_t *ppos, > + struct pipe_inode_info *pipe, > + size_t len, unsigned int flags) > +{ > + struct inode *inode = file_inode(in); > + ssize_t ret = 0; > + int lock_level = 0; > + > + trace_ocfs2_file_splice_read(inode, in, in->f_path.dentry, > + (unsigned long long)OCFS2_I(inode)->ip_blkno, > + in->f_path.dentry->d_name.len, > + in->f_path.dentry->d_name.name, > + 0); Better also trace flags here. > + > + /* > + * We're fine letting folks race truncates and extending writes with > + * read across the cluster, just like they can locally. Hence no > + * rw_lock during read. > + * > + * Take and drop the meta data lock to update inode fields like i_size. > + * This allows the checks down below generic_file_splice_read() a Now it calls filemap_splice_read(). > + * chance of actually working. > + */ > + ret = ocfs2_inode_lock_atime(inode, in->f_path.mnt, &lock_level, true); Since prototype is 'int wait', so directly passing '1' seems more appropriate. > + if (ret < 0) { > + if (ret != -EAGAIN) > + mlog_errno(ret); > + goto bail; > + } > + ocfs2_inode_unlock(inode, lock_level); > + Don't see direct IO logic now. Am I missing something? Thanks, Joseph > + ret = filemap_splice_read(in, ppos, pipe, len, flags); > + trace_filemap_splice_read_ret(ret); > +bail: > + return ret; > +} > + > /* Refer generic_file_llseek_unlocked() */ > static loff_t ocfs2_file_llseek(struct file *file, loff_t offset, int whence) > { > @@ -2744,7 +2781,7 @@ const struct file_operations ocfs2_fops = { > #endif > .lock = ocfs2_lock, > .flock = ocfs2_flock, > - .splice_read = generic_file_splice_read, > + .splice_read = ocfs2_file_splice_read, > .splice_write = iter_file_splice_write, > .fallocate = ocfs2_fallocate, > .remap_file_range = ocfs2_remap_file_range, > diff --git a/fs/ocfs2/ocfs2_trace.h b/fs/ocfs2/ocfs2_trace.h > index dc4bce1649c1..b8c3d1702076 100644 > --- a/fs/ocfs2/ocfs2_trace.h > +++ b/fs/ocfs2/ocfs2_trace.h > @@ -1319,6 +1319,8 @@ DEFINE_OCFS2_FILE_OPS(ocfs2_file_splice_write); > > DEFINE_OCFS2_FILE_OPS(ocfs2_file_read_iter); > > +DEFINE_OCFS2_FILE_OPS(ocfs2_file_splice_read); > + > DEFINE_OCFS2_ULL_ULL_ULL_EVENT(ocfs2_truncate_file); > > DEFINE_OCFS2_ULL_ULL_EVENT(ocfs2_truncate_file_error); > @@ -1470,6 +1472,7 @@ TRACE_EVENT(ocfs2_prepare_inode_for_write, > ); > > DEFINE_OCFS2_INT_EVENT(generic_file_read_iter_ret); > +DEFINE_OCFS2_INT_EVENT(filemap_splice_read_ret); > > /* End of trace events for fs/ocfs2/file.c. */ >