From: Samuel Just Date: Tue, 16 Jul 2013 23:16:47 +0000 (-0700) Subject: OSD::_try_resurrect_pg: fix cur/pgid confusion X-Git-Tag: v0.67-rc1~47 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=884fa2fcb6d707b23317bab1da909586ddc27608;p=ceph.git OSD::_try_resurrect_pg: fix cur/pgid confusion 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 Reviewed-by: Sage Weil --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 5570338913e4..109683ff0518 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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