From 884fa2fcb6d707b23317bab1da909586ddc27608 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Tue, 16 Jul 2013 16:16:47 -0700 Subject: [PATCH] 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 --- src/osd/OSD.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 5570338913e..109683ff051 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 -- 2.47.3