From: songbaisen Date: Mon, 23 Jan 2017 09:26:36 +0000 (+0800) Subject: osd: add is_split check before _start_split X-Git-Tag: v12.0.1~404^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0b4e2c626c5f0d2b3885739811511a084b0b2eec;p=ceph-ci.git osd: add is_split check before _start_split Signed-off-by:song baisen --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index ebabf348ce7..18a3bdd6f5a 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -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(old_map->get_pg_num(pgid.pool()))) { + int old_pgnum = old_map->get_pg_num(pgid.pool()); + if (pgid.ps() < static_cast(old_pgnum)) { set 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(new_map->get_pg_num(pgid.pool()))); } diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index ddbfbb8d67c..f7e6bb31825 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -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(); }