From patchwork Tue Mar 7 14:31:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 13163760 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 aib29ajc249.phx1.oracleemaildelivery.com (aib29ajc249.phx1.oracleemaildelivery.com [192.29.103.249]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id ED48DC6FD1F for ; Tue, 7 Mar 2023 14:32:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=oss-phx-1109; d=oss.oracle.com; h=Date:To:From:Subject:Message-Id:MIME-Version:Sender; bh=wDOaO/+eCqD3XsJSpTfChSbUkr4AQzRh6V2AFX2tgBo=; b=b/1rEoFaV4r6KJEVCvRt4zWI/9oA9so4XOMDSDi2EWD460labBlEaDb4tGWVTItBz2ZlkdHgH8ct pb63eHRNCA+4mwz2Oua1MJEnRtajegJjJfedrgsi6dLVyQcLYVNiSXLOzZjEwRla+76vbUwkrUMO ez/G6l+w62DiNzCTZQDHzZDzj7KLVOVUxYVablzzGU+cNDzuAYnkrBk+ea2IFbdjSgT/3ftP2npy Zgl/B+0BS76md24E6k1AWfm5jEGKlHiN+38MK08OTxw2E/k/KxXz4xaJKL6lUoMvhyqYfFlwanpC nrqwEyc1FZjResl2+OalJoP8PHWoWt/pwEXbPg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=prod-phx-20191217; d=phx1.rp.oracleemaildelivery.com; h=Date:To:From:Subject:Message-Id:MIME-Version:Sender; bh=wDOaO/+eCqD3XsJSpTfChSbUkr4AQzRh6V2AFX2tgBo=; b=I1m6m10S5HUFWBZ8hs2WdETvSGTZtbhkPsNPaUvhM4qiRdQN1iSQrt92riF1vtwcl9iMQb6wYEA/ yxz33YOW9aKb0Lf/iK0LFRI9N1DxLSyxaStrnPiO3PbE4qPKmcvbRRG4OC+abhy+kRHXrHILpBJv FsEyzJk3Idbfw8ksaol7KS06RWuIJdktjS+UTD64c1xqfMI0mHzOp3km6ugqA5c/31lji9Aqg2Vu 4JFlVrObZzegdNjkPPEYKgth9KDbBTq1gpIxxPUmnzIdk07RfUKblue18lhzwgROBPCpsdKUHPkg 7ESeHwHub3mSAeftaTSnbUt0lC+BJ8uesrDZ0w== Received: by omta-ad2-fd1-202-us-phoenix-1.omtaad2.vcndpphx.oraclevcn.com (Oracle Communications Messaging Server 8.1.0.1.20230214 64bit (built Feb 14 2023)) with ESMTPS id <0RR5006M2N1J8R50@omta-ad2-fd1-202-us-phoenix-1.omtaad2.vcndpphx.oraclevcn.com> for ocfs2-devel@archiver.kernel.org; Tue, 07 Mar 2023 14:32:07 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=e7+CDOA4124JBRCEvFKTPsUneLuiXf/X6sOT6LF5JYU=; b=3VLrWMLIKSJjYMH4ZGWGdhRkYI fyOCFd3v+NtSl8hn7DOZBGlkXjhNRGKJYK1KJUbmqVvGjBXHbQ4pWxEj1Xy+AasYVTEGNLDA0nS1E DApI3LDqQ4EeNdTFmdhqZH8EamjAPqPF1ANyX1+LcIG+ww+EPmqmM1n0eGfjt8ypjqTWKkQcFfZI3 29DLkn35ry7LUTKVec6PhJljXJBWoIfj05k/ZYOthsYc/5hOIyyu8WxT/F5yWqt8X/+Ba3Y6yPWgR d4dvdU+RHPFfWx5iVW+Me+OkDdg6zig4ymm/VKchIINJUHz6at9sFZkydHrpDJIf10pTV7LLzSWnH drG+kNQw==; To: Andrew Morton , Mark Fasheh , Joel Becker , Joseph Qi , Evgeniy Dushistov , "Matthew Wilcox (Oracle)" Date: Tue, 7 Mar 2023 15:31:23 +0100 Message-id: <20230307143125.27778-2-hch@lst.de> X-Mailer: git-send-email 2.39.1 In-reply-to: <20230307143125.27778-1-hch@lst.de> References: <20230307143125.27778-1-hch@lst.de> MIME-version: 1.0 X-Source-IP: 198.137.202.133 X-Proofpoint-Virus-Version: vendor=nai engine=6500 definitions=10642 signatures=596816 X-Proofpoint-Spam-Details: rule=tap_notspam policy=tap score=0 impostorscore=0 malwarescore=0 phishscore=0 adultscore=0 priorityscore=0 mlxlogscore=341 mlxscore=0 spamscore=0 lowpriorityscore=0 suspectscore=0 bulkscore=0 clxscore=262 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2303070130 Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, ocfs2-devel@oss.oracle.com Subject: [Ocfs2-devel] [PATCH 1/3] ufs: don't flush page immediately for DIRSYNC directories X-BeenThere: ocfs2-devel@oss.oracle.com X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Christoph Hellwig via Ocfs2-devel Reply-to: Christoph Hellwig Content-type: text/plain; charset="us-ascii" Content-transfer-encoding: 7bit Errors-to: ocfs2-devel-bounces@oss.oracle.com X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html X-ServerName: bombadil.infradead.org X-Proofpoint-SPF-Result: None X-Spam: Clean X-Proofpoint-GUID: bXHRKk61sUnsCEWUCZF119HymibfDp6l X-Proofpoint-ORIG-GUID: bXHRKk61sUnsCEWUCZF119HymibfDp6l Reporting-Meta: AAEVDElBLEcIvx6eg8v20E1sPv+UwWdUTFBg/mnLl8+kiDFa/JnHgSMIUoFYUb2P 3ez4oz+pRr0BmP0pWphgXgWF7PvgzIp2BagpcEnw0RV4EF1RAY9Vi4UWkWlcY+VA 7ZSK+WNN1t6tfWD7kwl/bIZnR0uERtJBK0PUB2LQ8SB09E88H1khFjWA3PAn2Ng5 6GR5GCwiuXccaQ8ZPq6JYdsS26Wi/yroeFMyZdN0cJncz4RX7WdQVwTnykWZP86P 1fTCqnYVVHX/68Uko+8XlV320832aqsqJ0jENjlBgqTqa3KJE6ePZ1x6C7i3J/b9 0R23u5KsirhMbmXDGNxAVuAjNo0Xnf+ALOL6QEzNTGTaQU8W4TSe6oYTOGHmzv8p 8OBl8yEgFya1HyJ4tZErSJRSTs9O6Anp1qBobvzX6X5Ei/iefE6bfNJk/wUF2ypt wwTA5Ut+PnKk1HDs76osdmRchenljcOjXRZ4R3YyedbjTjwfFxusW0xwbIixNZyg c8A/9pPjn5ilVIZ1qdZNXM8VrFx3+mG6k6RKrRML1cfZ We do not need to writeout modified directory blocks immediately when modifying them while the page is locked. It is enough to do the flush somewhat later which has the added benefit that inode times can be flushed as well. It also allows us to stop depending on write_one_page() function. Ported from an ext2 patch by Jan Kara. Signed-off-by: Christoph Hellwig --- fs/ufs/dir.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/fs/ufs/dir.c b/fs/ufs/dir.c index 391efaf1d52897..379d75796a5ce3 100644 --- a/fs/ufs/dir.c +++ b/fs/ufs/dir.c @@ -42,11 +42,10 @@ static inline int ufs_match(struct super_block *sb, int len, return !memcmp(name, de->d_name, len); } -static int ufs_commit_chunk(struct page *page, loff_t pos, unsigned len) +static void ufs_commit_chunk(struct page *page, loff_t pos, unsigned len) { struct address_space *mapping = page->mapping; struct inode *dir = mapping->host; - int err = 0; inode_inc_iversion(dir); block_write_end(NULL, mapping, pos, len, len, page, NULL); @@ -54,10 +53,16 @@ static int ufs_commit_chunk(struct page *page, loff_t pos, unsigned len) i_size_write(dir, pos+len); mark_inode_dirty(dir); } - if (IS_DIRSYNC(dir)) - err = write_one_page(page); - else - unlock_page(page); + unlock_page(page); +} + +static int ufs_handle_dirsync(struct inode *dir) +{ + int err; + + err = filemap_write_and_wait(dir->i_mapping); + if (!err) + err = sync_inode_metadata(dir, 1); return err; } @@ -99,11 +104,12 @@ void ufs_set_link(struct inode *dir, struct ufs_dir_entry *de, de->d_ino = cpu_to_fs32(dir->i_sb, inode->i_ino); ufs_set_de_type(dir->i_sb, de, inode->i_mode); - err = ufs_commit_chunk(page, pos, len); + ufs_commit_chunk(page, pos, len); ufs_put_page(page); if (update_times) dir->i_mtime = dir->i_ctime = current_time(dir); mark_inode_dirty(dir); + ufs_handle_dirsync(dir); } @@ -390,10 +396,11 @@ int ufs_add_link(struct dentry *dentry, struct inode *inode) de->d_ino = cpu_to_fs32(sb, inode->i_ino); ufs_set_de_type(sb, de, inode->i_mode); - err = ufs_commit_chunk(page, pos, rec_len); + ufs_commit_chunk(page, pos, rec_len); dir->i_mtime = dir->i_ctime = current_time(dir); mark_inode_dirty(dir); + err = ufs_handle_dirsync(dir); /* OFFSET_CACHE */ out_put: ufs_put_page(page); @@ -531,9 +538,10 @@ int ufs_delete_entry(struct inode *inode, struct ufs_dir_entry *dir, if (pde) pde->d_reclen = cpu_to_fs16(sb, to - from); dir->d_ino = 0; - err = ufs_commit_chunk(page, pos, to - from); + ufs_commit_chunk(page, pos, to - from); inode->i_ctime = inode->i_mtime = current_time(inode); mark_inode_dirty(inode); + err = ufs_handle_dirsync(inode); out: ufs_put_page(page); UFSD("EXIT\n"); @@ -579,7 +587,8 @@ int ufs_make_empty(struct inode * inode, struct inode *dir) strcpy (de->d_name, ".."); kunmap(page); - err = ufs_commit_chunk(page, 0, chunk_size); + ufs_commit_chunk(page, 0, chunk_size); + err = ufs_handle_dirsync(inode); fail: put_page(page); return err; From patchwork Tue Mar 7 14:31:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 13163759 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 aib29ajc246.phx1.oracleemaildelivery.com (aib29ajc246.phx1.oracleemaildelivery.com [192.29.103.246]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 17078C678D4 for ; Tue, 7 Mar 2023 14:31:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=oss-phx-1109; d=oss.oracle.com; h=Date:To:From:Subject:Message-Id:MIME-Version:Sender; bh=YcebhLoim+Fy6UoGTzHAq5EVgTZLWtFHRZ0y6Wj0+HQ=; b=BW4Yxzhbn19CKdFaHsmW8KznsLrgnMauT3Q8p0dqXKGvkWH5crFrlKn3uM10dMuesx8PYZS8KORD 4sB0hzme01d38fDZz6i1lMke5MGJoCC8ONXKx31kVJpMvPPygJ+svCX9TkPWOcIHdxibMDth7c10 TJWT+tG96Ds9MkhPQjRs778vFXdw1rwo2zmPfcP/+cFDrh+UCwTntZjh6H+UFgjLr3PtjrY2kHPS S8tfIft2vPxGmPF5QC9RxPcJ1sDug99JYr1JVDPjEwgzmngJiHdcomm2mla/pZGTc9ZDHqRfSD3D Tfz0RYbN+rgaf4Lc0sJsKocVSQvLuds3LT4Aaw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=prod-phx-20191217; d=phx1.rp.oracleemaildelivery.com; h=Date:To:From:Subject:Message-Id:MIME-Version:Sender; bh=YcebhLoim+Fy6UoGTzHAq5EVgTZLWtFHRZ0y6Wj0+HQ=; b=TWr5FablNS0P4DD1HxTrvmeLGfo+EfT58TgN3jV/j0HHJPGcg6FCbIpiG0rh59jHypfXHssO5L+g ZMwgzoVqnYwjZVcsX8gfKxz0flNs2KTybuS8Bf/YOKSo9SqPrtGtBkai93ksMVS+Wq8+QdSJyS0v gh2HgFETPA8iqGpVVUHwTq1x8CKx5LBaC13T2vPcIOOgME9JtkzDxWmf8ZKApejOL7P6LE9ZrGEk zxnFhXzwIKFZYjsKtfcANchRfG2EchgSFj+u86bEiaRqhRewqR7m0WJMAY0OPR4z+whV9Nhfwo70 jqgpLcpmdzsR93xoW/zAIOqeOb6RcF6D12FBaQ== Received: by omta-ad1-fd3-101-us-phoenix-1.omtaad1.vcndpphx.oraclevcn.com (Oracle Communications Messaging Server 8.1.0.1.20230214 64bit (built Feb 14 2023)) with ESMTPS id <0RR500H12N1AD000@omta-ad1-fd3-101-us-phoenix-1.omtaad1.vcndpphx.oraclevcn.com> for ocfs2-devel@archiver.kernel.org; Tue, 07 Mar 2023 14:31:58 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=UGWQTbH2jOdjm5UmRPO29E2KQdhHJ0tZTkacHHl1ybM=; b=hHmIfAdmONUXB7VfpMgzlTeP/f vKEmQRnyu+zF3eg7XfFFFAa+9LXiDmWUlg9nR7yFg9d6CbyAN8m8ldDcuAw91co1/eWjkcRLm2Ruf bxto6xenQm3yG4Dq4enOdlzb18L/K0ZmgpJM9UVFIZmgTy5soXMGsbnUkvR9zHB43OSR708JVpT0W mncs7Q0O7fGPxVX1oOdZxhq8vv1tFEXoX1edvvxKmydDxR2bvyXYsyU43D+lRH2u+z0pgTHzj3Cox Lxb8Ox1vcK/GcArTVFy8OQj1inKpNwkqKmOYNLepslNx/zZtXX7NGacblLoLxnJBAzAaUA3hsqViC NPAlh4zQ==; To: Andrew Morton , Mark Fasheh , Joel Becker , Joseph Qi , Evgeniy Dushistov , "Matthew Wilcox (Oracle)" Date: Tue, 7 Mar 2023 15:31:24 +0100 Message-id: <20230307143125.27778-3-hch@lst.de> X-Mailer: git-send-email 2.39.1 In-reply-to: <20230307143125.27778-1-hch@lst.de> References: <20230307143125.27778-1-hch@lst.de> MIME-version: 1.0 X-Source-IP: 198.137.202.133 X-Proofpoint-Virus-Version: vendor=nai engine=6500 definitions=10642 signatures=596816 X-Proofpoint-Spam-Details: rule=tap_notspam policy=tap score=0 lowpriorityscore=0 adultscore=0 mlxlogscore=679 malwarescore=0 priorityscore=0 clxscore=176 mlxscore=0 impostorscore=0 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2303070130 Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Jan Kara , ocfs2-devel@oss.oracle.com Subject: [Ocfs2-devel] [PATCH 2/3] ocfs2: don't use write_one_page in ocfs2_duplicate_clusters_by_page X-BeenThere: ocfs2-devel@oss.oracle.com X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Christoph Hellwig via Ocfs2-devel Reply-to: Christoph Hellwig Content-type: text/plain; charset="us-ascii" Content-transfer-encoding: 7bit Errors-to: ocfs2-devel-bounces@oss.oracle.com X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html X-ServerName: bombadil.infradead.org X-Proofpoint-SPF-Result: None X-Spam: Clean X-Proofpoint-GUID: DLPvO9ZkGZe2GvH7pJ-9QfJ8JBYzK_Jd X-Proofpoint-ORIG-GUID: DLPvO9ZkGZe2GvH7pJ-9QfJ8JBYzK_Jd Reporting-Meta: AAF62uKuZfFzfsfLHrq+ZOxkyIVaZtaqnTZYgXdjVWVNWzonDCXA8Y+gSFPxa4P+ gej2MiwqCmD5EuQyGP52Sjt5dU7Yri4Vw4CyeHwK2tUOgKVx91SvFqhrPzYx/ml5 JE85G3JQc1E/I7i6yuqyZnTuUyOBcSHS3u19zjdbia8X6933o6uXU0xM/ETN5e8m qNQbtmpDldOXYxp6C/ECkIK66v8DZxTIqzfZilxhu9dEZzy+5qfhKnMjsxervfQ2 mqaXUyv7oAgj/EG904JqJ1/WWLWH2KBnOb2ie9zZ6wpOPRAuxpwpcN+vuHHXQd5j DLAnuHmdZF6QkCL/xpOgt3S3u2u88hDHy9xn/bVF1ANyXzGnKAJ2D5nq8hQQgC18 OHGTNLqRWidGEWBv7NvWTFd3BBvamu3aSVfcmiFSotsvQ3dTEeHbg7zNjbAwcrHR HU6YipfPNgOH8IL7wMKitQsl5jYlQoOkxJO5ifFOPIiQaB2Yrk24CWM+QJyaGw6y tScun+W06g9k0oXtVPVLXbGZuROUlSfId0jW+UeQqORD Use filemap_write_and_wait_range to write back the range of the dirty page instead of write_one_page in preparation of removing write_one_page and eventually ->writepage. Signed-off-by: Christoph Hellwig Reviewed-by: Jan Kara Reviewed-by: Joseph Qi --- fs/ocfs2/refcounttree.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c index 5a656dc683f108..564ab48d03effa 100644 --- a/fs/ocfs2/refcounttree.c +++ b/fs/ocfs2/refcounttree.c @@ -2952,10 +2952,11 @@ int ocfs2_duplicate_clusters_by_page(handle_t *handle, */ if (PAGE_SIZE <= OCFS2_SB(sb)->s_clustersize) { if (PageDirty(page)) { - /* - * write_on_page will unlock the page on return - */ - ret = write_one_page(page); + unlock_page(page); + put_page(page); + + ret = filemap_write_and_wait_range(mapping, + offset, map_end - 1); goto retry; } } From patchwork Tue Mar 7 14:31:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 13163761 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 aib29ajc249.phx1.oracleemaildelivery.com (aib29ajc249.phx1.oracleemaildelivery.com [192.29.103.249]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C455AC6FD1B for ; Tue, 7 Mar 2023 14:32:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=oss-phx-1109; d=oss.oracle.com; h=Date:To:From:Subject:Message-Id:MIME-Version:Sender; bh=2s5N974RdN9/bgpkkFfvcfwfKYfHQwuEfV103A4xrpk=; b=Fj7b4xk7+f82SJcBnoXb0VmJUZwKlXHY6S9HTw8XCvdaCG9WEzJvW3Ftvud4moKz+oyYOZBoqqRX Ts+BSCRQXAGkAav6FVvbEtHACBLmiuZGlopFU+cuNXj4ViaZC4qieJeKRHKKM+BTtkuzthyOc/Gw o+FudaUGI+6/misYX9xVn1mY3l3DI6OWvqGEYCOn3L4zocpvLOK+Lf33vvfueiUmcmvMLXnxjGgt y68PraNNMGg3a8/C5rCZ7aZeAqmAx9UV+f3//wmsZ4K5Tyq3+RlUxTEaiMvR05MZJXtWLp13UdgI 7/0aZclDo3UiTyfnEJ9666bs7STnBJa7SBRbqQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=prod-phx-20191217; d=phx1.rp.oracleemaildelivery.com; h=Date:To:From:Subject:Message-Id:MIME-Version:Sender; bh=2s5N974RdN9/bgpkkFfvcfwfKYfHQwuEfV103A4xrpk=; b=Ex/ZtjnUPw9XE9lPVmOA2S3W/2vfQcFj6EeX52XBI+C/9xdGW13cTdtQ2/+E2KKLAeaFAuSynr5C EVDRQBxGWDfRWE1RJCnQlHXn1aKXDyWOmw7zchgn6QxDcj4lKWx7GBQDTOW9FadWWqor2PybPl40 a0bC7kDF40THZkT1aG6mSpo7gB6jnYk5OgLgPudjvi1MHfL20fvngww7X3cGhew24XYMYpe2ydo1 ZlOPeboM3oq4/QECMc3veuy5oxQz1lp66yW0ZrBlto+9jhdVmeawDgL8UX4XeDzF7N83kmrToM+j xlgnC1sZMMTFmv2vruSUCqCohJzFf0xJPrLIfA== Received: by omta-ad2-fd1-202-us-phoenix-1.omtaad2.vcndpphx.oraclevcn.com (Oracle Communications Messaging Server 8.1.0.1.20230214 64bit (built Feb 14 2023)) with ESMTPS id <0RR5006MXN1N8R50@omta-ad2-fd1-202-us-phoenix-1.omtaad2.vcndpphx.oraclevcn.com> for ocfs2-devel@archiver.kernel.org; Tue, 07 Mar 2023 14:32:11 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=/RNkTDKS2WBrD6C+qsVR+GmNvP6pOcUw93T+SGmGsfM=; b=iZ5jSjP0MVkSxWbgvMmGMNyDiY nEZGs1wKSUggfMNQWTqbbozLmzTRzCQTT/191nJlNXZ9tcouXCWkhiQzifpvSxsR4ihrUG8n653l7 ewfOkrFqodzD7GoOEn94bCbqxdckXBjWW5ru5M1f3ET5zdGtF6WLShkU0BKJrQGRCRF52RoHzYI/A rEJtMXGAnpHjdKyRVkKYP0N8W1OF6Vi6sKePoaJPvLFHcQRQwXIM+Luh1sLAE5vvaPEowETfjuBkK ecfedBlN773L+CKkxSy+/21q6SwKznlMSnzWDciWjR5G96fRQDiFR3xA+lQhUCyNpaDfsoxmut62p brGMjfkg==; To: Andrew Morton , Mark Fasheh , Joel Becker , Joseph Qi , Evgeniy Dushistov , "Matthew Wilcox (Oracle)" Date: Tue, 7 Mar 2023 15:31:25 +0100 Message-id: <20230307143125.27778-4-hch@lst.de> X-Mailer: git-send-email 2.39.1 In-reply-to: <20230307143125.27778-1-hch@lst.de> References: <20230307143125.27778-1-hch@lst.de> MIME-version: 1.0 X-Source-IP: 198.137.202.133 X-Proofpoint-Virus-Version: vendor=nai engine=6500 definitions=10642 signatures=596816 X-Proofpoint-Spam-Details: rule=tap_notspam policy=tap score=0 lowpriorityscore=0 adultscore=0 mlxlogscore=999 malwarescore=0 priorityscore=0 clxscore=176 mlxscore=0 impostorscore=0 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2303070130 Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Dave Kleikamp , ocfs2-devel@oss.oracle.com Subject: [Ocfs2-devel] [PATCH 3/3] mm, jfs: move write_one_page/folio_write_one to jfs X-BeenThere: ocfs2-devel@oss.oracle.com X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Christoph Hellwig via Ocfs2-devel Reply-to: Christoph Hellwig Content-type: text/plain; charset="us-ascii" Content-transfer-encoding: 7bit Errors-to: ocfs2-devel-bounces@oss.oracle.com X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html X-ServerName: bombadil.infradead.org X-Proofpoint-SPF-Result: None X-Spam: Clean X-Proofpoint-GUID: ot3-rnT9xUb7O_oTyk8f2IC0isPXyca8 X-Proofpoint-ORIG-GUID: ot3-rnT9xUb7O_oTyk8f2IC0isPXyca8 Reporting-Meta: AAEOZWbl9hdtoHiKNnOV/w5r4oyy2CAkNCT6nc78TOVLkIP3A33wQtasDJ9rMefX iOubKy4EiKJLriORCzfVZkG1qsT54+w1ud0dMw+2dKS/K2HxFHq+gOLYTAjGenyg tFXGUlD0ZzbWpva096qzsebUklw9JklDgoeF5/PqU4b91dqFMXC4nx1Dg1BrhMOR iPltgNG7MA4b1SlgUZm7Ui12qCUmxCAM/12D0hUzOzADrl9PHZUYCNApCi9k1AsW k6Ywp2zlL+o/wpp6KMg9QQEnzclMdVvC2RxCOZ5aX/lYrT5KkYIwDBGegLqPhPvH 0a0U8EGdlxz14JbIz2qSeN9gWsTwNCQb+7EKJW3Ekk1U0gn52jlGdJb/JQQHL95/ x3xUss9Yn5RG4QN0h9hQxnvGlx66DeWYu5PmC82tAY2doIWUM/dTb//9kwFmXWSZ 8mKSk2R+jcScA4x0dnKIRw4Kjg916AwiR60gVM0ygWgkFKL7J8hPDlb79nvI0n5b n8ADMSPMKuqazyTquj6LvPHNUlmLAeiFTpLhhTRu0u/G The last remaining user of folio_write_one through the write_one_page wrapper is jfs, so move the functionality there and hard code the call to metapage_writepage. Note that the use of the pagecache by the JFS 'metapage' buffer cache is a bit odd, and we could probably do without VM-level dirty tracking at all, but that's a change for another time. Signed-off-by: Christoph Hellwig Acked-by: Dave Kleikamp --- fs/jfs/jfs_metapage.c | 39 ++++++++++++++++++++++++++++++++++----- include/linux/pagemap.h | 6 ------ mm/page-writeback.c | 40 ---------------------------------------- 3 files changed, 34 insertions(+), 51 deletions(-) diff --git a/fs/jfs/jfs_metapage.c b/fs/jfs/jfs_metapage.c index 2e8461ce74de69..961569c1115901 100644 --- a/fs/jfs/jfs_metapage.c +++ b/fs/jfs/jfs_metapage.c @@ -691,6 +691,35 @@ void grab_metapage(struct metapage * mp) unlock_page(mp->page); } +static int metapage_write_one(struct page *page) +{ + struct folio *folio = page_folio(page); + struct address_space *mapping = folio->mapping; + struct writeback_control wbc = { + .sync_mode = WB_SYNC_ALL, + .nr_to_write = folio_nr_pages(folio), + }; + int ret = 0; + + BUG_ON(!folio_test_locked(folio)); + + folio_wait_writeback(folio); + + if (folio_clear_dirty_for_io(folio)) { + folio_get(folio); + ret = metapage_writepage(page, &wbc); + if (ret == 0) + folio_wait_writeback(folio); + folio_put(folio); + } else { + folio_unlock(folio); + } + + if (!ret) + ret = filemap_check_errors(mapping); + return ret; +} + void force_metapage(struct metapage *mp) { struct page *page = mp->page; @@ -700,8 +729,8 @@ void force_metapage(struct metapage *mp) get_page(page); lock_page(page); set_page_dirty(page); - if (write_one_page(page)) - jfs_error(mp->sb, "write_one_page() failed\n"); + if (metapage_write_one(page)) + jfs_error(mp->sb, "metapage_write_one() failed\n"); clear_bit(META_forcewrite, &mp->flag); put_page(page); } @@ -746,9 +775,9 @@ void release_metapage(struct metapage * mp) set_page_dirty(page); if (test_bit(META_sync, &mp->flag)) { clear_bit(META_sync, &mp->flag); - if (write_one_page(page)) - jfs_error(mp->sb, "write_one_page() failed\n"); - lock_page(page); /* write_one_page unlocks the page */ + if (metapage_write_one(page)) + jfs_error(mp->sb, "metapage_write_one() failed\n"); + lock_page(page); } } else if (mp->lsn) /* discard_metapage doesn't remove it */ remove_from_logsync(mp); diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 0acb8e1fb7afdc..853184a46411f4 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -1066,12 +1066,6 @@ static inline void folio_cancel_dirty(struct folio *folio) bool folio_clear_dirty_for_io(struct folio *folio); bool clear_page_dirty_for_io(struct page *page); void folio_invalidate(struct folio *folio, size_t offset, size_t length); -int __must_check folio_write_one(struct folio *folio); -static inline int __must_check write_one_page(struct page *page) -{ - return folio_write_one(page_folio(page)); -} - int __set_page_dirty_nobuffers(struct page *page); bool noop_dirty_folio(struct address_space *mapping, struct folio *folio); diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 516b1aa247e83f..db794399900734 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -2583,46 +2583,6 @@ int do_writepages(struct address_space *mapping, struct writeback_control *wbc) return ret; } -/** - * folio_write_one - write out a single folio and wait on I/O. - * @folio: The folio to write. - * - * The folio must be locked by the caller and will be unlocked upon return. - * - * Note that the mapping's AS_EIO/AS_ENOSPC flags will be cleared when this - * function returns. - * - * Return: %0 on success, negative error code otherwise - */ -int folio_write_one(struct folio *folio) -{ - struct address_space *mapping = folio->mapping; - int ret = 0; - struct writeback_control wbc = { - .sync_mode = WB_SYNC_ALL, - .nr_to_write = folio_nr_pages(folio), - }; - - BUG_ON(!folio_test_locked(folio)); - - folio_wait_writeback(folio); - - if (folio_clear_dirty_for_io(folio)) { - folio_get(folio); - ret = mapping->a_ops->writepage(&folio->page, &wbc); - if (ret == 0) - folio_wait_writeback(folio); - folio_put(folio); - } else { - folio_unlock(folio); - } - - if (!ret) - ret = filemap_check_errors(mapping); - return ret; -} -EXPORT_SYMBOL(folio_write_one); - /* * For address_spaces which do not use buffers nor write back. */