Commit 2bf86b7a authored by Jay Vosburgh's avatar Jay Vosburgh Committed by Jeff Garzik

bonding: Fix locking in 802.3ad mode

	The 802.3ad state machine lock can be acquired in both softirq and
not softirq context, but was not held at _bh to prevent a deadlock (which
could occur if a LACPDU arrived and was processed while the lock was
held).

	Corrected this, now hold the state machine lock at _bh to prevent
deadlock.

	Bug reported by Todd Fleisher <todd@fleish.org>.
Signed-off-by: default avatarJay Vosburgh <fubar@us.ibm.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 26c080bf
...@@ -310,7 +310,7 @@ static inline int __check_agg_selection_timer(struct port *port) ...@@ -310,7 +310,7 @@ static inline int __check_agg_selection_timer(struct port *port)
*/ */
static inline void __get_rx_machine_lock(struct port *port) static inline void __get_rx_machine_lock(struct port *port)
{ {
spin_lock(&(SLAVE_AD_INFO(port->slave).rx_machine_lock)); spin_lock_bh(&(SLAVE_AD_INFO(port->slave).rx_machine_lock));
} }
/** /**
...@@ -320,7 +320,7 @@ static inline void __get_rx_machine_lock(struct port *port) ...@@ -320,7 +320,7 @@ static inline void __get_rx_machine_lock(struct port *port)
*/ */
static inline void __release_rx_machine_lock(struct port *port) static inline void __release_rx_machine_lock(struct port *port)
{ {
spin_unlock(&(SLAVE_AD_INFO(port->slave).rx_machine_lock)); spin_unlock_bh(&(SLAVE_AD_INFO(port->slave).rx_machine_lock));
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment