All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: linux-xfs@vger.kernel.org
Subject: [PATCH 2/2] xfs: internalise all remaining i_version support
Date: Tue, 19 Mar 2024 09:51:01 +1100	[thread overview]
Message-ID: <20240318225406.3378998-3-david@fromorbit.com> (raw)
In-Reply-To: <20240318225406.3378998-1-david@fromorbit.com>

From: Dave Chinner <dchinner@redhat.com>

Now that we don't support SB_I_VERSION, completely internalise the
remaining usage of inode->i_version. We use our own internal change
counter now, and leave inode->i_version completely unused. This
grows the xfs_inode by 8 bytes, but also allows us to use a normal
uint64_t rather than an expensive atomic64_t for the counter.

This clears the way for implementing different inode->i_version
functionality in the future whilst still maintaining the internal
XFS change counters as they currently stand.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
 fs/xfs/libxfs/xfs_inode_buf.c   | 7 ++-----
 fs/xfs/libxfs/xfs_trans_inode.c | 5 +----
 fs/xfs/xfs_icache.c             | 4 ----
 fs/xfs/xfs_inode.c              | 4 +---
 fs/xfs/xfs_inode.h              | 1 +
 fs/xfs/xfs_inode_item.c         | 4 +---
 fs/xfs/xfs_iops.c               | 1 -
 7 files changed, 6 insertions(+), 20 deletions(-)

diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
index 68989f4bf793..cadd8be83cc4 100644
--- a/fs/xfs/libxfs/xfs_inode_buf.c
+++ b/fs/xfs/libxfs/xfs_inode_buf.c
@@ -20,8 +20,6 @@
 #include "xfs_dir2.h"
 #include "xfs_health.h"
 
-#include <linux/iversion.h>
-
 /*
  * If we are doing readahead on an inode buffer, we might be in log recovery
  * reading an inode allocation buffer that hasn't yet been replayed, and hence
@@ -244,8 +242,7 @@ xfs_inode_from_disk(
 		xfs_iflags_set(ip, XFS_IPRESERVE_DM_FIELDS);
 
 	if (xfs_has_v3inodes(ip->i_mount)) {
-		inode_set_iversion_queried(inode,
-					   be64_to_cpu(from->di_changecount));
+		ip->i_changecount = be64_to_cpu(from->di_changecount);
 		ip->i_crtime = xfs_inode_from_disk_ts(from, from->di_crtime);
 		ip->i_diflags2 = be64_to_cpu(from->di_flags2);
 		ip->i_cowextsize = be32_to_cpu(from->di_cowextsize);
@@ -339,7 +336,7 @@ xfs_inode_to_disk(
 
 	if (xfs_has_v3inodes(ip->i_mount)) {
 		to->di_version = 3;
-		to->di_changecount = cpu_to_be64(inode_peek_iversion(inode));
+		to->di_changecount = cpu_to_be64(ip->i_changecount);
 		to->di_crtime = xfs_inode_to_disk_ts(ip, ip->i_crtime);
 		to->di_flags2 = cpu_to_be64(ip->i_diflags2);
 		to->di_cowextsize = cpu_to_be32(ip->i_cowextsize);
diff --git a/fs/xfs/libxfs/xfs_trans_inode.c b/fs/xfs/libxfs/xfs_trans_inode.c
index b82f9c7ff2d5..f9196eff6bab 100644
--- a/fs/xfs/libxfs/xfs_trans_inode.c
+++ b/fs/xfs/libxfs/xfs_trans_inode.c
@@ -15,8 +15,6 @@
 #include "xfs_trans_priv.h"
 #include "xfs_inode_item.h"
 
-#include <linux/iversion.h>
-
 /*
  * Add a locked inode to the transaction.
  *
@@ -87,7 +85,6 @@ xfs_trans_log_inode(
 	uint			flags)
 {
 	struct xfs_inode_log_item *iip = ip->i_itemp;
-	struct inode		*inode = VFS_I(ip);
 
 	ASSERT(iip);
 	xfs_assert_ilocked(ip, XFS_ILOCK_EXCL);
@@ -101,7 +98,7 @@ xfs_trans_log_inode(
 	 */
 	if (!test_and_set_bit(XFS_LI_DIRTY, &iip->ili_item.li_flags) &&
 	    xfs_has_crc(ip->i_mount)) {
-		atomic64_inc(&inode->i_version);
+		ip->i_changecount++;
 		flags |= XFS_ILOG_IVERSION;
 	}
 
diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
index 74f1812b03cb..6c87b90754c4 100644
--- a/fs/xfs/xfs_icache.c
+++ b/fs/xfs/xfs_icache.c
@@ -26,8 +26,6 @@
 #include "xfs_log_priv.h"
 #include "xfs_health.h"
 
-#include <linux/iversion.h>
-
 /* Radix tree tags for incore inode tree. */
 
 /* inode is to be reclaimed */
@@ -309,7 +307,6 @@ xfs_reinit_inode(
 	int			error;
 	uint32_t		nlink = inode->i_nlink;
 	uint32_t		generation = inode->i_generation;
-	uint64_t		version = inode_peek_iversion(inode);
 	umode_t			mode = inode->i_mode;
 	dev_t			dev = inode->i_rdev;
 	kuid_t			uid = inode->i_uid;
@@ -319,7 +316,6 @@ xfs_reinit_inode(
 
 	set_nlink(inode, nlink);
 	inode->i_generation = generation;
-	inode_set_iversion_queried(inode, version);
 	inode->i_mode = mode;
 	inode->i_rdev = dev;
 	inode->i_uid = uid;
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index e7a724270423..3ca8e905dbd4 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -3,8 +3,6 @@
  * Copyright (c) 2000-2006 Silicon Graphics, Inc.
  * All Rights Reserved.
  */
-#include <linux/iversion.h>
-
 #include "xfs.h"
 #include "xfs_fs.h"
 #include "xfs_shared.h"
@@ -828,7 +826,7 @@ xfs_init_new_inode(
 	ip->i_diflags = 0;
 
 	if (xfs_has_v3inodes(mp)) {
-		inode_set_iversion(inode, 1);
+		ip->i_changecount = 1;
 		ip->i_cowextsize = 0;
 		ip->i_crtime = tv;
 	}
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h
index ab46ffb3ac19..0f9d32cbae72 100644
--- a/fs/xfs/xfs_inode.h
+++ b/fs/xfs/xfs_inode.h
@@ -42,6 +42,7 @@ typedef struct xfs_inode {
 	struct rw_semaphore	i_lock;		/* inode lock */
 	atomic_t		i_pincount;	/* inode pin count */
 	struct llist_node	i_gclist;	/* deferred inactivation list */
+	uint64_t		i_changecount;	/* # of attribute changes */
 
 	/*
 	 * Bitsets of inode metadata that have been checked and/or are sick.
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
index f28d653300d1..9ec88a84edfa 100644
--- a/fs/xfs/xfs_inode_item.c
+++ b/fs/xfs/xfs_inode_item.c
@@ -21,8 +21,6 @@
 #include "xfs_error.h"
 #include "xfs_rtbitmap.h"
 
-#include <linux/iversion.h>
-
 struct kmem_cache	*xfs_ili_cache;		/* inode log item */
 
 static inline struct xfs_inode_log_item *INODE_ITEM(struct xfs_log_item *lip)
@@ -546,7 +544,7 @@ xfs_inode_to_log_dinode(
 
 	if (xfs_has_v3inodes(ip->i_mount)) {
 		to->di_version = 3;
-		to->di_changecount = inode_peek_iversion(inode);
+		to->di_changecount = ip->i_changecount;
 		to->di_crtime = xfs_inode_to_log_dinode_ts(ip, ip->i_crtime);
 		to->di_flags2 = ip->i_diflags2;
 		to->di_cowextsize = ip->i_cowextsize;
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
index 3940ad1ee66e..8a145ca7d380 100644
--- a/fs/xfs/xfs_iops.c
+++ b/fs/xfs/xfs_iops.c
@@ -28,7 +28,6 @@
 
 #include <linux/posix_acl.h>
 #include <linux/security.h>
-#include <linux/iversion.h>
 #include <linux/fiemap.h>
 
 /*
-- 
2.43.0


  parent reply	other threads:[~2024-03-18 22:54 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-18 22:50 [PATCH v2 0/2] xfs: drop SB_I_VERSION support Dave Chinner
2024-03-18 22:51 ` [PATCH 1/2] xfs: stop advertising SB_I_VERSION Dave Chinner
2024-03-19 17:51   ` Darrick J. Wong
2024-03-19 23:03   ` Christoph Hellwig
2024-03-18 22:51 ` Dave Chinner [this message]
2024-03-19 17:54   ` [PATCH 2/2] xfs: internalise all remaining i_version support Darrick J. Wong
2024-03-19 23:06     ` Christoph Hellwig
2024-03-19 23:17       ` Darrick J. Wong
2024-03-20  3:10       ` Dave Chinner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240318225406.3378998-3-david@fromorbit.com \
    --to=david@fromorbit.com \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.