On 05/03/2018 11:08 AM, Tung Nguyen wrote:
> In single-link usage, function tipc_node_timeout() still reiterates
> over link array to handle each link. Given that the maximum number
> of bearers are 3, there are 2 redundant reiterations with lock
> grab/release.
> 
> This commit adds conditional checking to stop the next iteration
> after handling the used link in the case only one link is configured
> to be used.
> 
> Signed-off-by: Tung Nguyen <[email protected]>

Acked-by: Ying Xue <[email protected]>

> ---
>  net/tipc/node.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/net/tipc/node.c b/net/tipc/node.c
> index 6f98b56..1f14df2 100644
> --- a/net/tipc/node.c
> +++ b/net/tipc/node.c
> @@ -530,21 +530,23 @@ static void tipc_node_timeout(struct timer_list *t)
>       struct tipc_node *n = from_timer(n, t, timer);
>       struct tipc_link_entry *le;
>       struct sk_buff_head xmitq;
> +     int remains = n->link_cnt;
>       int bearer_id;
>       int rc = 0;
>  
>       __skb_queue_head_init(&xmitq);
>  
> -     for (bearer_id = 0; bearer_id < MAX_BEARERS; bearer_id++) {
> +     for (bearer_id = 0; remains && (bearer_id < MAX_BEARERS); bearer_id++) {
>               tipc_node_read_lock(n);
>               le = &n->links[bearer_id];
> -             spin_lock_bh(&le->lock);
>               if (le->link) {
> +                     spin_lock_bh(&le->lock);
>                       /* Link tolerance may change asynchronously: */
>                       tipc_node_calculate_timer(n, le->link);
>                       rc = tipc_link_timeout(le->link, &xmitq);
> +                     spin_unlock_bh(&le->lock);
> +                     remains--;
>               }
> -             spin_unlock_bh(&le->lock);
>               tipc_node_read_unlock(n);
>               tipc_bearer_xmit(n->net, bearer_id, &xmitq, &le->maddr);
>               if (rc & TIPC_LINK_DOWN_EVT)
> --
> 2.8.3
> 
> 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
tipc-discussion mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tipc-discussion

Reply via email to