]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd: add is_split check before _start_split
authorsongbaisen <song.baisen@zte.com.cn>
Mon, 23 Jan 2017 09:26:36 +0000 (17:26 +0800)
committersongbaisen <song.baisen@zte.com.cn>
Thu, 9 Feb 2017 03:05:42 +0000 (11:05 +0800)
Signed-off-by:song baisen <song.baisen@zte.com.cn>

src/osd/OSD.cc
src/osd/OSDMap.h

index ebabf348ce700b4218cb0970811b5d7b3785c58c..18a3bdd6f5afbedb33611aba9a82670a4463e2d4 100644 (file)
@@ -353,11 +353,12 @@ void OSDService::_maybe_split_pgid(OSDMapRef old_map,
                                  spg_t pgid)
 {
   assert(old_map->have_pg_pool(pgid.pool()));
-  if (pgid.ps() < static_cast<unsigned>(old_map->get_pg_num(pgid.pool()))) {
+  int old_pgnum = old_map->get_pg_num(pgid.pool());
+  if (pgid.ps() < static_cast<unsigned>(old_pgnum)) {
     set<spg_t> children;
-    pgid.is_split(old_map->get_pg_num(pgid.pool()),
-                 new_map->get_pg_num(pgid.pool()), &children);
-    _start_split(pgid, children);
+    if (pgid.is_split(old_pgnum,
+                 new_map->get_pg_num(pgid.pool()), &children)) { 
+      _start_split(pgid, children); }
   } else {
     assert(pgid.ps() < static_cast<unsigned>(new_map->get_pg_num(pgid.pool())));
   }
index ddbfbb8d67ce36a6f22713ff06f03781dc71841e..f7e6bb318254b455e2cca6caa0ff6a368bd5e598 100644 (file)
@@ -608,6 +608,7 @@ public:
   int get_pg_num(int pg_pool) const
   {
     const pg_pool_t *pool = get_pg_pool(pg_pool);
+    assert(NULL != pool);
     return pool->get_pg_num();
   }