[ovs-dev] [PATCH V3] ofproto-dpif-monitor: Fix deadlock.

Alex Wang alexw at nicira.com
Fri May 2 20:01:23 UTC 2014


Thanks for the review,

Tested again and applied to master, branch-2.2


On Thu, May 1, 2014 at 8:36 AM, Ben Pfaff <blp at nicira.com> wrote:

> On Tue, Apr 29, 2014 at 11:06:29AM -0700, Alex Wang wrote:
> > Commit 6b59b543 (ovs-thread: Use fair (but nonrecursive)
> > rwlocks on glibc.) changed the rwlocks to nonrecursive,
> > writer-biased lock.  It also made the following deadlock
> > possible.
> >
> > Assume BFD is used on both end of a link.  Consider the
> > following events:
> > 1. Handler at one end received the BFD control packet with
> >    POLL flag set while holding the read lock of 'xlate_rwlock'.
> >    Since a BFD control packet with FINAL flag set should be
> >    sent back immediately, it calls the
> >    ofproto_dpif_monitor_port_send_soon(), in which, it tries
> >    to grab the 'monitor_mutex'.
> > 2. The main thread needs to configure the ofproto-dpif-xlate
> >    module.  It tries to grab the write lock of 'xlate_rwlock'
> >    and is blocked by event 1.
> > 3. The monitor thread, after acquired the 'monitor_mutex',
> >    wants to acquire the read lock of 'xlate_rwlock'.
> >
> > Since the rwlock is now writer-biased, the attempt of acquiring
> > read lock in event 3 will be blocked by event 2.  This will
> > subsequently cause the block of event 1, since monitor thread
> > is holding the 'monitor_mutex'.  So the deadlock happens.
> >
> > This commit resolves the above issue by removing the requirement of
> > acquiring 'monitor_mutex' in ofproto_dpif_monitor_port_send_soon().
> >
> > Signed-off-by: Alex Wang <alexw at nicira.com>
>
> Acked-by: Ben Pfaff <blp at nicira.com>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20140502/d43255c6/attachment-0005.html>


More information about the dev mailing list