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

Ben Pfaff blp at nicira.com
Thu May 1 15:36:28 UTC 2014


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>



More information about the dev mailing list