## Automatically generated incremental diff
## From:   linux-2.0.40-rc1
## To:     linux-2.0.40-rc2
## Robot:  $Id: make-incremental-diff,v 1.9 2001/12/10 00:06:56 hpa Exp $

diff -urN linux-2.0.40-rc1/Makefile linux/Makefile
--- linux-2.0.40-rc1/Makefile	Wed Jan 23 15:03:09 2002
+++ linux/Makefile	Wed Jan 23 15:03:10 2002
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 0
 SUBLEVEL = 40
-EXTRAVERSION =-rc1
+EXTRAVERSION =-rc2
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
diff -urN linux-2.0.40-rc1/drivers/block/xd.c linux/drivers/block/xd.c
--- linux-2.0.40-rc1/drivers/block/xd.c	Tue Jan  9 13:29:20 2001
+++ linux/drivers/block/xd.c	Wed Jan 23 15:03:10 2002
@@ -114,6 +114,7 @@
 	{ 0x0010,"ST11 BIOS v1.7",xd_seagate_init_controller,xd_seagate_init_drive," Seagate ST11R" }, /* Alan Hourihane, alanh@fairlite.demon.co.uk */
 	{ 0x1000,"(c)Copyright 1987 SMS",xd_omti_init_controller,xd_omti_init_drive,"n OMTI 5520" }, /* Dirk Melchers, dirk@merlin.nbg.sub.org */
 	{ 0x0006,"COPYRIGHT XEBEC (C) 1984",xd_xebec_init_controller,xd_xebec_init_drive," XEBEC" }, /* Andrzej Krzysztofowicz, ankry@mif.pg.gda.pl */
+        { 0x0008,"(C) Copyright 1984 Western Digital Corp", xd_wd_init_controller, xd_wd_init_drive," Western Dig. 1002s-wx2" },
 };
 static u_char *xd_bases[] =
 {
diff -urN linux-2.0.40-rc1/drivers/char/ftape/fdc-io.c linux/drivers/char/ftape/fdc-io.c
--- linux-2.0.40-rc1/drivers/char/ftape/fdc-io.c	Mon Sep  2 05:18:26 1996
+++ linux/drivers/char/ftape/fdc-io.c	Wed Jan 23 15:03:10 2002
@@ -852,18 +852,6 @@
 	set_dma_mode(fdc.dma, dma_mode);
 	set_dma_addr(fdc.dma, (unsigned) buff->ptr);
 	set_dma_count(fdc.dma, SECTOR_SIZE * buff->sector_count);
-#ifdef GCC_2_4_5_BUG
-	/*  This seemingly stupid construction confuses the gcc-2.4.5
-	 *  code generator enough to create correct code.
-	 */
-	if (1) {
-		int i;
-
-		for (i = 0; i < 1; ++i) {
-			udelay(1);
-		}
-	}
-#endif
 	enable_dma(fdc.dma);
 	/* Issue FDC command to start reading/writing.
 	 */
diff -urN linux-2.0.40-rc1/include/linux/module.h linux/include/linux/module.h
--- linux-2.0.40-rc1/include/linux/module.h	Wed Jan 23 15:03:09 2002
+++ linux/include/linux/module.h	Wed Jan 23 15:03:11 2002
@@ -52,8 +52,8 @@
 	int size; /* total, including string table!!! */
 	int n_symbols;
 	int n_refs;
-	struct internal_symbol symbol[1]; /* actual size defined by n_symbols */
-	struct module_ref ref[1]; /* actual size defined by n_refs */
+	struct internal_symbol symbol[0]; /* actual size defined by n_symbols */
+	struct module_ref ref[0]; /* actual size defined by n_refs */
 };
 /*
  * Note: The string table follows immediately after the symbol table in memory!
diff -urN linux-2.0.40-rc1/net/ipv4/icmp.c linux/net/ipv4/icmp.c
--- linux-2.0.40-rc1/net/ipv4/icmp.c	Wed Jan 23 15:03:10 2002
+++ linux/net/ipv4/icmp.c	Wed Jan 23 15:03:11 2002
@@ -1011,7 +1011,7 @@
 			{
 			struct tcphdr *th = (struct tcphdr *)(((unsigned char *)iph)+(iph->ihl<<2));
 
-			sk = tcp_v4_lookup(iph->saddr, th->source, iph->daddr, th->dest, skb->dev);
+			sk = tcp_v4_lookup(iph->daddr, th->dest, iph->saddr, th->source, skb->dev);
 			if (!sk) return 0;
 			if (sk->saddr != iph->saddr) return 0;
 			if (sk->daddr != iph->daddr) return 0;
@@ -1025,7 +1025,7 @@
 			{
 			struct udphdr *uh = (struct udphdr *)(((unsigned char *)iph)+(iph->ihl<<2));
 
-			sk = udp_v4_lookup(iph->saddr, uh->source, iph->daddr, uh->dest, skb->dev);
+			sk = udp_v4_lookup(iph->daddr, uh->dest, iph->saddr, uh->source, skb->dev);
 			if (!sk) return 0;
 			if (sk->saddr != iph->saddr && ip_chk_addr(iph->saddr) != IS_MYADDR)
 				return 0;
diff -urN linux-2.0.40-rc1/net/ipv4/ip_fragment.c linux/net/ipv4/ip_fragment.c
--- linux-2.0.40-rc1/net/ipv4/ip_fragment.c	Wed Jun  3 15:17:50 1998
+++ linux/net/ipv4/ip_fragment.c	Wed Jan 23 15:03:11 2002
@@ -211,9 +211,18 @@
 	ip_statistics.IpReasmTimeout++;
 	ip_statistics.IpReasmFails++;   
 	/* This if is always true... shrug */
-	if(qp->fragments!=NULL)
-		icmp_send(qp->fragments->skb,ICMP_TIME_EXCEEDED,
-				ICMP_EXC_FRAGTIME, 0, qp->dev);
+	if(qp->fragments!=NULL) {
+		struct sk_buff *skb = qp->fragments->skb;
+		struct iphdr *iph = skb->ip_hdr;
+
+		/* ICMP send engine expects skb->data to be just
+		 * past IP header.
+		 */
+		skb_pull(skb, iph->ihl * 4);
+
+		icmp_send(skb, ICMP_TIME_EXCEEDED,
+			  ICMP_EXC_FRAGTIME, 0, qp->dev);
+	}
 
 	/*
 	 *	Nuke the fragment queue.
