On Wed, May 16, 2012 at 03:37:56PM -0400, chetan loke wrote: > On Wed, May 16, 2012 at 3:35 PM, Matthew Wilcox <willy@xxxxxxxxxxxxxxx> wrote: > > On Wed, May 16, 2012 at 03:31:55PM -0400, chetan loke wrote: > >> > + if (list_empty(&ram_device->commands)) > >> > + wake_up_process(ram_device->thread); > >> > >> Didn't look in detail but if the queue is empty then why would you > >> want to wake up the kthread? What if you just wake_up after > >> list_add_tail below? > > > > If the list is non-empty, then the kthread has already been woken up > > and doesn't need to be woken again. > > Sorry, not able to follow. wait_even_interruptible will put kthread to > sleep. So how will it be already awake? Consider the following: CPU 0 CPU 1 ->queuecommand lock wakes kthread queues command 1 unlock ->queuecommand lock kthread wakes lock queues command 2 unlock dequeues command 1 dequeues command 2 unlock See? No need to wake the kthread *if there's already something on the queue*, because you know it was already woken by whoever put the first command on the queue. -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html