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 7DA77C7EE2A for ; Fri, 27 Jun 2025 15:46:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2058E8D0007; Fri, 27 Jun 2025 11:46:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1DD0A8D0006; Fri, 27 Jun 2025 11:46:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 119E28D0007; Fri, 27 Jun 2025 11:46:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 013378D0006 for ; Fri, 27 Jun 2025 11:46:11 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id ABE33101FC8 for ; Fri, 27 Jun 2025 15:46:11 +0000 (UTC) X-FDA: 83601606942.29.192F86B Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf15.hostedemail.com (Postfix) with ESMTP id E4832A0005 for ; Fri, 27 Jun 2025 15:46:07 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=n4oL3gyp ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751039170; 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:dkim-signature; bh=c3vCkFbhdgYVqqEDes1QFepeOfqXaiheP5+7KDv7Ebw=; b=sq7Q4Kegqikpre5lIHP/QAGmF9KUeE8/cNb+H4MxqUiYWHxH+W85Sp/hTfkmdJPUvnVA6t Pjel88fEdNfOBdp+eCeHVYhlacC+DXOp4AnzZ+E8e6soBSjQ5kFtebmOiU92L3/Zu/DrTE 1e2VGRQXbEAPqE8eE+2o2CBVNnGHkVs= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751039170; a=rsa-sha256; cv=none; b=ob3J11NKGfXvTc51tYDW6VbRuK4wwSkcC7a0HJd+3WnfTXhTny00hbC6fKQ6vW5eXbO0Xc G475dko5crif1CueB6CY5uneFSLT85hoCQXeBgUXvYM13KUhgjf/7IBId91TOq4GWKsbHr A14os417W90G+A41Bo8HZiW5nqqoEj0= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=n4oL3gyp; spf=none (imf15.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Transfer-Encoding: Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=c3vCkFbhdgYVqqEDes1QFepeOfqXaiheP5+7KDv7Ebw=; b=n4oL3gypIqI5TK4THtINSLCpag SLp8q5VAaIR2EAkfhPLrL7o2dw/4U+ToS3OxEkKznV75IoTM1GcozkaWQ/8eEI33+FO5aDjg13dQ9 DylQV6P3+OXB19c6sT+eReDIh97U+/GmnY8WvId1nHr4daVmwDz7ydeDjadHBnDQG7QrNElKKx/m9 hFgxuHXLCzivX/7zTwZqwWToFNjne1uEIhM5GhdaBPk0i4oEdgw2GF8trCoksP0lS41SPzRnPF+R1 pcmWZq+1ZNQMmJ4HglF5LEQKe1q2dAZxj5+MQJwTlZFK5lmsOXAISpwtg5rwx4xV34HpBgEEXMxOQ 9Fo+Gong==; Received: from willy by casper.infradead.org with local (Exim 4.98.2 #2 (Red Hat Linux)) id 1uVBGy-0000000EQ1q-4BPK; Fri, 27 Jun 2025 15:45:53 +0000 Date: Fri, 27 Jun 2025 16:45:52 +0100 From: Matthew Wilcox To: =?utf-8?B?6ZmI5rab5rab?= Taotao Chen Cc: "tytso@mit.edu" , "hch@infradead.org" , "adilger.kernel@dilger.ca" , "brauner@kernel.org" , "jani.nikula@linux.intel.com" , "rodrigo.vivi@intel.com" , "tursulin@ursulin.net" , "airlied@gmail.com" , "linux-fsdevel@vger.kernel.org" , "linux-ext4@vger.kernel.org" , "linux-block@vger.kernel.org" , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "linux-mm@kvack.org" , "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "chentao325@qq.com" , "frank.li@vivo.com" Subject: Re: [PATCH v3 3/4] fs: change write_begin/write_end interface to take struct kiocb * Message-ID: References: <20250627110257.1870826-1-chentaotao@didiglobal.com> <20250627110257.1870826-4-chentaotao@didiglobal.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20250627110257.1870826-4-chentaotao@didiglobal.com> X-Rspam-User: X-Stat-Signature: jbmhm1jo93ky3rrwsqoq8d9u8g89sait X-Rspamd-Queue-Id: E4832A0005 X-Rspamd-Server: rspam08 X-HE-Tag: 1751039167-316481 X-HE-Meta: U2FsdGVkX1/xNYXt7Ta3Afkxi6QXsAPVybE7aXdwCLfPL3WfWSuc8Xtx8/8yuoFQ7ERxzaLytxJKatwtWUTOlN6bJQd6P1Ebad6WPmD4EjqhEUH2lv0IP0jYhz/zeplAhnX0cGWPaIJaP4MnaP0no/1F3KLQzUeHimJzeLTqdAAn36YZEQzmSm54cfhZSbRzXOHTZlYpGKpwtSsuAoUMtQ7oGuDHRipTYoF9sAhU6HgZFhTg4SIvEYljkSr1tKq7+ncRnn86wZcHIt7VQ9l3WSVPv82+bXH7xFUSF0h8P9QxQMClbPI+1S6t1KdTFJVHTEbd9Ne1ja++o3JCEDG5fSrUHq1USUnyV4rUYwIFdcAYjbR0hlmOe6WSUI1oo/0yOXT/7NjSj+ocQFcNCGPIiucLYc1G/aChRTQZYDhJKlew3BfN2flhirxm6RDU4YcoqoG6Z4gyzL8eauVZ2A33kqT5Q57A2ADmSfGtzROtQJDp8MegjuCqCfCV5ZQH64aLzmGk9HgTUeE0eDlb1TEiqvAnYgVUajerH8l87EaSPv5kNkTSx2WQ19pqz5gsu4XCfz836f8O0t3u0zjqWBz0mJrog6lJBqd+vU5qknp1atbQL/MeCC0H1C3Z3OSEMinyoWGWbs7rzb7TM5hVhdzrcesVRb3o+kccIm8lV0ffH/nl+uWSRNMZWu7J182s/orD3s76OidN0avI5hucI9kE1nbWzsgb7gCkwhbuAJcgisEc0rt/TXvb9x0rvCkXZY7vlk5V4SENiu18YIvl1gBtVIoSdcM5ytWlda2JXkqafTy32GN8s+9Kt8+urcw/aTntpKwMFtyEh9obl2vXlACW6ISTY9WyfaHpsuvwGFB10+gRQ5nxtleZX4lMa5lRrQu+uCJ3G+wPYD9o1J33axtiTjBuSQ1YGKBY7LVx6QizGQnD6RtXDqgAnmZ4TrDkR+OUer7BF1fTXHmZXccDrBA QdHLVtLg ZwolczN5UhnAgbqvi+rSyoUOr71m5RY51pjYBBddtYbKFxS2jfG5IvQWMaD+9av+aHBoGSiLjQ/3J7cHpzCg9cfLGs3BqgLpdl7c99qhOA+n4Xzhyj3i0i9/dpGjh/FuBCKcv5M+AyuOIoJzeGOlcdQeSIO6lwMeEr+X0KOoUkCVDzUFJFABVjD+5b0qiyXKxI6WP84U3Kj2kGfcIhDS/SoeiXQQV+do+ei04MXkZsp2JZw1TgOGblF66XbgkV80PtxGhq9UmHdizCaENY37hG0D2qYv2pmpbMYiqRtyeBeIr6U+buHvzGcj03Q/KwguaFWIJYkUj3fsB3YI= 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: List-Subscribe: List-Unsubscribe: On Fri, Jun 27, 2025 at 11:03:11AM +0000, 陈涛涛 Taotao Chen wrote: > diff --git a/fs/exfat/file.c b/fs/exfat/file.c > index 841a5b18e3df..fdc2fa1e5c41 100644 > --- a/fs/exfat/file.c > +++ b/fs/exfat/file.c > @@ -532,10 +532,12 @@ int exfat_file_fsync(struct file *filp, loff_t start, loff_t end, int datasync) > return blkdev_issue_flush(inode->i_sb->s_bdev); > } > > -static int exfat_extend_valid_size(struct file *file, loff_t new_valid_size) > +static int exfat_extend_valid_size(const struct kiocb *iocb, > + loff_t new_valid_size) > { > int err; > loff_t pos; > + struct file *file = iocb->ki_filp; > struct inode *inode = file_inode(file); > struct exfat_inode_info *ei = EXFAT_I(inode); > struct address_space *mapping = inode->i_mapping; > @@ -551,14 +553,14 @@ static int exfat_extend_valid_size(struct file *file, loff_t new_valid_size) > if (pos + len > new_valid_size) > len = new_valid_size - pos; > > - err = ops->write_begin(file, mapping, pos, len, &folio, NULL); > + err = ops->write_begin(iocb, mapping, pos, len, &folio, NULL); > if (err) > goto out; > > off = offset_in_folio(folio, pos); > folio_zero_new_buffers(folio, off, off + len); > > - err = ops->write_end(file, mapping, pos, len, len, folio, NULL); > + err = ops->write_end(iocb, mapping, pos, len, len, folio, NULL); > if (err < 0) > goto out; > pos += len; > @@ -604,7 +606,7 @@ static ssize_t exfat_file_write_iter(struct kiocb *iocb, struct iov_iter *iter) > } > > if (pos > valid_size) { > - ret = exfat_extend_valid_size(file, pos); > + ret = exfat_extend_valid_size(iocb, pos); > if (ret < 0 && ret != -ENOSPC) { > exfat_err(inode->i_sb, > "write: fail to zero from %llu to %llu(%zd)", > @@ -655,8 +657,11 @@ static vm_fault_t exfat_page_mkwrite(struct vm_fault *vmf) > struct file *file = vma->vm_file; > struct inode *inode = file_inode(file); > struct exfat_inode_info *ei = EXFAT_I(inode); > + struct kiocb iocb; > loff_t start, end; > > + init_sync_kiocb(&iocb, file); > + > if (!inode_trylock(inode)) > return VM_FAULT_RETRY; > > @@ -665,7 +670,7 @@ static vm_fault_t exfat_page_mkwrite(struct vm_fault *vmf) > start + vma->vm_end - vma->vm_start); > > if (ei->valid_size < end) { > - err = exfat_extend_valid_size(file, end); > + err = exfat_extend_valid_size(&iocb, end); > if (err < 0) { > inode_unlock(inode); > return vmf_fs_error(err); This is unnecessary work. The only ->write_begin/write_end that we'll see here is exfat_write_begin() / exfat_write_end() which don't actually need iocb (or file). Traditionally we pass NULL in these situations, but the exfat people probably weren't aware of this convention. exfat_extend_valid_size() only uses the file it's passed to get the inode, and both callers already have the inode. So I'd change exfat_extend_valid_size() to take an inode instead of a file as its first argument, then you can skip the creation of an iocb in exfat_page_mkwrite().