* node traffic on multi-node NUMA NFS servers.
  */
 struct svc_pool {
-       unsigned int            sp_id;          /* pool id; also node id on NUMA */
+       unsigned int            sp_id;          /* pool id; also node id on NUMA */
        struct lwq              sp_xprts;       /* pending transports */
-       atomic_t                sp_nrthreads;   /* # of threads in pool */
+       unsigned int            sp_nrthreads;   /* # of threads in pool */
        struct list_head        sp_all_threads; /* all server threads */
        struct llist_head       sp_idle_threads; /* idle server threads */
 
 
        serv->sv_nrthreads += 1;
        spin_unlock_bh(&serv->sv_lock);
 
-       atomic_inc(&pool->sp_nrthreads);
+       pool->sp_nrthreads += 1;
 
        /* Protected by whatever lock the service uses when calling
         * svc_set_num_threads()
        struct svc_pool *pool;
        unsigned int i;
 
-retry:
        pool = target_pool;
 
-       if (pool != NULL) {
-               if (atomic_inc_not_zero(&pool->sp_nrthreads))
-                       goto found_pool;
-               return NULL;
-       } else {
+       if (!pool) {
                for (i = 0; i < serv->sv_nrpools; i++) {
                        pool = &serv->sv_pools[--(*state) % serv->sv_nrpools];
-                       if (atomic_inc_not_zero(&pool->sp_nrthreads))
-                               goto found_pool;
+                       if (pool->sp_nrthreads)
+                               break;
                }
-               return NULL;
        }
 
-found_pool:
-       set_bit(SP_VICTIM_REMAINS, &pool->sp_flags);
-       set_bit(SP_NEED_VICTIM, &pool->sp_flags);
-       if (!atomic_dec_and_test(&pool->sp_nrthreads))
+       if (pool && pool->sp_nrthreads) {
+               set_bit(SP_VICTIM_REMAINS, &pool->sp_flags);
+               set_bit(SP_NEED_VICTIM, &pool->sp_flags);
                return pool;
-       /* Nothing left in this pool any more */
-       clear_bit(SP_NEED_VICTIM, &pool->sp_flags);
-       clear_bit(SP_VICTIM_REMAINS, &pool->sp_flags);
-       goto retry;
+       }
+       return NULL;
 }
 
 static int
        if (!pool)
                nrservs -= serv->sv_nrthreads;
        else
-               nrservs -= atomic_read(&pool->sp_nrthreads);
+               nrservs -= pool->sp_nrthreads;
 
        if (nrservs > 0)
                return svc_start_kthreads(serv, pool, nrservs);
 
        list_del_rcu(&rqstp->rq_all);
 
-       atomic_dec(&pool->sp_nrthreads);
+       pool->sp_nrthreads -= 1;
 
        spin_lock_bh(&serv->sv_lock);
        serv->sv_nrthreads -= 1;