]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: wake_pg_waiters outside of the pgmap write_lock, pg_lock
authorSamuel Just <sam.just@inktank.com>
Tue, 5 Aug 2014 19:57:43 +0000 (12:57 -0700)
committerSamuel Just <sam.just@inktank.com>
Thu, 7 Aug 2014 18:48:54 +0000 (11:48 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSD.cc

index 08b6bcc295884ed70e10b2e9edc615b201c22921..e586674f0dbd370a670455717511a173cbc4f42a 100644 (file)
@@ -2647,7 +2647,6 @@ void OSD::add_newly_split_pg(PG *pg, PG::RecoveryCtx *rctx)
   pg->get("PGMap");  // For pg_map
   pg_map[pg->info.pgid] = pg;
   service.pg_add_epoch(pg->info.pgid, pg->get_osdmap()->get_epoch());
-  wake_pg_waiters(pg, pg->info.pgid);
 
   dout(10) << "Adding newly split pg " << *pg << dendl;
   vector<int> up, acting;
@@ -8301,6 +8300,7 @@ struct C_CompleteSplits : public Context {
       osd->dispatch_context_transaction(rctx, &**i);
        to_complete.insert((*i)->info.pgid);
       (*i)->unlock();
+      osd->wake_pg_waiters(&**i, (*i)->info.pgid);
       to_complete.clear();
     }