Message ID | 1321477749-1877-2-git-send-email-jpirko@redhat.com |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
Le mercredi 16 novembre 2011 à 22:09 +0100, Jiri Pirko a écrit : > Signed-off-by: Jiri Pirko <jpirko@redhat.com> > --- > drivers/net/team/team.c | 12 ++++-------- > 1 files changed, 4 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c > index 60672bb..e0cf11c 100644 > --- a/drivers/net/team/team.c > +++ b/drivers/net/team/team.c > @@ -1043,8 +1043,7 @@ err_msg_put: > > /* > * Netlink cmd functions should be locked by following two functions. > - * To ensure team_uninit would not be called in between, hold rcu_read_lock > - * all the time. > + * Since dev gets held here, that ensures dev won't disappear in between. > */ > static struct team *team_nl_team_get(struct genl_info *info) > { > @@ -1057,12 +1056,9 @@ static struct team *team_nl_team_get(struct genl_info *info) > return NULL; > > ifindex = nla_get_u32(info->attrs[TEAM_ATTR_TEAM_IFINDEX]); > - rcu_read_lock(); > - dev = dev_get_by_index_rcu(net, ifindex); > - if (!dev || dev->netdev_ops != &team_netdev_ops) { > - rcu_read_unlock(); > + dev = dev_get_by_index(net, ifindex); > + if (!dev || dev->netdev_ops != &team_netdev_ops) Hmmm, you return NULL but dev refcnt was increased... > return NULL; > - } > > team = netdev_priv(dev); > spin_lock(&team->lock); > @@ -1072,7 +1068,7 @@ static struct team *team_nl_team_get(struct genl_info *info) > static void team_nl_team_put(struct team *team) > { > spin_unlock(&team->lock); > - rcu_read_unlock(); > + dev_put(team->dev); > } > > static int team_nl_send_generic(struct genl_info *info, struct team *team, -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 60672bb..e0cf11c 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c @@ -1043,8 +1043,7 @@ err_msg_put: /* * Netlink cmd functions should be locked by following two functions. - * To ensure team_uninit would not be called in between, hold rcu_read_lock - * all the time. + * Since dev gets held here, that ensures dev won't disappear in between. */ static struct team *team_nl_team_get(struct genl_info *info) { @@ -1057,12 +1056,9 @@ static struct team *team_nl_team_get(struct genl_info *info) return NULL; ifindex = nla_get_u32(info->attrs[TEAM_ATTR_TEAM_IFINDEX]); - rcu_read_lock(); - dev = dev_get_by_index_rcu(net, ifindex); - if (!dev || dev->netdev_ops != &team_netdev_ops) { - rcu_read_unlock(); + dev = dev_get_by_index(net, ifindex); + if (!dev || dev->netdev_ops != &team_netdev_ops) return NULL; - } team = netdev_priv(dev); spin_lock(&team->lock); @@ -1072,7 +1068,7 @@ static struct team *team_nl_team_get(struct genl_info *info) static void team_nl_team_put(struct team *team) { spin_unlock(&team->lock); - rcu_read_unlock(); + dev_put(team->dev); } static int team_nl_send_generic(struct genl_info *info, struct team *team,
Signed-off-by: Jiri Pirko <jpirko@redhat.com> --- drivers/net/team/team.c | 12 ++++-------- 1 files changed, 4 insertions(+), 8 deletions(-)