From: Sage Weil Date: Fri, 8 May 2009 04:32:53 +0000 (-0700) Subject: osd: generate correct child pg when doing pg split X-Git-Tag: v0.8~51 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=c24acf870c7cb516abba51633b67d2ef33d8cf08;p=ceph.git osd: generate correct child pg when doing pg split --- 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);