On 10/09/2021 01:38, Hoang Le wrote:
> In tipc_sk_enqueue() we use hardcoded 2 jiffies to extract
> socket buffer from generic queue to particular socket.
> The 2 jiffies is too short in case there are other high priority
> tasks get CPU cycles for multiple jiffies update. As result, no
> buffer could be enqueued to particular socket.
>
> To solve this, we switch to use to constant timeout 20msecs.
> Then, the function will be expired between 2 jiffies (CONFIG_100HZ)
> and 20 jiffies (CONFIG_1000HZ).
>
> Signed-off-by: Hoang Le <hoa...@de...>
> ---
> net/tipc/socket.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/tipc/socket.c b/net/tipc/socket.c
> index a0a27d87f631..ad570c2450be 100644
> --- a/net/tipc/socket.c
> +++ b/net/tipc/socket.c
> @@ -2423,7 +2423,7 @@ static int tipc_sk_backlog_rcv(struct sock *sk, struct sk_buff *skb)
> static void tipc_sk_enqueue(struct sk_buff_head *inputq, struct sock *sk,
> u32 dport, struct sk_buff_head *xmitq)
> {
> - unsigned long time_limit = jiffies + 2;
> + unsigned long time_limit = jiffies + usecs_to_jiffies(20000);
> struct sk_buff *skb;
> unsigned int lim;
> atomic_t *dcnt;
>
Acked-by: Jon Maloy <jm...@re...>
|