/* statistics for svc_pool structures */
 struct svc_pool_stats {
-       unsigned long   packets;
+       atomic_long_t   packets;
        unsigned long   sockets_queued;
-       unsigned long   threads_woken;
-       unsigned long   threads_timedout;
+       atomic_long_t   threads_woken;
+       atomic_long_t   threads_timedout;
 };
 
 /*
 
        pool = svc_pool_for_cpu(xprt->xpt_server, cpu);
        spin_lock_bh(&pool->sp_lock);
 
-       pool->sp_stats.packets++;
+       atomic_long_inc(&pool->sp_stats.packets);
 
        if (!list_empty(&pool->sp_threads)) {
                rqstp = list_entry(pool->sp_threads.next,
                svc_xprt_get(xprt);
                wake_up_process(rqstp->rq_task);
                rqstp->rq_xprt = xprt;
-               pool->sp_stats.threads_woken++;
+               atomic_long_inc(&pool->sp_stats.threads_woken);
        } else {
                dprintk("svc: transport %p put into queue\n", xprt);
                list_add_tail(&xprt->xpt_ready, &pool->sp_sockets);
 
                spin_lock_bh(&pool->sp_lock);
                if (!time_left)
-                       pool->sp_stats.threads_timedout++;
+                       atomic_long_inc(&pool->sp_stats.threads_timedout);
 
                xprt = rqstp->rq_xprt;
                if (!xprt) {
 
        seq_printf(m, "%u %lu %lu %lu %lu\n",
                pool->sp_id,
-               pool->sp_stats.packets,
+               (unsigned long)atomic_long_read(&pool->sp_stats.packets),
                pool->sp_stats.sockets_queued,
-               pool->sp_stats.threads_woken,
-               pool->sp_stats.threads_timedout);
+               (unsigned long)atomic_long_read(&pool->sp_stats.threads_woken),
+               (unsigned long)atomic_long_read(&pool->sp_stats.threads_timedout));
 
        return 0;
 }