diff options
Diffstat (limited to 'net/ipv4/fib_trie.c')
-rw-r--r-- | net/ipv4/fib_trie.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index 1201409ba1dc..51182ff2b441 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c | |||
@@ -1983,6 +1983,8 @@ static int fn_trie_dump_leaf(struct key_vector *l, struct fib_table *tb, | |||
1983 | 1983 | ||
1984 | /* rcu_read_lock is hold by caller */ | 1984 | /* rcu_read_lock is hold by caller */ |
1985 | hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { | 1985 | hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { |
1986 | int err; | ||
1987 | |||
1986 | if (i < s_i) { | 1988 | if (i < s_i) { |
1987 | i++; | 1989 | i++; |
1988 | continue; | 1990 | continue; |
@@ -1993,17 +1995,14 @@ static int fn_trie_dump_leaf(struct key_vector *l, struct fib_table *tb, | |||
1993 | continue; | 1995 | continue; |
1994 | } | 1996 | } |
1995 | 1997 | ||
1996 | if (fib_dump_info(skb, NETLINK_CB(cb->skb).portid, | 1998 | err = fib_dump_info(skb, NETLINK_CB(cb->skb).portid, |
1997 | cb->nlh->nlmsg_seq, | 1999 | cb->nlh->nlmsg_seq, RTM_NEWROUTE, |
1998 | RTM_NEWROUTE, | 2000 | tb->tb_id, fa->fa_type, |
1999 | tb->tb_id, | 2001 | xkey, KEYLENGTH - fa->fa_slen, |
2000 | fa->fa_type, | 2002 | fa->fa_tos, fa->fa_info, NLM_F_MULTI); |
2001 | xkey, | 2003 | if (err < 0) { |
2002 | KEYLENGTH - fa->fa_slen, | ||
2003 | fa->fa_tos, | ||
2004 | fa->fa_info, NLM_F_MULTI) < 0) { | ||
2005 | cb->args[4] = i; | 2004 | cb->args[4] = i; |
2006 | return -1; | 2005 | return err; |
2007 | } | 2006 | } |
2008 | i++; | 2007 | i++; |
2009 | } | 2008 | } |
@@ -2025,10 +2024,13 @@ int fib_table_dump(struct fib_table *tb, struct sk_buff *skb, | |||
2025 | t_key key = cb->args[3]; | 2024 | t_key key = cb->args[3]; |
2026 | 2025 | ||
2027 | while ((l = leaf_walk_rcu(&tp, key)) != NULL) { | 2026 | while ((l = leaf_walk_rcu(&tp, key)) != NULL) { |
2028 | if (fn_trie_dump_leaf(l, tb, skb, cb) < 0) { | 2027 | int err; |
2028 | |||
2029 | err = fn_trie_dump_leaf(l, tb, skb, cb); | ||
2030 | if (err < 0) { | ||
2029 | cb->args[3] = key; | 2031 | cb->args[3] = key; |
2030 | cb->args[2] = count; | 2032 | cb->args[2] = count; |
2031 | return -1; | 2033 | return err; |
2032 | } | 2034 | } |
2033 | 2035 | ||
2034 | ++count; | 2036 | ++count; |