From 748209fdd57fbabdb07c625462c70b06adb12ed4 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 11 Aug 2008 16:44:11 -0700 Subject: [PATCH] kclient: include snap in ino hash --- src/kernel/inode.c | 1 + src/kernel/super.h | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 28bb12bb6cab5..daebc0cd8cf87 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -2178,6 +2178,7 @@ int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry, dout(30, "getattr returned %d\n", err); if (!err) { generic_fillattr(dentry->d_inode, stat); + stat->ino = ceph_vino(dentry->d_inode).ino; if (ceph_vino(dentry->d_inode).snap != CEPH_NOSNAP) stat->dev = ceph_vino(dentry->d_inode).snap; else diff --git a/src/kernel/super.h b/src/kernel/super.h index 0e66a2fe5aade..1bd0ce4b6ec24 100644 --- a/src/kernel/super.h +++ b/src/kernel/super.h @@ -313,11 +313,10 @@ static inline void ceph_queue_writeback(struct ceph_client *cl, /* * ino_t is <64 bits on many architectures, blech. - * let snapped inos chain up on the same linux ino_t. */ static inline ino_t ceph_vino_to_ino(struct ceph_vino vino) { - ino_t ino = (ino_t)vino.ino; + ino_t ino = (ino_t)vino.ino ^ (vino.snap << 20); #if BITS_PER_LONG == 32 ino ^= vino.ino >> (sizeof(u64)-sizeof(ino_t)) * 8; #endif -- 2.39.5