I would like to queue up multiple struct task_structs in my block device driver. Here, each task_struct would correspond to a userlevel thread which uses the ioctl() system call to send a userspace buffer to my block device driver. Once I queue up multiple task_structs, I would like to keep them on the queue until a particular condition is met (i.e., the buffer has been written down to the disk).
So, my question is, how do I queue up multiple task_structs, put them to sleep, and then wake a subset of the queued task_structs when some condition is met?
You can call
kthread_createas many times as you want to create new threads, and then callwake_upon whatever subset of threads you want.