-diff -upr linux-2.6.26/include/linux/mm_types.h linux-2.6.26/include/linux/mm_types.h
---- linux-2.6.26/include/linux/mm_types.h 2008-07-14 01:51:29.000000000 +0400
-+++ linux-2.6.26/include/linux/mm_types.h 2008-07-22 20:30:21.000000000 +0400
+diff -upr linux-2.6.27/include/linux/mm_types.h linux-2.6.27/include/linux/mm_types.h
+--- linux-2.6.27/include/linux/mm_types.h 2008-07-14 01:51:29.000000000 +0400
++++ linux-2.6.27/include/linux/mm_types.h 2008-07-22 20:30:21.000000000 +0400
@@ -92,6 +92,18 @@ struct page {
void *virtual; /* Kernel virtual address (NULL if
not kmapped, ie. highmem) */
#ifdef CONFIG_CGROUP_MEM_RES_CTLR
unsigned long page_cgroup;
#endif
-diff -upr linux-2.6.26/include/linux/net.h linux-2.6.26/include/linux/net.h
---- linux-2.6.26/include/linux/net.h 2008-07-14 01:51:29.000000000 +0400
-+++ linux-2.6.26/include/linux/net.h 2008-07-29 20:48:07.000000000 +0400
+diff -upr linux-2.6.27/include/linux/net.h linux-2.6.27/include/linux/net.h
+--- linux-2.6.27/include/linux/net.h 2008-07-14 01:51:29.000000000 +0400
++++ linux-2.6.27/include/linux/net.h 2008-07-29 20:48:07.000000000 +0400
@@ -57,6 +57,7 @@ typedef enum {
#include <linux/random.h>
#include <linux/wait.h>
+
#endif /* __KERNEL__ */
#endif /* _LINUX_NET_H */
-diff -upr linux-2.6.26/net/core/skbuff.c linux-2.6.26/net/core/skbuff.c
---- linux-2.6.26/net/core/skbuff.c 2008-07-14 01:51:29.000000000 +0400
-+++ linux-2.6.26/net/core/skbuff.c 2008-07-22 20:28:41.000000000 +0400
+diff -upr linux-2.6.27/net/core/skbuff.c linux-2.6.27/net/core/skbuff.c
+--- linux-2.6.27/net/core/skbuff.c 2008-07-14 01:51:29.000000000 +0400
++++ linux-2.6.27/net/core/skbuff.c 2008-07-22 20:28:41.000000000 +0400
@@ -319,7 +319,7 @@ static void skb_release_data(struct sk_b
if (skb_shinfo(skb)->nr_frags) {
int i;
size = frag->size;
if (pos < offset) {
-diff -upr linux-2.6.26/net/ipv4/ip_output.c linux-2.6.26/net/ipv4/ip_output.c
---- linux-2.6.26/net/ipv4/ip_output.c 2008-07-14 01:51:29.000000000 +0400
-+++ linux-2.6.26/net/ipv4/ip_output.c 2008-07-22 20:28:41.000000000 +0400
+diff -upr linux-2.6.27/net/ipv4/ip_output.c linux-2.6.27/net/ipv4/ip_output.c
+--- linux-2.6.27/net/ipv4/ip_output.c 2008-07-14 01:51:29.000000000 +0400
++++ linux-2.6.27/net/ipv4/ip_output.c 2008-07-22 20:28:41.000000000 +0400
@@ -1007,7 +1007,7 @@ alloc_new_skb:
err = -EMSGSIZE;
goto error;
skb_fill_page_desc(skb, i, page, offset, len);
} else {
err = -EMSGSIZE;
-diff -upr linux-2.6.26/net/ipv4/Makefile linux-2.6.26/net/ipv4/Makefile
---- linux-2.6.26/net/ipv4/Makefile 2008-07-14 01:51:29.000000000 +0400
-+++ linux-2.6.26/net/ipv4/Makefile 2008-07-22 20:35:05.000000000 +0400
+diff -upr linux-2.6.27/net/ipv4/Makefile linux-2.6.27/net/ipv4/Makefile
+--- linux-2.6.27/net/ipv4/Makefile 2008-07-14 01:51:29.000000000 +0400
++++ linux-2.6.27/net/ipv4/Makefile 2008-07-22 20:35:05.000000000 +0400
@@ -50,6 +50,7 @@ obj-$(CONFIG_TCP_CONG_LP) += tcp_lp.o
obj-$(CONFIG_TCP_CONG_YEAH) += tcp_yeah.o
obj-$(CONFIG_TCP_CONG_ILLINOIS) += tcp_illinois.o
obj-$(CONFIG_XFRM) += xfrm4_policy.o xfrm4_state.o xfrm4_input.o \
xfrm4_output.o
-diff -upr linux-2.6.26/net/ipv4/tcp.c linux-2.6.26/net/ipv4/tcp.c
---- linux-2.6.26/net/ipv4/tcp.c 2008-07-14 01:51:29.000000000 +0400
-+++ linux-2.6.26/net/ipv4/tcp.c 2008-07-22 20:28:41.000000000 +0400
+diff -upr linux-2.6.27/net/ipv4/tcp.c linux-2.6.27/net/ipv4/tcp.c
+--- linux-2.6.27/net/ipv4/tcp.c 2008-07-14 01:51:29.000000000 +0400
++++ linux-2.6.27/net/ipv4/tcp.c 2008-07-22 20:28:41.000000000 +0400
@@ -712,7 +712,7 @@ new_segment:
if (can_coalesce) {
skb_shinfo(skb)->frags[i - 1].size += copy;
TCP_PAGE(sk) = page;
}
}
-diff -upr linux-2.6.26/net/ipv4/tcp_output.c linux-2.6.26/net/ipv4/tcp_output.c
---- linux-2.6.26/net/ipv4/tcp_output.c 2008-07-14 01:51:29.000000000 +0400
-+++ linux-2.6.26/net/ipv4/tcp_output.c 2008-07-22 20:28:41.000000000 +0400
+diff -upr linux-2.6.27/net/ipv4/tcp_output.c linux-2.6.27/net/ipv4/tcp_output.c
+--- linux-2.6.27/net/ipv4/tcp_output.c 2008-07-14 01:51:29.000000000 +0400
++++ linux-2.6.27/net/ipv4/tcp_output.c 2008-07-22 20:28:41.000000000 +0400
@@ -854,7 +854,7 @@ static void __pskb_trim_head(struct sk_b
k = 0;
for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
eat -= skb_shinfo(skb)->frags[i].size;
} else {
skb_shinfo(skb)->frags[k] = skb_shinfo(skb)->frags[i];
-diff -upr linux-2.6.26/net/ipv4/tcp_zero_copy.c linux-2.6.26/net/ipv4/tcp_zero_copy.c
---- linux-2.6.26/net/ipv4/tcp_zero_copy.c 2008-07-22 20:12:35.000000000 +0400
-+++ linux-2.6.26/net/ipv4/tcp_zero_copy.c 2008-07-31 21:21:13.000000000 +0400
+diff -upr linux-2.6.27/net/ipv4/tcp_zero_copy.c linux-2.6.27/net/ipv4/tcp_zero_copy.c
+--- linux-2.6.27/net/ipv4/tcp_zero_copy.c 2008-07-22 20:12:35.000000000 +0400
++++ linux-2.6.27/net/ipv4/tcp_zero_copy.c 2008-07-31 21:21:13.000000000 +0400
@@ -0,0 +1,49 @@
+/*
+ * Support routines for TCP zero copy transmit
+ return res;
+}
+EXPORT_SYMBOL(net_set_get_put_page_callbacks);
-diff -upr linux-2.6.26/net/ipv6/ip6_output.c linux-2.6.26/net/ipv6/ip6_output.c
---- linux-2.6.26/net/ipv6/ip6_output.c 2008-07-14 01:51:29.000000000 +0400
-+++ linux-2.6.26/net/ipv6/ip6_output.c 2008-07-22 20:28:41.000000000 +0400
+diff -upr linux-2.6.27/net/ipv6/ip6_output.c linux-2.6.27/net/ipv6/ip6_output.c
+--- linux-2.6.27/net/ipv6/ip6_output.c 2008-07-14 01:51:29.000000000 +0400
++++ linux-2.6.27/net/ipv6/ip6_output.c 2008-07-22 20:28:41.000000000 +0400
@@ -1349,7 +1349,7 @@ alloc_new_skb:
err = -EMSGSIZE;
goto error;
skb_fill_page_desc(skb, i, page, sk->sk_sndmsg_off, 0);
frag = &skb_shinfo(skb)->frags[i];
}
-diff -upr linux-2.6.26/net/Kconfig linux-2.6.26/net/Kconfig
---- linux-2.6.26/net/Kconfig 2008-07-14 01:51:29.000000000 +0400
-+++ linux-2.6.26/net/Kconfig 2008-07-29 21:15:39.000000000 +0400
+diff -upr linux-2.6.27/net/Kconfig linux-2.6.27/net/Kconfig
+--- linux-2.6.27/net/Kconfig 2008-07-14 01:51:29.000000000 +0400
++++ linux-2.6.27/net/Kconfig 2008-07-29 21:15:39.000000000 +0400
@@ -59,6 +59,18 @@ config INET
Short answer: say Y.