From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01EDC2D877D; Wed, 17 Dec 2025 06:11:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.137.202.133 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765951901; cv=none; b=nGzYJBRGJv23+Hxq2we6gSVT97WY/OPRRBNjnCwv7cq993C9XGm1eVs3iOW9WTAfts5uKh23fMk7AeebM2PteJ7NwpoCb+AbKWrlzarTkFUB47by2vAb5bvKP+834Iwj2PmgfVtmZSFSs7GWuPqAVJXLh2QI8srmwKr5dRuYQEg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765951901; c=relaxed/simple; bh=2UUIL00cEIhctAYzWpkGNzGsbctztzgSDtrKavzRh9w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FAgyAs47VqZMWteIW/j5xipdPZoc7A/VRnMuDHEkP512FPO88jJPvfDga2WzBP4NKG3oanVrBuCMJg70BXiH2qAYDK8MhEDdjAEPQll9Kj99ztVCS09296U5NQ2WInOy47V8Z+AG9WJCAldATfnMq91cTiSoXHz1Z+iqUpEsEH8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=lst.de; spf=none smtp.mailfrom=bombadil.srs.infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=WgxTtGKW; arc=none smtp.client-ip=198.137.202.133 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=lst.de Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bombadil.srs.infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="WgxTtGKW" 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=+o0qLqQER39CnmsOapw9yHISnePJBT3f0AodJlipytU=; b=WgxTtGKW8y1Gl2E308TDkEp4HP kLAzgGIDR4KyQkYl197Szhkg8M5p8MAa6OvhTX7IBzJ2ZAYGGmxFVmZWSrbQzLcngKuYO79cdLg+d oRI1b1LbBIqdcyzc2OkTMiC9kZD/upjV6j9Uerl9aX+V4vaZtzrsh5lY9gzjXrv76c+I39NKdndLe DGMvAHp1HY/M9oXifq4arBtiGGrDKDUO3vqRR4EKs6t2I3XUeqtzjZYOsliPfOyaebydHH0ohBUNY UCJC/BUD6SWtSQOVeC0tKn92dqh4PK1J4wUvXxfTf/93wJtcgqwWdUOPlC/s3Vc+LVEKJJCdC3G6L FQD95oDQ==; Received: from 2a02-8389-2341-5b80-d601-7564-c2e0-491c.cable.dynamic.v6.surfer.at ([2a02:8389:2341:5b80:d601:7564:c2e0:491c] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux)) id 1vVkl7-00000006E2o-3Blj; Wed, 17 Dec 2025 06:11:38 +0000 From: Christoph Hellwig To: Christian Brauner Cc: Al Viro , David Sterba , Jan Kara , Mike Marshall , Martin Brandenburg , Carlos Maiolino , Stefan Roesch , Jeff Layton , linux-kernel@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, gfs2@lists.linux.dev, io-uring@vger.kernel.org, devel@lists.orangefs.org, linux-unionfs@vger.kernel.org, linux-mtd@lists.infradead.org, linux-xfs@vger.kernel.org, linux-nfs@vger.kernel.org Subject: [PATCH 09/10] xfs: implement ->sync_lazytime Date: Wed, 17 Dec 2025 07:09:42 +0100 Message-ID: <20251217061015.923954-10-hch@lst.de> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251217061015.923954-1-hch@lst.de> References: <20251217061015.923954-1-hch@lst.de> Precedence: bulk X-Mailing-List: io-uring@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html Switch to the new explicit lazytime syncing method instead of trying to second guess what could be a lazytime update in ->dirty_inode. Signed-off-by: Christoph Hellwig Reviewed-by: Jeff Layton --- fs/xfs/xfs_iops.c | 20 ++++++++++++++++++++ fs/xfs/xfs_super.c | 29 ----------------------------- 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 626a541b247b..e12c6e6d313e 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -1227,6 +1227,22 @@ xfs_vn_update_time( return xfs_trans_commit(tp); } +static void +xfs_vn_sync_lazytime( + struct inode *inode) +{ + struct xfs_inode *ip = XFS_I(inode); + struct xfs_mount *mp = ip->i_mount; + struct xfs_trans *tp; + + if (xfs_trans_alloc(mp, &M_RES(mp)->tr_fsyncts, 0, 0, 0, &tp)) + return; + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); + xfs_trans_log_inode(tp, ip, XFS_ILOG_TIMESTAMP); + xfs_trans_commit(tp); +} + STATIC int xfs_vn_fiemap( struct inode *inode, @@ -1270,6 +1286,7 @@ static const struct inode_operations xfs_inode_operations = { .listxattr = xfs_vn_listxattr, .fiemap = xfs_vn_fiemap, .update_time = xfs_vn_update_time, + .sync_lazytime = xfs_vn_sync_lazytime, .fileattr_get = xfs_fileattr_get, .fileattr_set = xfs_fileattr_set, }; @@ -1296,6 +1313,7 @@ static const struct inode_operations xfs_dir_inode_operations = { .setattr = xfs_vn_setattr, .listxattr = xfs_vn_listxattr, .update_time = xfs_vn_update_time, + .sync_lazytime = xfs_vn_sync_lazytime, .tmpfile = xfs_vn_tmpfile, .fileattr_get = xfs_fileattr_get, .fileattr_set = xfs_fileattr_set, @@ -1323,6 +1341,7 @@ static const struct inode_operations xfs_dir_ci_inode_operations = { .setattr = xfs_vn_setattr, .listxattr = xfs_vn_listxattr, .update_time = xfs_vn_update_time, + .sync_lazytime = xfs_vn_sync_lazytime, .tmpfile = xfs_vn_tmpfile, .fileattr_get = xfs_fileattr_get, .fileattr_set = xfs_fileattr_set, @@ -1334,6 +1353,7 @@ static const struct inode_operations xfs_symlink_inode_operations = { .setattr = xfs_vn_setattr, .listxattr = xfs_vn_listxattr, .update_time = xfs_vn_update_time, + .sync_lazytime = xfs_vn_sync_lazytime, .fileattr_get = xfs_fileattr_get, .fileattr_set = xfs_fileattr_set, }; diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index bc71aa9dcee8..094f257eff15 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -712,34 +712,6 @@ xfs_fs_destroy_inode( xfs_inode_mark_reclaimable(ip); } -static void -xfs_fs_dirty_inode( - struct inode *inode, - int flags) -{ - struct xfs_inode *ip = XFS_I(inode); - struct xfs_mount *mp = ip->i_mount; - struct xfs_trans *tp; - - if (!(inode->i_sb->s_flags & SB_LAZYTIME)) - return; - - /* - * Only do the timestamp update if the inode is dirty (I_DIRTY_SYNC) - * and has dirty timestamp (I_DIRTY_TIME). I_DIRTY_TIME can be passed - * in flags possibly together with I_DIRTY_SYNC. - */ - if ((flags & ~I_DIRTY_TIME) != I_DIRTY_SYNC || !(flags & I_DIRTY_TIME)) - return; - - if (xfs_trans_alloc(mp, &M_RES(mp)->tr_fsyncts, 0, 0, 0, &tp)) - return; - xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); - xfs_trans_log_inode(tp, ip, XFS_ILOG_TIMESTAMP); - xfs_trans_commit(tp); -} - /* * Slab object creation initialisation for the XFS inode. * This covers only the idempotent fields in the XFS inode; @@ -1304,7 +1276,6 @@ xfs_fs_show_stats( static const struct super_operations xfs_super_operations = { .alloc_inode = xfs_fs_alloc_inode, .destroy_inode = xfs_fs_destroy_inode, - .dirty_inode = xfs_fs_dirty_inode, .drop_inode = xfs_fs_drop_inode, .evict_inode = xfs_fs_evict_inode, .put_super = xfs_fs_put_super, -- 2.47.3