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 <al...@nicira.com>
Acked-by: Ben Pfaff <b...@nicira.com> _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev