diff options
-rw-r--r-- | drivers/net/team/team.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 60672bb09960..e5390c73a75d 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -1043,8 +1043,7 @@ err_msg_put: | |||
1043 | 1043 | ||
1044 | /* | 1044 | /* |
1045 | * Netlink cmd functions should be locked by following two functions. | 1045 | * Netlink cmd functions should be locked by following two functions. |
1046 | * To ensure team_uninit would not be called in between, hold rcu_read_lock | 1046 | * Since dev gets held here, that ensures dev won't disappear in between. |
1047 | * all the time. | ||
1048 | */ | 1047 | */ |
1049 | static struct team *team_nl_team_get(struct genl_info *info) | 1048 | static struct team *team_nl_team_get(struct genl_info *info) |
1050 | { | 1049 | { |
@@ -1057,10 +1056,10 @@ static struct team *team_nl_team_get(struct genl_info *info) | |||
1057 | return NULL; | 1056 | return NULL; |
1058 | 1057 | ||
1059 | ifindex = nla_get_u32(info->attrs[TEAM_ATTR_TEAM_IFINDEX]); | 1058 | ifindex = nla_get_u32(info->attrs[TEAM_ATTR_TEAM_IFINDEX]); |
1060 | rcu_read_lock(); | 1059 | dev = dev_get_by_index(net, ifindex); |
1061 | dev = dev_get_by_index_rcu(net, ifindex); | ||
1062 | if (!dev || dev->netdev_ops != &team_netdev_ops) { | 1060 | if (!dev || dev->netdev_ops != &team_netdev_ops) { |
1063 | rcu_read_unlock(); | 1061 | if (dev) |
1062 | dev_put(dev); | ||
1064 | return NULL; | 1063 | return NULL; |
1065 | } | 1064 | } |
1066 | 1065 | ||
@@ -1072,7 +1071,7 @@ static struct team *team_nl_team_get(struct genl_info *info) | |||
1072 | static void team_nl_team_put(struct team *team) | 1071 | static void team_nl_team_put(struct team *team) |
1073 | { | 1072 | { |
1074 | spin_unlock(&team->lock); | 1073 | spin_unlock(&team->lock); |
1075 | rcu_read_unlock(); | 1074 | dev_put(team->dev); |
1076 | } | 1075 | } |
1077 | 1076 | ||
1078 | static int team_nl_send_generic(struct genl_info *info, struct team *team, | 1077 | static int team_nl_send_generic(struct genl_info *info, struct team *team, |