From patchwork Mon Jan 16 08:55:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 13102764 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 aib29ajc252.phx1.oracleemaildelivery.com (aib29ajc252.phx1.oracleemaildelivery.com [192.29.103.252]) (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 AD0E7C67871 for ; Mon, 16 Jan 2023 08:55:57 +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=xyzvg/rCCly/SrrfRleNW2jwCQ0kCf7XT3oFjPPb4Ao=; b=cwxFkXDOKt8ADm1rCicWhaKJXyUg5tFr3FnQ0UFUva0BvAzavN767OXqiW2d+DkfgrDuqBGjBfyp QAU9lLCyzQV5P/X/1KMq2lxopTEgjZdgDyh6NAxRBKGhwtoXZ+7XdHOlGM2kwoFCWaSlG1jjuBd2 3jGASc6aGjD6qzc+jlplLHHChrQC0KHet21ePwoKrip3VslDfWM+f/bjnVCfesE9qDJR7cjDjpBh FSJ5xV7MSxVVlsMfsLshzg95yVwjuHmCQJ1DYv8zDPWJHeg+mRi7v4VhoczwNylD8LRk4H9W9R5H 9/nn4MNPCOq9xN8WTyE1UkA1rPTpDhwYkbiZ1g== 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=xyzvg/rCCly/SrrfRleNW2jwCQ0kCf7XT3oFjPPb4Ao=; b=Q33PluJdnBMi76zHDe9ECId/67aELmSWF3sVpJqzK81A3UUwZyDeVOfMkN2KDeG6/mZpZv65Ay06 1MNC11I4RhJiBqxUCbgl3gqHXoZmf8q3dKhnL1MJDV7/uNwVstQIv/Mn6Kwwe57AmE1x8Qov9+/3 ORck4ke8vMTQ9dNZw0RaAZPpO8tYepxWTZIB7iAKVD2bdGbCJZDOZNBVB0dm3Ah4Dp1KFERmoq9b nPOpA5pzS7l40umz8PvSmZqyZBV2qZqXfHW4geX+vLR5nromU3c4l6nzV0Y2vlNhl9exYHeIVcTb uBhKklFCBoZhjlGJwkMeeMt72OxnqZgYi1WBJw== Received: by omta-ad3-fd1-301-us-phoenix-1.omtaad3.vcndpphx.oraclevcn.com (Oracle Communications Messaging Server 8.1.0.1.20221212 64bit (built Dec 12 2022)) with ESMTPS id <0ROK00IRDM59SPC0@omta-ad3-fd1-301-us-phoenix-1.omtaad3.vcndpphx.oraclevcn.com> for ocfs2-devel@archiver.kernel.org; Mon, 16 Jan 2023 08:55:57 +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=v3PglRWzIOokZtWskK857KErIsUBx1dUWoEIj+rmors=; b=DixsK5MM2bUui4MhH0EvJ72lp2 WhWrahLLw2Q/qCkiyikiq6XfFLKWN9P3q0gTvzEOIuokGykPQDu36/ApNtX+68TdqIpsiIvwbKmBK WChJb99QuBiIiAmdjFhPdecye2p2/hbTlow+e87ry4NaVYuv45yJKbm1BSHtCEMeY9IzsEzuyhHsI cRF5YIYL5sx5LSKyoLnapfmAikJcKAOPzh5nCv/DESlQiHoqGnAZbDOD/SpNLlksyaLknUB1nwSFN tFu76c7m97LBY5Ji5xIZkKBmr+3mJx0/EGuTioAoPwY/iSj9JSHSAP1zp2XtLL4UKxG2kuc2qdJzB MyLorMnw==; To: Andrew Morton , Mark Fasheh , Joel Becker , Joseph Qi , Evgeniy Dushistov , "Matthew Wilcox (Oracle)" Date: Mon, 16 Jan 2023 09:55:22 +0100 Message-id: <20230116085523.2343176-6-hch@lst.de> X-Mailer: git-send-email 2.39.0 In-reply-to: <20230116085523.2343176-1-hch@lst.de> References: <20230116085523.2343176-1-hch@lst.de> MIME-version: 1.0 X-Source-IP: 198.137.202.133 X-Proofpoint-Virus-Version: vendor=nai engine=6500 definitions=10591 signatures=596816 X-Proofpoint-Spam-Details: rule=tap_notspam policy=tap score=0 clxscore=259 lowpriorityscore=0 spamscore=0 suspectscore=0 mlxlogscore=417 impostorscore=0 mlxscore=0 malwarescore=0 bulkscore=0 adultscore=0 phishscore=0 priorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2301160065 Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, ocfs2-devel@oss.oracle.com Subject: [Ocfs2-devel] [PATCH 5/6] 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: uCl-_kK1KY1O8ms07xg03W8qPVnoUrxw X-Proofpoint-ORIG-GUID: uCl-_kK1KY1O8ms07xg03W8qPVnoUrxw Reporting-Meta: AAHWEiHEKT2F17+vsDDjuC9ZMnCo+jqVBiBQl8w0K3rzd9smAPnyGRmzxYEHRv3H /CuT08iYl79DlH06lQEVYwMSvDFQwsZNk/WXgObKZNakoP5VVj0tfhxMMl2XPs7r vtMAY6s2QlqVhqqfsoiWxXQHoz99kut/XJ0CeDxi/XZ4ymZlh4Ojd32ny3OHLmIV Ld9fModujoq6JM+zltL4zd6lOJzlim8xR5Xh/1SDdkvyXNUj4BPMpmG7YPeIdwRs 7PdkBwEHI3NIvxm2ZjgK65SHPyKEkWwvcEwPtGeJQ0zkSFeNOrbxG8/TSyDKHLvb xuP6rgHU4r9lQWJr6oOMQVjaTkSzYSXVb9dr3YEZZD7K4rzDimyy2q3P1fU/oVLR /hEnqfQFEa8px9IvO5expaIvBO6h10r0kgtyY1JvQ82t1CToPYM7Y4GSbiBgf41q ReEdzigzmMAy5QW4UD/zyiTmpU9uUhR2DJZGLTubwI//ee6+u5l2ocDmG01bx01N zPul59p4e99ohHPptqaEpNPguKvUZQHw3MSOdEuUYFc= 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;