[PATCH 2/6] rpdfs: add inode change debugging routine

Valerie Aurora <[email protected]> Thu, 7 May 2026 15:21:49 +0200
Newsgroups dev.linux.lists.rpdfs-devel
Message-ID <[email protected]>
print_inode_change() can be added to copy_vfs_inode_to_rinode() to
log what has changed since the last inode update.

Signed-off-by: Valerie Aurora <[email protected]>
---
 fs/rpdfs/inode.c | 42 +++++++++++++++++++++++++++++++++++++-----
 1 file changed, 37 insertions(+), 5 deletions(-)

diff --git a/fs/rpdfs/inode.c b/fs/rpdfs/inode.c
index 428c9081fd75..a2baa862f6a4 100644
--- a/fs/rpdfs/inode.c
+++ b/fs/rpdfs/inode.c
@@ -87,6 +87,43 @@ static __le64 cpu_ts64_to_le64_ns(struct timespec64 ts)
 	return cpu_to_le64(timespec64_to_ns(&ts));
 }
 
+static u64 ts64_to_ns(struct timespec64 ts)
+{
+	return timespec64_to_ns(&ts);
+}
+
+__always_unused
+static inline void print_diff64(char *name, u64 new, u64 old)
+{
+	if (old != new)
+		rpdfs_prd("%s: %llu -> %llu (%lld)", name, old, new, new - old);
+}
+
+__always_unused
+static void print_inode_change(struct inode *inode, struct rpdfs_inode *rinode)
+{
+	struct rpdfs_inode_info *ri = RPDFS_I(inode);
+
+	rpdfs_prd("copying inode %lu to rinode", inode->i_ino);
+
+	print_diff64("ino", le64_to_cpu(ri->ig.ino), le64_to_cpu(rinode->ig.ino));
+	print_diff64("gen", le64_to_cpu(ri->ig.gen), le64_to_cpu(rinode->ig.gen));
+	print_diff64("i_size", i_size_read(inode), le64_to_cpu(rinode->size));
+	print_diff64("nlink", inode->i_nlink, le32_to_cpu(rinode->nlink));
+	print_diff64("uid", i_uid_read(inode), le32_to_cpu(rinode->uid));
+	print_diff64("gid", i_gid_read(inode), le32_to_cpu(rinode->gid));
+	print_diff64("mode", inode->i_mode, le32_to_cpu(rinode->mode));
+
+	print_diff64("atime", ts64_to_ns(inode_get_atime(inode)), le64_to_cpu(rinode->atime_nsec));
+	print_diff64("mtime", ts64_to_ns(inode_get_mtime(inode)), le64_to_cpu(rinode->mtime_nsec));
+	print_diff64("ctime", ts64_to_ns(inode_get_ctime(inode)), le64_to_cpu(rinode->ctime_nsec));
+	print_diff64("crtime", le64_to_cpu(ri->crtime_nsec), le64_to_cpu(rinode->crtime_nsec));
+
+	print_diff64("dirents", le64_to_cpu(ri->dirents.ref.bnr), le64_to_cpu(rinode->dirents.ref.bnr));
+	print_diff64("xattrs", le64_to_cpu(ri->xattrs.ref.bnr), le64_to_cpu(rinode->xattrs.ref.bnr));
+	print_diff64("xattr_creates", le64_to_cpu(ri->xattr_creates), le64_to_cpu(rinode->xattr_creates));
+}
+
 static void copy_vfs_inode_to_rinode(struct rpdfs_inode *rinode, struct inode *inode)
 {
 	struct rpdfs_inode_info *ri = RPDFS_I(inode);
@@ -132,11 +169,6 @@ void rpdfs_inode_init_ops(struct inode *inode)
 	}
 }
 
-static u64 ts64_to_ns(struct timespec64 ts)
-{
-	return timespec64_to_ns(&ts);
-}
-
 /*
  * Update the vfs inode if the caller's persistent version of the rinode
  * is more recent.  A lot of tasks can be checking a shared inode to see
-- 
2.49.0