Skip to content

Commit

Permalink
udp: introduce __sk_mem_schedule() usage
Browse files Browse the repository at this point in the history
Keep the accounting schema consistent across different protocols
with __sk_mem_schedule(). Besides, it adjusts a little bit on how
to calculate forward allocated memory compared to before. After
applied this patch, we could avoid receive path scheduling extra
amount of memory.

Link: https://lore.kernel.org/lkml/20230221110344.82818-1-kerneljasonxing@gmail.com/
Signed-off-by: Jason Xing <kernelxing@tencent.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20230308021153.99777-1-kerneljasonxing@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Jason Xing authored and Jakub Kicinski committed Mar 10, 2023
1 parent d0928c1 commit fd9c31f
Showing 1 changed file with 16 additions and 11 deletions.
27 changes: 16 additions & 11 deletions net/ipv4/udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1531,10 +1531,21 @@ static void busylock_release(spinlock_t *busy)
spin_unlock(busy);
}

static int udp_rmem_schedule(struct sock *sk, int size)
{
int delta;

delta = size - sk->sk_forward_alloc;
if (delta > 0 && !__sk_mem_schedule(sk, delta, SK_MEM_RECV))
return -ENOBUFS;

return 0;
}

int __udp_enqueue_schedule_skb(struct sock *sk, struct sk_buff *skb)
{
struct sk_buff_head *list = &sk->sk_receive_queue;
int rmem, delta, amt, err = -ENOMEM;
int rmem, err = -ENOMEM;
spinlock_t *busy = NULL;
int size;

Expand Down Expand Up @@ -1567,16 +1578,10 @@ int __udp_enqueue_schedule_skb(struct sock *sk, struct sk_buff *skb)
goto uncharge_drop;

spin_lock(&list->lock);
if (size >= sk->sk_forward_alloc) {
amt = sk_mem_pages(size);
delta = amt << PAGE_SHIFT;
if (!__sk_mem_raise_allocated(sk, delta, amt, SK_MEM_RECV)) {
err = -ENOBUFS;
spin_unlock(&list->lock);
goto uncharge_drop;
}

sk->sk_forward_alloc += delta;
err = udp_rmem_schedule(sk, size);
if (err) {
spin_unlock(&list->lock);
goto uncharge_drop;
}

sk->sk_forward_alloc -= size;
Expand Down

0 comments on commit fd9c31f

Please sign in to comment.