From: Samuel Just Date: Fri, 8 Nov 2013 17:35:54 +0000 (-0800) Subject: OSD: pass osdmap to handle_op and handle_replica_op X-Git-Tag: v0.81~57^2~35 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6d5334928292576c28329db6f875c356a9965019;p=ceph.git OSD: pass osdmap to handle_op and handle_replica_op We need a map to process them, and we don't want to take the OSD lock to access one. (And we can't just use the service because we need all processing of a message to be done with the same map.) Signed-off-by: Samuel Just Signed-off-by: Greg Farnum --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 75d863edfd09..df037d297c65 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -4956,42 +4956,42 @@ void OSD::dispatch_op(OpRequestRef op) // client ops case CEPH_MSG_OSD_OP: - handle_op(op); + handle_op(op, osdmap); break; // for replication etc. case MSG_OSD_SUBOP: - handle_replica_op(op); + handle_replica_op(op, osdmap); break; case MSG_OSD_SUBOPREPLY: - handle_replica_op(op); + handle_replica_op(op, osdmap); break; case MSG_OSD_PG_PUSH: - handle_replica_op(op); + handle_replica_op(op, osdmap); break; case MSG_OSD_PG_PULL: - handle_replica_op(op); + handle_replica_op(op, osdmap); break; case MSG_OSD_PG_PUSH_REPLY: - handle_replica_op(op); + handle_replica_op(op, osdmap); break; case MSG_OSD_PG_SCAN: - handle_replica_op(op); + handle_replica_op(op, osdmap); break; case MSG_OSD_PG_BACKFILL: - handle_replica_op(op); + handle_replica_op(op, osdmap); break; case MSG_OSD_EC_WRITE: - handle_replica_op(op); + handle_replica_op(op, osdmap); break; case MSG_OSD_EC_WRITE_REPLY: - handle_replica_op(op); + handle_replica_op(op, osdmap); break; case MSG_OSD_EC_READ: - handle_replica_op(op); + handle_replica_op(op, osdmap); break; case MSG_OSD_EC_READ_REPLY: - handle_replica_op(op); + handle_replica_op(op, osdmap); break; } } @@ -7373,7 +7373,7 @@ void OSDService::handle_misdirected_op(PG *pg, OpRequestRef op) reply_op_error(op, -ENXIO); } -void OSD::handle_op(OpRequestRef op) +void OSD::handle_op(OpRequestRef op, OSDMapRef osdmap) { MOSDOp *m = static_cast(op->get_req()); assert(m->get_header().type == CEPH_MSG_OSD_OP); @@ -7513,7 +7513,7 @@ void OSD::handle_op(OpRequestRef op) } template -void OSD::handle_replica_op(OpRequestRef op) +void OSD::handle_replica_op(OpRequestRef op, OSDMapRef osdmap) { T *m = static_cast(op->get_req()); assert(m->get_header().type == MSGTYPE); diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 8702df16b20e..90f225d3dc75 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1978,10 +1978,10 @@ public: void handle_rep_scrub(MOSDRepScrub *m); void handle_scrub(struct MOSDScrub *m); void handle_osd_ping(class MOSDPing *m); - void handle_op(OpRequestRef op); + void handle_op(OpRequestRef op, OSDMapRef osdmap); template - void handle_replica_op(OpRequestRef op); + void handle_replica_op(OpRequestRef op, OSDMapRef osdmap); /// check if we can throw out op from a disconnected client static bool op_is_discardable(class MOSDOp *m);