]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PGLog: reindex properly on pg log split
authorSage Weil <sage@redhat.com>
Fri, 17 Feb 2017 19:50:38 +0000 (14:50 -0500)
committerAlexey Sheplyakov <asheplyakov@mirantis.com>
Mon, 20 Mar 2017 12:52:55 +0000 (16:52 +0400)
When pg_log_t::split_out_child() runs it builds the list, which means the
old indexes are wrong (the point to bad memory), but index() will not
rebuild them because ever since b858e869e78927dccebaa350d246bd74af7f1de9
we won't rebuild them if they are already built.

Fix that by calling unindex() before the split.

Further, the new child log also needs to be indexed.  Fix that too.

Fixes: http://tracker.ceph.com/issues/18975
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 643ae42cf27f16dd6ed4e1402acc0483bb9fca74)

src/osd/PGLog.cc

index c07ba17589e9e188e4cb352d4cea2b7cd37b0722..d0b8e5dd9de73a322f4a51b55e61e1e0af6aa320 100644 (file)
@@ -34,8 +34,10 @@ PGLog::IndexedLog PGLog::IndexedLog::split_out_child(
   pg_t child_pgid,
   unsigned split_bits)
 {
+  unindex();
   IndexedLog ret(pg_log_t::split_out_child(child_pgid, split_bits));
   index();
+  ret.index();
   reset_rollback_info_trimmed_to_riter();
   return ret;
 }