]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: avoid map_lock for scrub_map reply
authorSage Weil <sage.weil@dreamhost.com>
Tue, 8 Feb 2011 16:41:14 +0000 (08:41 -0800)
committerSage Weil <sage.weil@dreamhost.com>
Tue, 8 Feb 2011 16:41:14 +0000 (08:41 -0800)
Using osd->osdmap->epoch without map_lock is dangerous.  We can avoid it
entirely by replying on the same connection as the request.

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/osd/PG.cc

index c1dcc4d8abf90e3d28173756714c3e34657745f1..bfba1333e118efca7f81aefed7b58bb24edebc20 100644 (file)
@@ -3121,17 +3121,12 @@ void PG::replica_scrub(MOSDRepScrub *msg)
   eversion_t v;
   osd_reqid_t reqid;
   MOSDSubOp *subop = new MOSDSubOp(reqid, info.pgid, poid, false, 0,
-                                  osd->osdmap->get_epoch(), osd->get_tid(), v);
+                                  msg->map_epoch, osd->get_tid(), v);
   ::encode(map, subop->get_data());
   subop->ops = scrub;
 
-  unlock();
-  osd->map_lock.get_read();
-  lock();
+  osd->cluster_messenger->send_message(subop, msg->get_connection());
 
-  osd->cluster_messenger->send_message(subop, osd->osdmap->get_cluster_inst(acting[0]));
-
-  osd->map_lock.put_read();
   msg->put();
 }