summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-07-16 16:16:47 -0700
committerSamuel Just <sam.just@inktank.com>2013-07-16 17:33:27 -0700
commit884fa2fcb6d707b23317bab1da909586ddc27608 (patch)
tree3afa236774f46614079d5688cd500a91867c2103
parent7e16b72dc3d8aa3b16a17ecbcad9f01d34c1b334 (diff)
downloadceph-884fa2fcb6d707b23317bab1da909586ddc27608.tar.gz
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 <sam.just@inktank.com> Reviewed-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/osd/OSD.cc4
1 files 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