[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