]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD::_try_resurrect_pg: fix cur/pgid confusion
authorSamuel Just <sam.just@inktank.com>
Tue, 16 Jul 2013 23:16:47 +0000 (16:16 -0700)
committerSamuel Just <sam.just@inktank.com>
Wed, 17 Jul 2013 00:33:27 +0000 (17:33 -0700)
This bug prevented resurrection of ancestor pgs where
necessary.

Fixes: #5269
This may result in pg A being created just before pg B
is resurrected and split into A and B resulting in one
or the other operations getting and EEXIST.

Backport: cuttlefish
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
src/osd/OSD.cc

index 5570338913e48d90f5e7ae8b112a2f2cc9c94aa2..109683ff0518fc8e8810d71bbdbd67e4483fa099 100644 (file)
@@ -1775,7 +1775,7 @@ OSD::res_result OSD::_try_resurrect_pg(
   DeletingStateRef df;
   pg_t cur(pgid);
   while (true) {
-    df = service.deleting_pgs.lookup(pgid);
+    df = service.deleting_pgs.lookup(cur);
     if (df)
       break;
     if (!cur.ps())
@@ -1812,7 +1812,7 @@ OSD::res_result OSD::_try_resurrect_pg(
               << dendl;
       *resurrected = cur;
       *old_pg_state = df->old_pg_state;
-      service.deleting_pgs.remove(pgid); // PG is no longer being removed!
+      service.deleting_pgs.remove(cur); // PG is no longer being removed!
       return RES_PARENT;
     } else {
       /* this is not a problem, failing to cancel proves that all objects