Re: [Devel] [PATCH]net: Restore default sock_alloc_send_pskb() changed by initial cumulative patch

2016-10-19 Thread Konstantin Khorenko

Zhenya, Vasya,

please release it as a ReadyKernel patch.

Thank you.

--
Best regards,

Konstantin Khorenko,
Virtuozzo Linux Kernel Team

On 10/18/2016 06:29 PM, Kirill Tkhai wrote:

Some of pre-2.6.32 kernel need linear skb allocation for these places. The most
probably, it's connected with problems of memory accounting then.

But now, these hunks creates problem for VMs, because allocation of continuous
big skbs fails there.

Restore the default behaviour to fix the problem.

https://jira.sw.ru/browse/PSBM-52390

Reported-by: Roman Kagan 
Signed-off-by: Kirill Tkhai 
---
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
index a128823..d589b6d 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -605,7 +605,12 @@ static inline struct sk_buff *macvtap_alloc_skb(struct 
sock *sk, size_t prepad,
 {
struct sk_buff *skb;

-   skb = sock_alloc_send_skb(sk, prepad + linear, noblock, err);
+   /* Under a page?  Don't bother with paged skb. */
+   if (prepad + len < PAGE_SIZE || !linear)
+   linear = len;
+
+   skb = sock_alloc_send_pskb(sk, prepad + linear, len - linear, noblock,
+  err, 0);
if (!skb)
return NULL;

diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index dabe51c..75c627b 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1028,8 +1028,12 @@ static struct sk_buff *tun_alloc_skb(struct tun_file 
*tfile,
struct sk_buff *skb;
int err;

-   linear = len;
-   skb = sock_alloc_send_skb(sk, prepad + linear, noblock, &err);
+   /* Under a page?  Don't bother with paged skb. */
+   if (prepad + len < PAGE_SIZE || !linear)
+   linear = len;
+
+   skb = sock_alloc_send_pskb(sk, prepad + linear, len - linear, noblock,
+  &err, 0);
if (!skb)
return ERR_PTR(err);

.


___
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel


Re: [Devel] [PATCH]net: Restore default sock_alloc_send_pskb() changed by initial cumulative patch

2016-10-18 Thread Roman Kagan
On Tue, Oct 18, 2016 at 06:29:04PM +0300, Kirill Tkhai wrote:
> Some of pre-2.6.32 kernel need linear skb allocation for these places. The 
> most
> probably, it's connected with problems of memory accounting then.
> 
> But now, these hunks creates problem for VMs, because allocation of continuous
> big skbs fails there.
> 
> Restore the default behaviour to fix the problem.
> 
> https://jira.sw.ru/browse/PSBM-52390
> 
> Reported-by: Roman Kagan 
> Signed-off-by: Kirill Tkhai 

Reviewed-by: Roman Kagan 
___
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel


[Devel] [PATCH]net: Restore default sock_alloc_send_pskb() changed by initial cumulative patch

2016-10-18 Thread Kirill Tkhai
Some of pre-2.6.32 kernel need linear skb allocation for these places. The most
probably, it's connected with problems of memory accounting then.

But now, these hunks creates problem for VMs, because allocation of continuous
big skbs fails there.

Restore the default behaviour to fix the problem.

https://jira.sw.ru/browse/PSBM-52390

Reported-by: Roman Kagan 
Signed-off-by: Kirill Tkhai 
---
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
index a128823..d589b6d 100644
--- a/drivers/net/macvtap.c
+++ b/drivers/net/macvtap.c
@@ -605,7 +605,12 @@ static inline struct sk_buff *macvtap_alloc_skb(struct 
sock *sk, size_t prepad,
 {
struct sk_buff *skb;
 
-   skb = sock_alloc_send_skb(sk, prepad + linear, noblock, err);
+   /* Under a page?  Don't bother with paged skb. */
+   if (prepad + len < PAGE_SIZE || !linear)
+   linear = len;
+
+   skb = sock_alloc_send_pskb(sk, prepad + linear, len - linear, noblock,
+  err, 0);
if (!skb)
return NULL;
 
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index dabe51c..75c627b 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1028,8 +1028,12 @@ static struct sk_buff *tun_alloc_skb(struct tun_file 
*tfile,
struct sk_buff *skb;
int err;
 
-   linear = len;
-   skb = sock_alloc_send_skb(sk, prepad + linear, noblock, &err);
+   /* Under a page?  Don't bother with paged skb. */
+   if (prepad + len < PAGE_SIZE || !linear)
+   linear = len;
+
+   skb = sock_alloc_send_pskb(sk, prepad + linear, len - linear, noblock,
+  &err, 0);
if (!skb)
return ERR_PTR(err);
 
___
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel