Whamcloud - gitweb
LU-56 lnet: allow to create EQ with zero eq_size
[fs/lustre-release.git] / lnet / selftest / rpc.c
index 49f483f..8413f48 100644 (file)
@@ -1,6 +1,4 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
  * GPL HEADER START
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -26,7 +24,7 @@
  * GPL HEADER END
  */
 /*
- * Copyright  2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  */
 /*
@@ -47,13 +45,12 @@ typedef enum {
         SRPC_STATE_NONE,
         SRPC_STATE_NI_INIT,
         SRPC_STATE_EQ_INIT,
-        SRPC_STATE_WI_INIT,
         SRPC_STATE_RUNNING,
         SRPC_STATE_STOPPING,
 } srpc_state_t;
 
 struct smoketest_rpc {
-        spinlock_t        rpc_glock;     /* global lock */
+        cfs_spinlock_t    rpc_glock;     /* global lock */
         srpc_service_t   *rpc_services[SRPC_SERVICE_MAX_ID + 1];
         lnet_handle_eq_t  rpc_lnet_eq;   /* _the_ LNet event queue */
         srpc_state_t      rpc_state;
@@ -66,16 +63,16 @@ int srpc_handle_rpc (swi_workitem_t *wi);
 
 void srpc_get_counters (srpc_counters_t *cnt)
 {
-        spin_lock(&srpc_data.rpc_glock);
+        cfs_spin_lock(&srpc_data.rpc_glock);
         *cnt = srpc_data.rpc_counters;
-        spin_unlock(&srpc_data.rpc_glock);
+        cfs_spin_unlock(&srpc_data.rpc_glock);
 }
 
 void srpc_set_counters (const srpc_counters_t *cnt)
 {
-        spin_lock(&srpc_data.rpc_glock);
+        cfs_spin_lock(&srpc_data.rpc_glock);
         srpc_data.rpc_counters = *cnt;
-        spin_unlock(&srpc_data.rpc_glock);
+        cfs_spin_unlock(&srpc_data.rpc_glock);
 }
 
 void
@@ -179,9 +176,9 @@ srpc_next_id (void)
 {
         __u64 id;
 
-        spin_lock(&srpc_data.rpc_glock);
+        cfs_spin_lock(&srpc_data.rpc_glock);
         id = srpc_data.rpc_matchbits++;
-        spin_unlock(&srpc_data.rpc_glock);
+        cfs_spin_unlock(&srpc_data.rpc_glock);
         return id;
 }
 
@@ -190,7 +187,9 @@ srpc_init_server_rpc (srpc_server_rpc_t *rpc,
                       srpc_service_t *sv, srpc_buffer_t *buffer)
 {
         memset(rpc, 0, sizeof(*rpc));
-        swi_init_workitem(&rpc->srpc_wi, rpc, srpc_handle_rpc);
+        swi_init_workitem(&rpc->srpc_wi, rpc, srpc_handle_rpc,
+                          sv->sv_id <= SRPC_FRAMEWORK_SERVICE_MAX_ID ?
+                          CFS_WI_SCHED_SERIAL : CFS_WI_SCHED_ANY);
 
         rpc->srpc_ev.ev_fired = 1; /* no event expected now */
 
@@ -211,22 +210,22 @@ srpc_add_service (srpc_service_t *sv)
         LASSERT (sv->sv_concur > 0);
         LASSERT (0 <= id && id <= SRPC_SERVICE_MAX_ID);
 
-        spin_lock(&srpc_data.rpc_glock);
+        cfs_spin_lock(&srpc_data.rpc_glock);
 
         LASSERT (srpc_data.rpc_state == SRPC_STATE_RUNNING);
 
         if (srpc_data.rpc_services[id] != NULL) {
-                spin_unlock(&srpc_data.rpc_glock);
+                cfs_spin_unlock(&srpc_data.rpc_glock);
                 return -EBUSY;
         }
 
         srpc_data.rpc_services[id] = sv;
-        spin_unlock(&srpc_data.rpc_glock);
+        cfs_spin_unlock(&srpc_data.rpc_glock);
 
         sv->sv_nprune       = 0;
         sv->sv_nposted_msg  = 0;
         sv->sv_shuttingdown = 0;
-        spin_lock_init(&sv->sv_lock);
+        cfs_spin_lock_init(&sv->sv_lock);
         CFS_INIT_LIST_HEAD(&sv->sv_free_rpcq);
         CFS_INIT_LIST_HEAD(&sv->sv_active_rpcq);
         CFS_INIT_LIST_HEAD(&sv->sv_posted_msgq);
@@ -239,7 +238,7 @@ srpc_add_service (srpc_service_t *sv)
                 LIBCFS_ALLOC(rpc, sizeof(*rpc));
                 if (rpc == NULL) goto enomem;
 
-                list_add(&rpc->srpc_list, &sv->sv_free_rpcq);
+                cfs_list_add(&rpc->srpc_list, &sv->sv_free_rpcq);
         }
 
         CDEBUG (D_NET, "Adding service: id %d, name %s, concurrency %d\n",
@@ -247,16 +246,16 @@ srpc_add_service (srpc_service_t *sv)
         return 0;
 
 enomem:
-        while (!list_empty(&sv->sv_free_rpcq)) {
-                rpc = list_entry(sv->sv_free_rpcq.next,
-                                 srpc_server_rpc_t, srpc_list);
-                list_del(&rpc->srpc_list);
+        while (!cfs_list_empty(&sv->sv_free_rpcq)) {
+                rpc = cfs_list_entry(sv->sv_free_rpcq.next,
+                                     srpc_server_rpc_t, srpc_list);
+                cfs_list_del(&rpc->srpc_list);
                 LIBCFS_FREE(rpc, sizeof(*rpc));
         }
 
-        spin_lock(&srpc_data.rpc_glock);
+        cfs_spin_lock(&srpc_data.rpc_glock);
         srpc_data.rpc_services[id] = NULL;
-        spin_unlock(&srpc_data.rpc_glock);
+        cfs_spin_unlock(&srpc_data.rpc_glock);
         return -ENOMEM;
 }
 
@@ -265,15 +264,15 @@ srpc_remove_service (srpc_service_t *sv)
 {
         int id = sv->sv_id;
 
-        spin_lock(&srpc_data.rpc_glock);
+        cfs_spin_lock(&srpc_data.rpc_glock);
 
         if (srpc_data.rpc_services[id] != sv) {
-                spin_unlock(&srpc_data.rpc_glock);
+                cfs_spin_unlock(&srpc_data.rpc_glock);
                 return -ENOENT;
         }
 
         srpc_data.rpc_services[id] = NULL;
-        spin_unlock(&srpc_data.rpc_glock);
+        cfs_spin_unlock(&srpc_data.rpc_glock);
         return 0;
 }
 
@@ -417,9 +416,9 @@ srpc_service_post_buffer (srpc_service_t *sv, srpc_buffer_t *buf)
         LASSERT (!sv->sv_shuttingdown);
 
         LNetInvalidateHandle(&buf->buf_mdh);
-        list_add(&buf->buf_list, &sv->sv_posted_msgq);
+        cfs_list_add(&buf->buf_list, &sv->sv_posted_msgq);
         sv->sv_nposted_msg++;
-        spin_unlock(&sv->sv_lock);
+        cfs_spin_unlock(&sv->sv_lock);
 
         rc = srpc_post_passive_rqtbuf(sv->sv_id, msg, sizeof(*msg),
                                       &buf->buf_mdh, &sv->sv_ev);
@@ -428,17 +427,17 @@ srpc_service_post_buffer (srpc_service_t *sv, srpc_buffer_t *buf)
          * msg and its event handler has been called. So we must add
          * buf to sv_posted_msgq _before_ dropping sv_lock */
 
-        spin_lock(&sv->sv_lock);
+        cfs_spin_lock(&sv->sv_lock);
 
         if (rc == 0) {
                 if (sv->sv_shuttingdown) {
-                        spin_unlock(&sv->sv_lock);
+                        cfs_spin_unlock(&sv->sv_lock);
 
                         /* srpc_shutdown_service might have tried to unlink me
                          * when my buf_mdh was still invalid */
                         LNetMDUnlink(buf->buf_mdh);
 
-                        spin_lock(&sv->sv_lock);
+                        cfs_spin_lock(&sv->sv_lock);
                 }
                 return 0;
         }
@@ -446,11 +445,11 @@ srpc_service_post_buffer (srpc_service_t *sv, srpc_buffer_t *buf)
         sv->sv_nposted_msg--;
         if (sv->sv_shuttingdown) return rc;
 
-        list_del(&buf->buf_list);
+        cfs_list_del(&buf->buf_list);
 
-        spin_unlock(&sv->sv_lock);
+        cfs_spin_unlock(&sv->sv_lock);
         LIBCFS_FREE(buf, sizeof(*buf));
-        spin_lock(&sv->sv_lock);
+        cfs_spin_lock(&sv->sv_lock);
         return rc;
 }
 
@@ -468,9 +467,9 @@ srpc_service_add_buffers (srpc_service_t *sv, int nbuffer)
                 LIBCFS_ALLOC(buf, sizeof(*buf));
                 if (buf == NULL) break;
 
-                spin_lock(&sv->sv_lock);
+                cfs_spin_lock(&sv->sv_lock);
                 rc = srpc_service_post_buffer(sv, buf);
-                spin_unlock(&sv->sv_lock);
+                cfs_spin_unlock(&sv->sv_lock);
 
                 if (rc != 0) break;
         }
@@ -484,14 +483,14 @@ srpc_service_remove_buffers (srpc_service_t *sv, int nbuffer)
         LASSERTF (nbuffer > 0,
                   "nbuffer must be positive: %d\n", nbuffer);
 
-        spin_lock(&sv->sv_lock);
+        cfs_spin_lock(&sv->sv_lock);
 
         LASSERT (sv->sv_nprune >= 0);
         LASSERT (!sv->sv_shuttingdown);
 
         sv->sv_nprune += nbuffer;
 
-        spin_unlock(&sv->sv_lock);
+        cfs_spin_unlock(&sv->sv_lock);
         return;
 }
 
@@ -502,59 +501,58 @@ srpc_finish_service (srpc_service_t *sv)
         srpc_server_rpc_t *rpc;
         srpc_buffer_t     *buf;
 
-        spin_lock(&sv->sv_lock);
+        cfs_spin_lock(&sv->sv_lock);
 
         LASSERT (sv->sv_shuttingdown); /* srpc_shutdown_service called */
 
-        if (sv->sv_nposted_msg != 0 || !list_empty(&sv->sv_active_rpcq)) {
+        if (sv->sv_nposted_msg != 0 || !cfs_list_empty(&sv->sv_active_rpcq)) {
                 CDEBUG (D_NET,
                         "waiting for %d posted buffers to unlink and "
                         "in-flight RPCs to die.\n",
                         sv->sv_nposted_msg);
 
-                if (!list_empty(&sv->sv_active_rpcq)) {
-                        rpc = list_entry(sv->sv_active_rpcq.next,
-                                         srpc_server_rpc_t, srpc_list);
-                        CDEBUG (D_NETERROR,
-                                "Active RPC %p on shutdown: sv %s, peer %s, "
+                if (!cfs_list_empty(&sv->sv_active_rpcq)) {
+                        rpc = cfs_list_entry(sv->sv_active_rpcq.next,
+                                             srpc_server_rpc_t, srpc_list);
+                        CNETERR("Active RPC %p on shutdown: sv %s, peer %s, "
                                 "wi %s scheduled %d running %d, "
                                 "ev fired %d type %d status %d lnet %d\n",
                                 rpc, sv->sv_name, libcfs_id2str(rpc->srpc_peer),
-                                swi_state2str(rpc->srpc_wi.wi_state),
-                                rpc->srpc_wi.wi_scheduled,
-                                rpc->srpc_wi.wi_running,
+                                swi_state2str(rpc->srpc_wi.swi_state),
+                                rpc->srpc_wi.swi_workitem.wi_scheduled,
+                                rpc->srpc_wi.swi_workitem.wi_running,
                                 rpc->srpc_ev.ev_fired,
                                 rpc->srpc_ev.ev_type,
                                 rpc->srpc_ev.ev_status,
                                 rpc->srpc_ev.ev_lnet);
                 }
 
-                spin_unlock(&sv->sv_lock);
+                cfs_spin_unlock(&sv->sv_lock);
                 return 0;
         }
 
-        spin_unlock(&sv->sv_lock); /* no lock needed from now on */
+        cfs_spin_unlock(&sv->sv_lock); /* no lock needed from now on */
 
         for (;;) {
-                struct list_head *q;
+                cfs_list_t *q;
 
-                if (!list_empty(&sv->sv_posted_msgq))
+                if (!cfs_list_empty(&sv->sv_posted_msgq))
                         q = &sv->sv_posted_msgq;
-                else if (!list_empty(&sv->sv_blocked_msgq))
+                else if (!cfs_list_empty(&sv->sv_blocked_msgq))
                         q = &sv->sv_blocked_msgq;
                 else
                         break;
 
-                buf = list_entry(q->next, srpc_buffer_t, buf_list);
-                list_del(&buf->buf_list);
+                buf = cfs_list_entry(q->next, srpc_buffer_t, buf_list);
+                cfs_list_del(&buf->buf_list);
 
                 LIBCFS_FREE(buf, sizeof(*buf));
         }
 
-        while (!list_empty(&sv->sv_free_rpcq)) {
-                rpc = list_entry(sv->sv_free_rpcq.next,
-                                 srpc_server_rpc_t, srpc_list);
-                list_del(&rpc->srpc_list);
+        while (!cfs_list_empty(&sv->sv_free_rpcq)) {
+                rpc = cfs_list_entry(sv->sv_free_rpcq.next,
+                                     srpc_server_rpc_t, srpc_list);
+                cfs_list_del(&rpc->srpc_list);
                 LIBCFS_FREE(rpc, sizeof(*rpc));
         }
 
@@ -575,23 +573,16 @@ srpc_service_recycle_buffer (srpc_service_t *sv, srpc_buffer_t *buf)
 
         sv->sv_nprune--;
 free:
-        spin_unlock(&sv->sv_lock);
+        cfs_spin_unlock(&sv->sv_lock);
         LIBCFS_FREE(buf, sizeof(*buf));
-        spin_lock(&sv->sv_lock);
+        cfs_spin_lock(&sv->sv_lock);
 }
 
 /* called with srpc_service_t::sv_lock held */
 inline void
 srpc_schedule_server_rpc (srpc_server_rpc_t *rpc)
 {
-        srpc_service_t *sv = rpc->srpc_service;
-
-        if (sv->sv_id > SRPC_FRAMEWORK_SERVICE_MAX_ID)
-                swi_schedule_workitem(&rpc->srpc_wi);
-        else    /* framework RPCs are handled one by one */
-                swi_schedule_serial_workitem(&rpc->srpc_wi);
-
-        return;
+        swi_schedule_workitem(&rpc->srpc_wi);
 }
 
 void
@@ -599,7 +590,7 @@ srpc_abort_service (srpc_service_t *sv)
 {
         srpc_server_rpc_t *rpc;
 
-        spin_lock(&sv->sv_lock);
+        cfs_spin_lock(&sv->sv_lock);
 
         CDEBUG(D_NET, "Aborting service: id %d, name %s\n",
                sv->sv_id, sv->sv_name);
@@ -607,12 +598,12 @@ srpc_abort_service (srpc_service_t *sv)
         /* schedule in-flight RPCs to notice the abort, NB:
          * racing with incoming RPCs; complete fix should make test
          * RPCs carry session ID in its headers */
-        list_for_each_entry (rpc, &sv->sv_active_rpcq, srpc_list) {
+        cfs_list_for_each_entry (rpc, &sv->sv_active_rpcq, srpc_list) {
                 rpc->srpc_aborted = 1;
                 srpc_schedule_server_rpc(rpc);
         }
 
-        spin_unlock(&sv->sv_lock);
+        cfs_spin_unlock(&sv->sv_lock);
         return;
 }
 
@@ -622,7 +613,7 @@ srpc_shutdown_service (srpc_service_t *sv)
         srpc_server_rpc_t *rpc;
         srpc_buffer_t     *buf;
 
-        spin_lock(&sv->sv_lock);
+        cfs_spin_lock(&sv->sv_lock);
 
         CDEBUG(D_NET, "Shutting down service: id %d, name %s\n",
                sv->sv_id, sv->sv_name);
@@ -635,7 +626,7 @@ srpc_shutdown_service (srpc_service_t *sv)
                 srpc_schedule_server_rpc(rpc);
         }
 
-        spin_unlock(&sv->sv_lock);
+        cfs_spin_unlock(&sv->sv_lock);
 
         /* OK to traverse sv_posted_msgq without lock, since no one
          * touches sv_posted_msgq now */
@@ -764,26 +755,26 @@ srpc_server_rpc_done (srpc_server_rpc_t *rpc, int status)
         srpc_service_t *sv = rpc->srpc_service;
         srpc_buffer_t  *buffer;
 
-        LASSERT (status != 0 || rpc->srpc_wi.wi_state == SWI_STATE_DONE);
+        LASSERT (status != 0 || rpc->srpc_wi.swi_state == SWI_STATE_DONE);
 
         rpc->srpc_status = status;
 
-        CDEBUG (status == 0 ? D_NET : D_NETERROR,
+        CDEBUG_LIMIT (status == 0 ? D_NET : D_NETERROR,
                 "Server RPC %p done: service %s, peer %s, status %s:%d\n",
                 rpc, sv->sv_name, libcfs_id2str(rpc->srpc_peer),
-                swi_state2str(rpc->srpc_wi.wi_state), status);
+                swi_state2str(rpc->srpc_wi.swi_state), status);
 
         if (status != 0) {
-                spin_lock(&srpc_data.rpc_glock);
+                cfs_spin_lock(&srpc_data.rpc_glock);
                 srpc_data.rpc_counters.rpcs_dropped++;
-                spin_unlock(&srpc_data.rpc_glock);
+                cfs_spin_unlock(&srpc_data.rpc_glock);
         }
 
         if (rpc->srpc_done != NULL)
                 (*rpc->srpc_done) (rpc);
         LASSERT (rpc->srpc_bulk == NULL);
 
-        spin_lock(&sv->sv_lock);
+        cfs_spin_lock(&sv->sv_lock);
 
         if (rpc->srpc_reqstbuf != NULL) {
                 /* NB might drop sv_lock in srpc_service_recycle_buffer, but
@@ -792,7 +783,7 @@ srpc_server_rpc_done (srpc_server_rpc_t *rpc, int status)
                 rpc->srpc_reqstbuf = NULL;
         }
 
-        list_del(&rpc->srpc_list); /* from sv->sv_active_rpcq */
+        cfs_list_del(&rpc->srpc_list); /* from sv->sv_active_rpcq */
 
         /*
          * No one can schedule me now since:
@@ -803,19 +794,19 @@ srpc_server_rpc_done (srpc_server_rpc_t *rpc, int status)
         LASSERT (rpc->srpc_ev.ev_fired);
         swi_kill_workitem(&rpc->srpc_wi);
 
-        if (!sv->sv_shuttingdown && !list_empty(&sv->sv_blocked_msgq)) {
-                buffer = list_entry(sv->sv_blocked_msgq.next,
+        if (!sv->sv_shuttingdown && !cfs_list_empty(&sv->sv_blocked_msgq)) {
+                buffer = cfs_list_entry(sv->sv_blocked_msgq.next,
                                     srpc_buffer_t, buf_list);
-                list_del(&buffer->buf_list);
+                cfs_list_del(&buffer->buf_list);
 
                 srpc_init_server_rpc(rpc, sv, buffer);
-                list_add_tail(&rpc->srpc_list, &sv->sv_active_rpcq);
+                cfs_list_add_tail(&rpc->srpc_list, &sv->sv_active_rpcq);
                 srpc_schedule_server_rpc(rpc);
         } else {
-                list_add(&rpc->srpc_list, &sv->sv_free_rpcq);
+                cfs_list_add(&rpc->srpc_list, &sv->sv_free_rpcq);
         }
 
-        spin_unlock(&sv->sv_lock);
+        cfs_spin_unlock(&sv->sv_lock);
         return;
 }
 
@@ -823,17 +814,17 @@ srpc_server_rpc_done (srpc_server_rpc_t *rpc, int status)
 int
 srpc_handle_rpc (swi_workitem_t *wi)
 {
-        srpc_server_rpc_t *rpc = wi->wi_data;
+        srpc_server_rpc_t *rpc = wi->swi_workitem.wi_data;
         srpc_service_t    *sv = rpc->srpc_service;
         srpc_event_t      *ev = &rpc->srpc_ev;
         int                rc = 0;
 
         LASSERT (wi == &rpc->srpc_wi);
 
-        spin_lock(&sv->sv_lock);
+        cfs_spin_lock(&sv->sv_lock);
 
         if (sv->sv_shuttingdown || rpc->srpc_aborted) {
-                spin_unlock(&sv->sv_lock);
+                cfs_spin_unlock(&sv->sv_lock);
 
                 if (rpc->srpc_bulk != NULL)
                         LNetMDUnlink(rpc->srpc_bulk->bk_mdh);
@@ -846,9 +837,9 @@ srpc_handle_rpc (swi_workitem_t *wi)
                 return 0;
         }
 
-        spin_unlock(&sv->sv_lock);
+        cfs_spin_unlock(&sv->sv_lock);
 
-        switch (wi->wi_state) {
+        switch (wi->swi_state) {
         default:
                 LBUG ();
         case SWI_STATE_NEWBORN: {
@@ -878,7 +869,7 @@ srpc_handle_rpc (swi_workitem_t *wi)
                         return 1;
                 }
 
-                wi->wi_state = SWI_STATE_BULK_STARTED;
+                wi->swi_state = SWI_STATE_BULK_STARTED;
 
                 if (rpc->srpc_bulk != NULL) {
                         rc = srpc_do_bulk(rpc);
@@ -904,7 +895,7 @@ srpc_handle_rpc (swi_workitem_t *wi)
                         }
                 }
 
-                wi->wi_state = SWI_STATE_REPLY_SUBMITTED;
+                wi->swi_state = SWI_STATE_REPLY_SUBMITTED;
                 rc = srpc_send_reply(rpc);
                 if (rc == 0)
                         return 0; /* wait for reply */
@@ -920,7 +911,7 @@ srpc_handle_rpc (swi_workitem_t *wi)
                         LASSERT (ev->ev_fired);
                 }
 
-                wi->wi_state = SWI_STATE_DONE;
+                wi->swi_state = SWI_STATE_DONE;
                 srpc_server_rpc_done(rpc, ev->ev_status);
                 return 1;
         }
@@ -937,16 +928,16 @@ srpc_client_rpc_expired (void *data)
                rpc->crpc_service, libcfs_id2str(rpc->crpc_dest),
                rpc->crpc_timeout);
 
-        spin_lock(&rpc->crpc_lock);
+        cfs_spin_lock(&rpc->crpc_lock);
 
         rpc->crpc_timeout = 0;
         srpc_abort_rpc(rpc, -ETIMEDOUT);
 
-        spin_unlock(&rpc->crpc_lock);
+        cfs_spin_unlock(&rpc->crpc_lock);
 
-        spin_lock(&srpc_data.rpc_glock);
+        cfs_spin_lock(&srpc_data.rpc_glock);
         srpc_data.rpc_counters.rpcs_expired++;
-        spin_unlock(&srpc_data.rpc_glock);
+        cfs_spin_unlock(&srpc_data.rpc_glock);
         return;
 }
 
@@ -983,11 +974,11 @@ srpc_del_client_rpc_timer (srpc_client_rpc_t *rpc)
 #ifdef __KERNEL__
         /* timer detonated, wait for it to explode */
         while (rpc->crpc_timeout != 0) {
-                spin_unlock(&rpc->crpc_lock);
+                cfs_spin_unlock(&rpc->crpc_lock);
 
                 cfs_schedule();
 
-                spin_lock(&rpc->crpc_lock);
+                cfs_spin_lock(&rpc->crpc_lock);
         }
 #else
         LBUG(); /* impossible in single-threaded runtime */
@@ -1000,9 +991,9 @@ srpc_client_rpc_done (srpc_client_rpc_t *rpc, int status)
 {
         swi_workitem_t *wi = &rpc->crpc_wi;
 
-        LASSERT (status != 0 || wi->wi_state == SWI_STATE_DONE);
+        LASSERT (status != 0 || wi->swi_state == SWI_STATE_DONE);
 
-        spin_lock(&rpc->crpc_lock);
+        cfs_spin_lock(&rpc->crpc_lock);
 
         rpc->crpc_closed = 1;
         if (rpc->crpc_status == 0)
@@ -1010,10 +1001,10 @@ srpc_client_rpc_done (srpc_client_rpc_t *rpc, int status)
 
         srpc_del_client_rpc_timer(rpc);
 
-        CDEBUG ((status == 0) ? D_NET : D_NETERROR,
+        CDEBUG_LIMIT ((status == 0) ? D_NET : D_NETERROR,
                 "Client RPC done: service %d, peer %s, status %s:%d:%d\n",
                 rpc->crpc_service, libcfs_id2str(rpc->crpc_dest),
-                swi_state2str(wi->wi_state), rpc->crpc_aborted, status);
+                swi_state2str(wi->swi_state), rpc->crpc_aborted, status);
 
         /*
          * No one can schedule me now since:
@@ -1026,7 +1017,7 @@ srpc_client_rpc_done (srpc_client_rpc_t *rpc, int status)
         LASSERT (!srpc_event_pending(rpc));
         swi_kill_workitem(wi);
 
-        spin_unlock(&rpc->crpc_lock);
+        cfs_spin_unlock(&rpc->crpc_lock);
 
         (*rpc->crpc_done) (rpc);
         return;
@@ -1037,23 +1028,23 @@ int
 srpc_send_rpc (swi_workitem_t *wi)
 {
         int                rc = 0;
-        srpc_client_rpc_t *rpc = wi->wi_data;
+        srpc_client_rpc_t *rpc = wi->swi_workitem.wi_data;
         srpc_msg_t        *reply = &rpc->crpc_replymsg;
         int                do_bulk = rpc->crpc_bulk.bk_niov > 0;
 
         LASSERT (rpc != NULL);
         LASSERT (wi == &rpc->crpc_wi);
 
-        spin_lock(&rpc->crpc_lock);
+        cfs_spin_lock(&rpc->crpc_lock);
 
         if (rpc->crpc_aborted) {
-                spin_unlock(&rpc->crpc_lock);
+                cfs_spin_unlock(&rpc->crpc_lock);
                 goto abort;
         }
 
-        spin_unlock(&rpc->crpc_lock);
+        cfs_spin_unlock(&rpc->crpc_lock);
 
-        switch (wi->wi_state) {
+        switch (wi->swi_state) {
         default:
                 LBUG ();
         case SWI_STATE_NEWBORN:
@@ -1068,7 +1059,7 @@ srpc_send_rpc (swi_workitem_t *wi)
                 rc = srpc_prepare_bulk(rpc);
                 if (rc != 0) break;
 
-                wi->wi_state = SWI_STATE_REQUEST_SUBMITTED;
+                wi->swi_state = SWI_STATE_REQUEST_SUBMITTED;
                 rc = srpc_send_request(rpc);
                 break;
 
@@ -1081,7 +1072,7 @@ srpc_send_rpc (swi_workitem_t *wi)
                 rc = rpc->crpc_reqstev.ev_status;
                 if (rc != 0) break;
 
-                wi->wi_state = SWI_STATE_REQUEST_SENT;
+                wi->swi_state = SWI_STATE_REQUEST_SENT;
                 /* perhaps more events, fall thru */
         case SWI_STATE_REQUEST_SENT: {
                 srpc_msg_type_t type = srpc_service2reply(rpc->crpc_service);
@@ -1112,7 +1103,7 @@ srpc_send_rpc (swi_workitem_t *wi)
                         LNetMDUnlink(rpc->crpc_bulk.bk_mdh);
                 }
 
-                wi->wi_state = SWI_STATE_REPLY_RECEIVED;
+                wi->swi_state = SWI_STATE_REPLY_RECEIVED;
         }
         case SWI_STATE_REPLY_RECEIVED:
                 if (do_bulk && !rpc->crpc_bulkev.ev_fired) break;
@@ -1127,15 +1118,15 @@ srpc_send_rpc (swi_workitem_t *wi)
                     rpc->crpc_status == 0 && reply->msg_body.reply.status != 0)
                         rc = 0;
 
-                wi->wi_state = SWI_STATE_DONE;
+                wi->swi_state = SWI_STATE_DONE;
                 srpc_client_rpc_done(rpc, rc);
                 return 1;
         }
 
         if (rc != 0) {
-                spin_lock(&rpc->crpc_lock);
+                cfs_spin_lock(&rpc->crpc_lock);
                 srpc_abort_rpc(rpc, rc);
-                spin_unlock(&rpc->crpc_lock);
+                cfs_spin_unlock(&rpc->crpc_lock);
         }
 
 abort:
@@ -1183,7 +1174,7 @@ srpc_abort_rpc (srpc_client_rpc_t *rpc, int why)
         CDEBUG (D_NET,
                 "Aborting RPC: service %d, peer %s, state %s, why %d\n",
                 rpc->crpc_service, libcfs_id2str(rpc->crpc_dest),
-                swi_state2str(rpc->crpc_wi.wi_state), why);
+                swi_state2str(rpc->crpc_wi.swi_state), why);
 
         rpc->crpc_aborted = 1;
         rpc->crpc_status  = why;
