Ok Andrew, here is draft3 of my patch. This patch contains fixes for the following items: 1. Removed typecasting when assigning to and from void *. 2. Corrected spin_lock_irqsave() invocation before return to prevent deadlock (It was supposed to be spin_unlock_irqrestore()). I verified that this problem doesn't exist elsewhere. 3. Added locking for hvcs_structs which prevents hvcs_struct removal while the list is being traversed. This was easy and took five minutes. 4. Got rid of deamonize() and manual kernel thread invocation & handling and replaced it with kthread_run(). 5. Replaced relevant wake_up_interruptible() instances with wake_up_process(). 6. Removed explicit wait_queue initialization because it isn't needed with kthreads. 7. Removed in-kernel IPC for khvcsd termination and replaced with kthread_stop() and kthread_should_stop(). This also resulted in the removal of the wait for completion code. 8. Minor bug fix to preserve context of partner info hvcs_struct data for use in printk on object removal. This postponed the clearing of the partner info until hvcs_struct removal which is the proper place for the clearing of that data anyway. 9. Gave khvcsd() static scope. Thanks for the kthread suggestions. The kthread API is awesome. My stress tests seem to be going very well. So, if you don't have any more comments.... Ryan S. Arnold IBM Linux Technology Center