diff options
author | Samuel Just <sam.just@inktank.com> | 2013-07-16 16:16:47 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-07-16 17:33:27 -0700 |
commit | 884fa2fcb6d707b23317bab1da909586ddc27608 (patch) | |
tree | 3afa236774f46614079d5688cd500a91867c2103 | |
parent | 7e16b72dc3d8aa3b16a17ecbcad9f01d34c1b334 (diff) | |
download | ceph-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.cc | 4 |
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 |