[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220427115150.210213-1-liujian56@huawei.com>
Date: Wed, 27 Apr 2022 19:51:50 +0800
From: Liu Jian <liujian56@...wei.com>
To: <john.fastabend@...il.com>, <daniel@...earbox.net>,
<jakub@...udflare.com>, <davem@...emloft.net>, <kuba@...nel.org>,
<pabeni@...hat.com>, <ast@...nel.org>, <andrii@...nel.org>,
<kafai@...com>, <songliubraving@...com>, <yhs@...com>,
<kpsingh@...nel.org>, <netdev@...r.kernel.org>,
<bpf@...r.kernel.org>
CC: <liujian56@...wei.com>
Subject: [PATCH bpf-next] bpf, sockmap: Call skb_linearize only when required in sk_psock_skb_ingress_enqueue
The skb_to_sgvec fails only when the number of frag_list and frags exceeds
MAX_MSG_FRAGS. Therefore, we can call skb_linearize only when the
conversion fails.
Signed-off-by: Liu Jian <liujian56@...wei.com>
---
net/core/skmsg.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/net/core/skmsg.c b/net/core/skmsg.c
index cc381165ea08..22b983ade0e7 100644
--- a/net/core/skmsg.c
+++ b/net/core/skmsg.c
@@ -524,16 +524,20 @@ static int sk_psock_skb_ingress_enqueue(struct sk_buff *skb,
{
int num_sge, copied;
- /* skb linearize may fail with ENOMEM, but lets simply try again
- * later if this happens. Under memory pressure we don't want to
- * drop the skb. We need to linearize the skb so that the mapping
- * in skb_to_sgvec can not error.
- */
- if (skb_linearize(skb))
- return -EAGAIN;
num_sge = skb_to_sgvec(skb, msg->sg.data, off, len);
- if (unlikely(num_sge < 0))
- return num_sge;
+ if (num_sge < 0) {
+ /* skb linearize may fail with ENOMEM, but lets simply try again
+ * later if this happens. Under memory pressure we don't want to
+ * drop the skb. We need to linearize the skb so that the mapping
+ * in skb_to_sgvec can not error.
+ */
+ if (skb_linearize(skb))
+ return -EAGAIN;
+
+ num_sge = skb_to_sgvec(skb, msg->sg.data, off, len);
+ if (unlikely(num_sge < 0))
+ return num_sge;
+ }
copied = len;
msg->sg.start = 0;
--
2.17.1
Powered by blists - more mailing lists