Skip to content

Commit a93b220

Browse files
Cong WangKernel Patches Daemon
authored andcommitted
skmsg: get rid of unncessary memset()
We always allocate skmsg with kzalloc(), so there is no need to call memset(0) on it, the only thing we need from sk_msg_init() is sg_init_marker(). So introduce a new helper which is just kzalloc()+sg_init_marker(), this saves an unncessary memset(0) for skmsg on fast path. Cc: John Fastabend <[email protected]> Cc: Daniel Borkmann <[email protected]> Cc: Jakub Sitnicki <[email protected]> Signed-off-by: Cong Wang <[email protected]>
1 parent cd89ec8 commit a93b220

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

net/core/skmsg.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -497,23 +497,27 @@ bool sk_msg_is_readable(struct sock *sk)
497497
}
498498
EXPORT_SYMBOL_GPL(sk_msg_is_readable);
499499

500-
static struct sk_msg *sk_psock_create_ingress_msg(struct sock *sk,
501-
struct sk_buff *skb)
500+
static struct sk_msg *alloc_sk_msg(void)
502501
{
503502
struct sk_msg *msg;
504503

505-
if (atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf)
504+
msg = kzalloc(sizeof(*msg), __GFP_NOWARN | GFP_KERNEL);
505+
if (unlikely(!msg))
506506
return NULL;
507+
sg_init_marker(msg->sg.data, NR_MSG_FRAG_IDS);
508+
return msg;
509+
}
507510

508-
if (!sk_rmem_schedule(sk, skb, skb->truesize))
511+
static struct sk_msg *sk_psock_create_ingress_msg(struct sock *sk,
512+
struct sk_buff *skb)
513+
{
514+
if (atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf)
509515
return NULL;
510516

511-
msg = kzalloc(sizeof(*msg), __GFP_NOWARN | GFP_KERNEL);
512-
if (unlikely(!msg))
517+
if (!sk_rmem_schedule(sk, skb, skb->truesize))
513518
return NULL;
514519

515-
sk_msg_init(msg);
516-
return msg;
520+
return alloc_sk_msg();
517521
}
518522

519523
static int sk_psock_skb_ingress_enqueue(struct sk_buff *skb,
@@ -590,13 +594,12 @@ static int sk_psock_skb_ingress(struct sk_psock *psock, struct sk_buff *skb,
590594
static int sk_psock_skb_ingress_self(struct sk_psock *psock, struct sk_buff *skb,
591595
u32 off, u32 len)
592596
{
593-
struct sk_msg *msg = kzalloc(sizeof(*msg), __GFP_NOWARN | GFP_ATOMIC);
597+
struct sk_msg *msg = alloc_sk_msg();
594598
struct sock *sk = psock->sk;
595599
int err;
596600

597601
if (unlikely(!msg))
598602
return -EAGAIN;
599-
sk_msg_init(msg);
600603
skb_set_owner_r(skb, sk);
601604
err = sk_psock_skb_ingress_enqueue(skb, off, len, psock, sk, msg);
602605
if (err < 0)

0 commit comments

Comments
 (0)