From a64f64688f20d6854384c92a677cc9c857c0b932 Mon Sep 17 00:00:00 2001 From: pschwan Date: Mon, 29 Apr 2002 21:54:30 +0000 Subject: [PATCH] removed srv_ev from ptlrpc_service and put it on the service thread's stack --- lustre/include/linux/lustre_net.h | 1 - lustre/ptlrpc/service.c | 24 +++++++++++++----------- lustre/tests/lldlm.sh | 1 + 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lustre/include/linux/lustre_net.h b/lustre/include/linux/lustre_net.h index 5914728..944c29a 100644 --- a/lustre/include/linux/lustre_net.h +++ b/lustre/include/linux/lustre_net.h @@ -219,7 +219,6 @@ struct ptlrpc_service { spinlock_t srv_lock; struct list_head srv_reqs; - ptl_event_t srv_ev; int (*srv_handler)(struct obd_device *obddev, struct ptlrpc_service *svc, struct ptlrpc_request *req); diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c index 6754fb7..46ea224 100644 --- a/lustre/ptlrpc/service.c +++ b/lustre/ptlrpc/service.c @@ -28,7 +28,7 @@ extern int request_in_callback(ptl_event_t *ev, void *data); extern int ptl_handled_rpc(struct ptlrpc_service *service, void *start); -static int ptlrpc_check_event(struct ptlrpc_service *svc) +static int ptlrpc_check_event(struct ptlrpc_service *svc, ptl_event_t *event) { int rc = 0; ENTRY; @@ -46,7 +46,7 @@ static int ptlrpc_check_event(struct ptlrpc_service *svc) if (ptl_is_valid_handle(&svc->srv_eq_h)) { int err; - err = PtlEQGet(svc->srv_eq_h, &svc->srv_ev); + err = PtlEQGet(svc->srv_eq_h, event); if (err == PTL_OK) { svc->srv_flags |= SVC_EVENT; @@ -139,7 +139,8 @@ err_free: } static int handle_incoming_request(struct obd_device *obddev, - struct ptlrpc_service *svc) + struct ptlrpc_service *svc, + ptl_event_t *event) { struct ptlrpc_request request; struct lustre_peer peer; @@ -148,19 +149,18 @@ static int handle_incoming_request(struct obd_device *obddev, /* FIXME: If we move to an event-driven model, we should put the request * on the stack of mds_handle instead. */ - start = svc->srv_ev.mem_desc.start; + start = event->mem_desc.start; memset(&request, 0, sizeof(request)); request.rq_obd = obddev; - request.rq_reqmsg = (svc->srv_ev.mem_desc.start + - svc->srv_ev.offset); - request.rq_reqlen = svc->srv_ev.mem_desc.length; + request.rq_reqmsg = event->mem_desc.start + event->offset; + request.rq_reqlen = event->mem_desc.length; - if (request.rq_reqmsg->xid != svc->srv_ev.match_bits) + if (request.rq_reqmsg->xid != event->match_bits) LBUG(); CDEBUG(D_NET, "got req %d\n", request.rq_reqmsg->xid); - peer.peer_nid = svc->srv_ev.initiator.nid; + peer.peer_nid = event->initiator.nid; /* FIXME: this NI should be the incoming NI. * We don't know how to find that from here. */ peer.peer_ni = svc->srv_self.peer_ni; @@ -227,7 +227,9 @@ static int ptlrpc_main(void *arg) /* And now, loop forever on requests */ while (1) { - wait_event(svc->srv_waitq, ptlrpc_check_event(svc)); + ptl_event_t event; + + wait_event(svc->srv_waitq, ptlrpc_check_event(svc, &event)); spin_lock(&svc->srv_lock); if (svc->srv_flags & SVC_SIGNAL) { @@ -246,7 +248,7 @@ static int ptlrpc_main(void *arg) if (svc->srv_flags & SVC_EVENT) { svc->srv_flags &= ~SVC_EVENT; - rc = handle_incoming_request(obddev, svc); + rc = handle_incoming_request(obddev, svc, &event); continue; } diff --git a/lustre/tests/lldlm.sh b/lustre/tests/lldlm.sh index 78b1bbc..d7b5e1d 100755 --- a/lustre/tests/lldlm.sh +++ b/lustre/tests/lldlm.sh @@ -10,6 +10,7 @@ PORT=1234 setup_portals setup_lustre +read $OBDCTL <