[ovs-dev] [PATCH V3] ofproto-dpif-monitor: Fix deadlock.
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
> 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