static int ptlrpc_check_event(struct ptlrpc_service *svc)
{
-
if (sigismember(&(current->pending.signal), SIGKILL) ||
sigismember(&(current->pending.signal), SIGINT)) {
svc->srv_flags |= SVC_KILLED;
return 1;
}
+ if (svc->srv_flags & SVC_EVENT)
+ BUG();
+
if ( svc->srv_eq_h ) {
int rc;
rc = PtlEQGet(svc->srv_eq_h, &svc->srv_ev);
EXIT;
return 1;
}
-
+
EXIT;
return 0;
}
/* And now, loop forever on requests */
while (1) {
-
wait_event(svc->srv_waitq, ptlrpc_check_event(svc));
if (svc->srv_flags & SVC_SIGNAL) {
* mds_handle instead. */
memset(&request, 0, sizeof(request));
request.rq_obd = obddev;
- request.rq_reqbuf = svc->srv_ev.mem_desc.start + svc->srv_ev.offset;
+ request.rq_reqbuf = (svc->srv_ev.mem_desc.start +
+ svc->srv_ev.offset);
request.rq_reqlen = svc->srv_ev.mem_desc.length;
request.rq_xid = svc->srv_ev.match_bits;
CDEBUG(D_NET, "got req %d\n", request.rq_xid);
request.rq_peer.peer_ni = svc->srv_self.peer_ni;
rc = svc->srv_handler(obddev, svc, &request);
ptl_received_rpc(svc);
+ svc->srv_flags &= ~SVC_EVENT;
continue;
}
return rc;
}
+ CDEBUG(D_NET, "Starting service listening on portal %d\n",
+ service->srv_req_portal);
+
/* Attach the leading ME on which we build the ring */
rc = PtlMEAttach(peer.peer_ni, service->srv_req_portal,
service->srv_id, 0, ~0, PTL_RETAIN,
return 0;
}
-