@@ -1222,7 +1213,7 @@ srpc_send_reply (srpc_server_rpc_t *rpc)
         LASSERT (buffer != NULL);
         rpyid = buffer->buf_msg.msg_body.reqst.rpyid;
 
-        spin_lock(&sv->sv_lock);
+        cfs_spin_lock(&sv->sv_lock);
 
         if (!sv->sv_shuttingdown &&
             sv->sv_id > SRPC_FRAMEWORK_SERVICE_MAX_ID) {
@@ -1233,7 +1224,7 @@ srpc_send_reply (srpc_server_rpc_t *rpc)
                 rpc->srpc_reqstbuf = NULL;
         }
 
-        spin_unlock(&sv->sv_lock);
+        cfs_spin_unlock(&sv->sv_lock);
 
         ev->ev_fired = 0;
         ev->ev_data  = rpc;
@@ -1264,12 +1255,12 @@ srpc_lnet_ev_handler (lnet_event_t *ev)
         srpc_msg_t        *msg;
         srpc_msg_type_t    type;
 
-        LASSERT (!in_interrupt());
+        LASSERT (!cfs_in_interrupt());
 
         if (ev->status != 0) {
-                spin_lock(&srpc_data.rpc_glock);
+                cfs_spin_lock(&srpc_data.rpc_glock);
                 srpc_data.rpc_counters.errors++;
-                spin_unlock(&srpc_data.rpc_glock);
+                cfs_spin_unlock(&srpc_data.rpc_glock);
         }
 
         rpcev->ev_lnet = ev->type;
