From d69f3dd327730a61b614c9f41f6155626bc07686 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Mon, 6 Dec 2010 12:49:40 -0800 Subject: [PATCH] MDS: Encode a full ancestor trace on inodes, not just the immediate parent. --- src/mds/CInode.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 401530d8da1a3..2ec8310b4317a 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -1001,12 +1001,17 @@ void CInode::encode_parent_mutation(ObjectOperation& m) CDentry *pdn = get_parent_dn(); if (pdn) { bufferlist parent(32 + pdn->name.length()); - uint64_t ino = pdn->get_dir()->get_inode()->ino(); - __u8 v = 1; + __u8 v = 2; ::encode(v, parent); - ::encode(inode.version, parent); - ::encode(ino, parent); - ::encode(pdn->name, parent); + while (pdn) { + uint64_t ino = pdn->get_dir()->get_inode()->ino(); + ::encode(inode.version, parent); + ::encode(ino, parent); + ::encode(pdn->name, parent); + pdn = (pdn->get_linkage() && pdn->get_linkage()->get_inode())? + pdn->get_linkage()->get_inode()->get_parent_dn() + : NULL; + } m.setxattr("parent", parent); } } -- 2.39.5