diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c index da0d7c54d3529b6ae2ada3d61fe3c2e7b3015307..b49f421346a738eb93d423e57939955ea615d658 100644 --- a/drivers/net/bonding/bond_3ad.c +++ b/drivers/net/bonding/bond_3ad.c @@ -143,11 +143,13 @@ static inline struct bonding *__get_bond_by_port(struct port *port) * * Return the aggregator of the first slave in @bond, or %NULL if it can't be * found. + * The caller must hold RCU or RTNL lock. */ static inline struct aggregator *__get_first_agg(struct port *port) { struct bonding *bond = __get_bond_by_port(port); struct slave *first_slave; + struct aggregator *agg; /* If there's no bond for this port, or bond has no slaves */ if (bond == NULL) @@ -155,9 +157,10 @@ static inline struct aggregator *__get_first_agg(struct port *port) rcu_read_lock(); first_slave = bond_first_slave_rcu(bond); + agg = first_slave ? &(SLAVE_AD_INFO(first_slave).aggregator) : NULL; rcu_read_unlock(); - return first_slave ? &(SLAVE_AD_INFO(first_slave).aggregator) : NULL; + return agg; } /**