Commit 3f3e7ce4 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller

team: fix port list dump for big number of ports

In case the port list dump does not fit into one skb currently the
dump would start over again. Fix this by continue from the last dumped
port.

Introduced by commit d90f889e (team: handle sending port list in the
same way option list is sent)
Signed-off-by: default avatarJiri Pirko <jiri@resnulli.us>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6d7581e6
...@@ -2374,7 +2374,8 @@ static int team_nl_send_port_list_get(struct team *team, u32 portid, u32 seq, ...@@ -2374,7 +2374,8 @@ static int team_nl_send_port_list_get(struct team *team, u32 portid, u32 seq,
bool incomplete; bool incomplete;
int i; int i;
port = list_first_entry(&team->port_list, struct team_port, list); port = list_first_entry_or_null(&team->port_list,
struct team_port, list);
start_again: start_again:
err = __send_and_alloc_skb(&skb, team, portid, send_func); err = __send_and_alloc_skb(&skb, team, portid, send_func);
...@@ -2402,8 +2403,8 @@ static int team_nl_send_port_list_get(struct team *team, u32 portid, u32 seq, ...@@ -2402,8 +2403,8 @@ static int team_nl_send_port_list_get(struct team *team, u32 portid, u32 seq,
err = team_nl_fill_one_port_get(skb, one_port); err = team_nl_fill_one_port_get(skb, one_port);
if (err) if (err)
goto errout; goto errout;
} else { } else if (port) {
list_for_each_entry(port, &team->port_list, list) { list_for_each_entry_from(port, &team->port_list, list) {
err = team_nl_fill_one_port_get(skb, port); err = team_nl_fill_one_port_get(skb, port);
if (err) { if (err) {
if (err == -EMSGSIZE) { if (err == -EMSGSIZE) {
......
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