mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* deadlock in epoll (found by lockdep)
@ 2006-06-01  8:45 Arjan van de Ven
  2006-06-01 13:27 ` Arjan van de Ven
  2006-06-01 15:52 ` Davide Libenzi
  0 siblings, 2 replies; 3+ messages in thread
From: Arjan van de Ven @ 2006-06-01  8:45 UTC (permalink / raw)
  To: davidel, linux-kernel; +Cc: akpm, mingo

Hi,

in ep_poll() (fs/eventpoll.c) the code does

       write_lock_irqsave(&ep->lock, flags);

        res = 0;
        if (list_empty(&ep->rdllist)) {
                /*
                 * We don't have any available event to return to the caller.
                 * We need to sleep here, and we will be wake up by
                 * ep_poll_callback() when events will become available.
                 */
                init_waitqueue_entry(&wait, current);
                add_wait_queue(&ep->wq, &wait);

eg we first take ep->lock and then call add_wait_queue which takes 
         spin_lock_irqsave(&q->lock, flags);
for obvious reasons.
this would mean that ep->lock would be the outer lock, and q->lock the
inner lock.


HOWEVER, __wake_up does this:
void fastcall __wake_up(wait_queue_head_t *q, unsigned int mode,
                        int nr_exclusive, void *key)
{
        unsigned long flags;

        spin_lock_irqsave(&q->lock, flags);
        __wake_up_common(q, mode, nr_exclusive, 0, key);
        spin_unlock_irqrestore(&q->lock, flags);
}

where __wake_up_common calls into ep_poll_callback, which in term does
        write_lock_irqsave(&ep->lock, flags);
as one of the first things.

... which implies that q->lock is the outer lock, and ep->lock is the
inner lock.... 

can you explain which order is right, and if/why this is not an AB-BA
deadlock??

Greetings,
   Arjan van de Ven


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-06-01 15:53 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-06-01  8:45 deadlock in epoll (found by lockdep) Arjan van de Ven
2006-06-01 13:27 ` Arjan van de Ven
2006-06-01 15:52 ` Davide Libenzi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®