@@ -1281,9 +1272,9 @@ srpc_lnet_ev_handler (lnet_event_t *ev)
                 LBUG ();
         case SRPC_REQUEST_SENT:
                 if (ev->status == 0 && ev->type != LNET_EVENT_UNLINK) {
-                        spin_lock(&srpc_data.rpc_glock);
+                        cfs_spin_lock(&srpc_data.rpc_glock);
                         srpc_data.rpc_counters.rpcs_sent++;
-                        spin_unlock(&srpc_data.rpc_glock);
+                        cfs_spin_unlock(&srpc_data.rpc_glock);
                 }
         case SRPC_REPLY_RCVD:
         case SRPC_BULK_REQ_RCVD:
@@ -1300,7 +1291,7 @@ srpc_lnet_ev_handler (lnet_event_t *ev)
                         LBUG ();
                 }
 
-                spin_lock(&crpc->crpc_lock);
+                cfs_spin_lock(&crpc->crpc_lock);
 
                 LASSERT (rpcev->ev_fired == 0);
                 rpcev->ev_fired  = 1;
@@ -1308,7 +1299,7 @@ srpc_lnet_ev_handler (lnet_event_t *ev)
                                                 -EINTR : ev->status;
                 swi_schedule_workitem(&crpc->crpc_wi);
 
-                spin_unlock(&crpc->crpc_lock);
+                cfs_spin_unlock(&crpc->crpc_lock);
                 break;
 
         case SRPC_REQUEST_RCVD:
@@ -1316,7 +1307,7 @@ srpc_lnet_ev_handler (lnet_event_t *ev)
 
                 LASSERT (rpcev == &sv->sv_ev);
 
-                spin_lock(&sv->sv_lock);
+                cfs_spin_lock(&sv->sv_lock);
 
                 LASSERT (ev->unlinked);
                 LASSERT (ev->type == LNET_EVENT_PUT ||
@@ -1334,11 +1325,11 @@ srpc_lnet_ev_handler (lnet_event_t *ev)
                 if (sv->sv_shuttingdown) {
                         /* Leave buffer on sv->sv_posted_msgq since
                          * srpc_finish_service needs to traverse it. */
-                        spin_unlock(&sv->sv_lock);
+                        cfs_spin_unlock(&sv->sv_lock);
                         break;
                 }
 
-                list_del(&buffer->buf_list); /* from sv->sv_posted_msgq */
+                cfs_list_del(&buffer->buf_list); /* from sv->sv_posted_msgq */
                 msg = &buffer->buf_msg;
                 type = srpc_service2request(sv->sv_id);
 
@@ -1359,23 +1350,25 @@ srpc_lnet_ev_handler (lnet_event_t *ev)
                         msg->msg_magic = 0;
                 }
 
