From c24acf870c7cb516abba51633b67d2ef33d8cf08 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 7 May 2009 21:32:53 -0700 Subject: [PATCH] osd: generate correct child pg when doing pg split --- src/osd/OSD.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 8548f02dde2ee..ecab29d38d6ab 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2458,12 +2458,15 @@ void OSD::split_pg(PG *parent, map& children, ObjectStore::Transaction for (vector::iterator p = olist.begin(); p != olist.end(); p++) { pobject_t poid = *p; ceph_object_layout l = osdmap->make_object_layout(poid.oid, parentid.pool(), parentid.preferred()); - if (le64_to_cpu(l.ol_pgid) != parentid.u.pg64) { - pg_t pgid(le64_to_cpu(l.ol_pgid)); + pg_t pgid = osdmap->raw_pg_to_pg(pg_t(le64_to_cpu(l.ol_pgid))); + if (pgid != parentid) { dout(20) << " moving " << poid << " from " << parentid << " -> " << pgid << dendl; PG *child = children[pgid]; assert(child); bufferlist bv; + + struct stat st; + store->stat(parentid.to_coll(), poid, &st); store->getattr(parentid.to_coll(), poid, OI_ATTR, bv); object_info_t oi(bv); -- 2.39.5