This series is against topic-sunrpc-thread-scheduling (7fddd9be200c). There are two changes since last post (other than dropping patches that have been included in the topic branch. 1/ When I dropped the test on freezing(current), need needed to add TASK_FREEZABLE to the wait state. I could keep testing freezing(current) before calling schedule, but TASK_FREEZABLE is cleaner and seems to be prefered ... except ... /proc/PID/stat reports a status for "D" for tasks that are TASK_IDLE | TASK_FREEZABLE instead of the correct "I". I've included a fix for that in the relevant patch. I should probably post is separately to the scheduler team. 2/ There was a bug in lwq_dequeue(). It tested lwq_empty() without taking the spinlock. This could result in call-positive results if it raced with another lwq_dequeue(). So lwq_dequeue() now ensure the queue never looks transiently empty. lwq_empty() is also more careful about memory ordering. NeilBrown [PATCH 1/7] SUNRPC: change service idle list to be an llist [PATCH 2/7] SUNRPC: only have one thread waking up at a time [PATCH 3/7] SUNRPC/svc: add light-weight queuing mechanism. [PATCH 4/7] SUNRPC: use lwq for sp_sockets - renamed to sp_xprts [PATCH 5/7] SUNRPC: change sp_nrthreads to atomic_t [PATCH 6/7] SUNRPC: discard sp_lock [PATCH 7/7] SUNRPC: change the back-channel queue to lwq