-                if (!list_empty(&sv->sv_free_rpcq)) {
-                        srpc = list_entry(sv->sv_free_rpcq.next,
-                                          srpc_server_rpc_t, srpc_list);
-                        list_del(&srpc->srpc_list);
+                if (!cfs_list_empty(&sv->sv_free_rpcq)) {
+                        srpc = cfs_list_entry(sv->sv_free_rpcq.next,
+                                              srpc_server_rpc_t, srpc_list);
+                        cfs_list_del(&srpc->srpc_list);
 
                         srpc_init_server_rpc(srpc, sv, buffer);
-                        list_add_tail(&srpc->srpc_list, &sv->sv_active_rpcq);
+                        cfs_list_add_tail(&srpc->srpc_list,
+                                          &sv->sv_active_rpcq);
                         srpc_schedule_server_rpc(srpc);
                 } else {
-                        list_add_tail(&buffer->buf_list, &sv->sv_blocked_msgq);
+                        cfs_list_add_tail(&buffer->buf_list,
+                                          &sv->sv_blocked_msgq);
                 }
 
-                spin_unlock(&sv->sv_lock);
+                cfs_spin_unlock(&sv->sv_lock);
 
-                spin_lock(&srpc_data.rpc_glock);
+                cfs_spin_lock(&srpc_data.rpc_glock);
                 srpc_data.rpc_counters.rpcs_rcvd++;
-                spin_unlock(&srpc_data.rpc_glock);
+                cfs_spin_unlock(&srpc_data.rpc_glock);
                 break;
 
         case SRPC_BULK_GET_RPLD:
@@ -1388,14 +1381,14 @@ srpc_lnet_ev_handler (lnet_event_t *ev)
 
         case SRPC_BULK_PUT_SENT:
                 if (ev->status == 0 && ev->type != LNET_EVENT_UNLINK) {
-                        spin_lock(&srpc_data.rpc_glock);
+                        cfs_spin_lock(&srpc_data.rpc_glock);
 
                         if (rpcev->ev_type == SRPC_BULK_GET_RPLD)
                                 srpc_data.rpc_counters.bulk_get += ev->mlength;
                         else
                                 srpc_data.rpc_counters.bulk_put += ev->mlength;
 
-                        spin_unlock(&srpc_data.rpc_glock);
+                        cfs_spin_unlock(&srpc_data.rpc_glock);
                 }
         case SRPC_REPLY_SENT:
                 srpc = rpcev->ev_data;
@@ -1403,14 +1396,14 @@ srpc_lnet_ev_handler (lnet_event_t *ev)
 
                 LASSERT (rpcev == &srpc->srpc_ev);
 
-                spin_lock(&sv->sv_lock);
+                cfs_spin_lock(&sv->sv_lock);
 
                 rpcev->ev_fired  = 1;
                 rpcev->ev_status = (ev->type == LNET_EVENT_UNLINK) ?
                                                 -EINTR : ev->status;
                 srpc_schedule_server_rpc(srpc);
 
-                spin_unlock(&sv->sv_lock);
+                cfs_spin_unlock(&sv->sv_lock);
                 break;
         }
 
@@ -1450,7 +1443,7 @@ srpc_startup (void)
         int rc;
 
         memset(&srpc_data, 0, sizeof(struct smoketest_rpc));
-        spin_lock_init(&srpc_data.rpc_glock);
+        cfs_spin_lock_init(&srpc_data.rpc_glock);
 
         /* 1 second pause to avoid timestamp reuse */
         cfs_pause(cfs_time_seconds(1));
@@ -1475,7 +1468,7 @@ srpc_startup (void)
 
         LNetInvalidateHandle(&srpc_data.rpc_lnet_eq);
 #ifdef __KERNEL__
-        rc = LNetEQAlloc(16, srpc_lnet_ev_handler, &srpc_data.rpc_lnet_eq);
+       rc = LNetEQAlloc(0, srpc_lnet_ev_handler, &srpc_data.rpc_lnet_eq);
 #else
         rc = LNetEQAlloc(10240, LNET_EQ_HANDLER_NONE, &srpc_data.rpc_lnet_eq);
 #endif
@@ -1489,12 +1482,6 @@ srpc_startup (void)
 
         srpc_data.rpc_state = SRPC_STATE_EQ_INIT;
 
-        rc = swi_startup();
-        if (rc != 0)
-                goto bail;
-
-        srpc_data.rpc_state = SRPC_STATE_WI_INIT;
-
         rc = stt_startup();
 
 bail:
@@ -1520,7 +1507,7 @@ srpc_shutdown (void)
         default:
                 LBUG ();
         case SRPC_STATE_RUNNING:
-                spin_lock(&srpc_data.rpc_glock);
+                cfs_spin_lock(&srpc_data.rpc_glock);
 
                 for (i = 0; i <= SRPC_SERVICE_MAX_ID; i++) {
                         srpc_service_t *sv = srpc_data.rpc_services[i];
@@ -1530,13 +1517,10 @@ srpc_shutdown (void)
                                   i, sv->sv_name);
                 }
 
-                spin_unlock(&srpc_data.rpc_glock);
+                cfs_spin_unlock(&srpc_data.rpc_glock);
 
                 stt_shutdown();
 
-        case SRPC_STATE_WI_INIT:
-                swi_shutdown();
-
         case SRPC_STATE_EQ_INIT:
                 rc = LNetClearLazyPortal(SRPC_FRAMEWORK_REQUEST_PORTAL);
                 LASSERT (rc == 0);