## Automatically generated incremental diff
## From:   linux-2.4.32-pre1
## To:     linux-2.4.32-pre2
## Robot:  $Id: make-incremental-diff,v 1.12 2004/01/06 07:19:36 hpa Exp $

diff -urN linux-2.4.32-pre1/Makefile linux-2.4.32-pre2/Makefile
--- linux-2.4.32-pre1/Makefile	2005-07-27 13:11:47.180694665 -0700
+++ linux-2.4.32-pre2/Makefile	2005-07-27 13:11:50.714825219 -0700
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 32
-EXTRAVERSION = -pre1
+EXTRAVERSION = -pre2
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
diff -urN linux-2.4.32-pre1/arch/ppc/boot/lib/zlib.c linux-2.4.32-pre2/arch/ppc/boot/lib/zlib.c
--- linux-2.4.32-pre1/arch/ppc/boot/lib/zlib.c	2003-08-25 04:44:40.000000000 -0700
+++ linux-2.4.32-pre2/arch/ppc/boot/lib/zlib.c	2005-07-27 13:11:50.688824259 -0700
@@ -1278,7 +1278,7 @@
   {
     *t = (inflate_huft *)Z_NULL;
     *m = 0;
-    return Z_OK;
+    return Z_DATA_ERROR;
   }
 
 
@@ -1322,6 +1322,7 @@
     if ((j = *p++) != 0)
       v[x[j]++] = i;
   } while (++i < n);
+  n = x[g];			/* set n to length of v */
 
 
   /* Generate the Huffman codes and for each, make the table entries */
diff -urN linux-2.4.32-pre1/arch/ppc64/boot/zlib.c linux-2.4.32-pre2/arch/ppc64/boot/zlib.c
--- linux-2.4.32-pre1/arch/ppc64/boot/zlib.c	2003-08-25 04:44:40.000000000 -0700
+++ linux-2.4.32-pre2/arch/ppc64/boot/zlib.c	2005-07-27 13:11:50.689824296 -0700
@@ -1294,7 +1294,7 @@
   {
     *t = (inflate_huft *)Z_NULL;
     *m = 0;
-    return Z_OK;
+    return Z_DATA_ERROR;
   }
 
 
@@ -1338,6 +1338,7 @@
     if ((j = *p++) != 0)
       v[x[j]++] = i;
   } while (++i < n);
+  n = x[g];			/* set n to length of v */
 
 
   /* Generate the Huffman codes and for each, make the table entries */
diff -urN linux-2.4.32-pre1/arch/sparc64/kernel/sys_sparc32.c linux-2.4.32-pre2/arch/sparc64/kernel/sys_sparc32.c
--- linux-2.4.32-pre1/arch/sparc64/kernel/sys_sparc32.c	2005-04-03 18:42:19.000000000 -0700
+++ linux-2.4.32-pre2/arch/sparc64/kernel/sys_sparc32.c	2005-07-27 13:11:50.692824407 -0700
@@ -4205,7 +4205,7 @@
 
 		old_fs = get_fs();
 		set_fs(KERNEL_DS);
-		ret = sys_utimes(kfilename, &ktvs[0]);
+		ret = sys_utimes(kfilename, (tvs ? &ktvs[0] : NULL));
 		set_fs(old_fs);
 
 		putname(kfilename);
diff -urN linux-2.4.32-pre1/drivers/usb/gadget/file_storage.c linux-2.4.32-pre2/drivers/usb/gadget/file_storage.c
--- linux-2.4.32-pre1/drivers/usb/gadget/file_storage.c	2004-08-07 16:26:05.000000000 -0700
+++ linux-2.4.32-pre2/drivers/usb/gadget/file_storage.c	2005-07-27 13:11:50.703824813 -0700
@@ -1454,6 +1454,7 @@
 	/* Respond with data/status or defer until later? */
 	if (rc >= 0 && rc != DELAYED_STATUS) {
 		fsg->ep0req->length = rc;
+		fsg->ep0req->zero = (rc < ctrl->wLength);
 		fsg->ep0req_name = (ctrl->bRequestType & USB_DIR_IN ?
 				"ep0-in" : "ep0-out");
 		rc = ep0_queue(fsg);
diff -urN linux-2.4.32-pre1/drivers/usb/host/uhci.c linux-2.4.32-pre2/drivers/usb/host/uhci.c
--- linux-2.4.32-pre1/drivers/usb/host/uhci.c	2003-06-13 07:51:36.000000000 -0700
+++ linux-2.4.32-pre2/drivers/usb/host/uhci.c	2005-07-27 13:11:50.704824850 -0700
@@ -2924,7 +2924,7 @@
 		}
 
 		/* Only place we don't use the frame list routines */
-		uhci->fl->frame[i] =  uhci->skeltd[irq]->dma_handle;
+		uhci->fl->frame[i] = uhci->skeltd[irq]->dma_handle | UHCI_PTR_QH;
 	}
 
 	start_hc(uhci);
diff -urN linux-2.4.32-pre1/drivers/usb/printer.c linux-2.4.32-pre2/drivers/usb/printer.c
--- linux-2.4.32-pre1/drivers/usb/printer.c	2004-08-07 16:26:05.000000000 -0700
+++ linux-2.4.32-pre2/drivers/usb/printer.c	2005-07-27 13:11:50.705824887 -0700
@@ -740,6 +740,7 @@
 				schedule();
 			} else {
 				set_current_state(TASK_RUNNING);
+				down (&usblp->sem);
 				break;
 			}
 			down (&usblp->sem);
diff -urN linux-2.4.32-pre1/fs/inode.c linux-2.4.32-pre2/fs/inode.c
--- linux-2.4.32-pre1/fs/inode.c	2004-04-14 06:05:40.000000000 -0700
+++ linux-2.4.32-pre2/fs/inode.c	2005-07-27 13:11:50.709825035 -0700
@@ -297,7 +297,7 @@
 {
 	struct list_head *to;
 
-	if (inode->i_state & I_FREEING)
+	if (inode->i_state & (I_FREEING|I_CLEAR))
 		return;
 	if (list_empty(&inode->i_hash))
 		return;
@@ -634,7 +634,9 @@
 		cdput(inode->i_cdev);
 		inode->i_cdev = NULL;
 	}
+	spin_lock(&inode_lock);
 	inode->i_state = I_CLEAR;
+	spin_unlock(&inode_lock);
 }
 
 /*
diff -urN linux-2.4.32-pre1/lib/inflate.c linux-2.4.32-pre2/lib/inflate.c
--- linux-2.4.32-pre1/lib/inflate.c	2002-11-28 15:53:15.000000000 -0800
+++ linux-2.4.32-pre2/lib/inflate.c	2005-07-27 13:11:50.712825145 -0700
@@ -320,7 +320,7 @@
   {
     *t = (struct huft *)NULL;
     *m = 0;
-    return 0;
+    return 2;
   }
 
 DEBG("huft2 ");
@@ -368,6 +368,7 @@
     if ((j = *p++) != 0)
       v[x[j]++] = i;
   } while (++i < n);
+  n = x[g];                   /* set n to length of v */
 
 DEBG("h6 ");
 
@@ -404,12 +405,13 @@
 DEBG1("2 ");
           f -= a + 1;           /* deduct codes from patterns left */
           xp = c + k;
-          while (++j < z)       /* try smaller tables up to z bits */
-          {
-            if ((f <<= 1) <= *++xp)
-              break;            /* enough codes to use up j bits */
-            f -= *xp;           /* else deduct codes from patterns */
-          }
+          if (j < z)
+            while (++j < z)       /* try smaller tables up to z bits */
+            {
+              if ((f <<= 1) <= *++xp)
+                break;            /* enough codes to use up j bits */
+              f -= *xp;           /* else deduct codes from patterns */
+            }
         }
 DEBG1("3 ");
         z = 1 << j;             /* table entries for j-bit table */
diff -urN linux-2.4.32-pre1/lib/zlib_inflate/inftrees.c linux-2.4.32-pre2/lib/zlib_inflate/inftrees.c
--- linux-2.4.32-pre1/lib/zlib_inflate/inftrees.c	2002-11-28 15:53:15.000000000 -0800
+++ linux-2.4.32-pre2/lib/zlib_inflate/inftrees.c	2005-07-27 13:11:50.712825145 -0700
@@ -140,7 +140,7 @@
   {
     *t = (inflate_huft *)Z_NULL;
     *m = 0;
-    return Z_OK;
+    return Z_DATA_ERROR;
   }
 
 
diff -urN linux-2.4.32-pre1/net/ipv4/ipvs/ip_vs_conn.c linux-2.4.32-pre2/net/ipv4/ipvs/ip_vs_conn.c
--- linux-2.4.32-pre1/net/ipv4/ipvs/ip_vs_conn.c	2005-01-19 06:10:13.000000000 -0800
+++ linux-2.4.32-pre2/net/ipv4/ipvs/ip_vs_conn.c	2005-07-27 13:11:50.715825256 -0700
@@ -1248,7 +1248,6 @@
 {
 	cp->timeout = 0;
 	mod_timer(&cp->timer, jiffies);
-	__ip_vs_conn_put(cp);
 }
 
 /*
@@ -1414,7 +1413,6 @@
 	int idx;
 	struct ip_vs_conn *cp;
 	struct list_head *l,*e;
-	struct ip_vs_conn *ct;
 
 	/*
 	 * Randomly scan 1/32 of the whole table every second
@@ -1448,21 +1446,12 @@
 				continue;
 			}
 
-			/*
-			 * Drop the entry, and drop its ct if not referenced
-			 */
-			atomic_inc(&cp->refcnt);
-			ct_write_unlock(hash);
-
-			if ((ct = cp->control))
-				atomic_inc(&ct->refcnt);
 			IP_VS_DBG(4, "del connection\n");
 			ip_vs_conn_expire_now(cp);
-			if (ct) {
+			if (cp->control) {
 				IP_VS_DBG(4, "del conn template\n");
-				ip_vs_conn_expire_now(ct);
+				ip_vs_conn_expire_now(cp->control);
 			}
-			ct_write_lock(hash);
 		}
 		ct_write_unlock(hash);
 	}
@@ -1477,7 +1466,6 @@
 	int idx;
 	struct ip_vs_conn *cp;
 	struct list_head *l,*e;
-	struct ip_vs_conn *ct;
 
   flush_again:
 	for (idx=0; idx<IP_VS_CONN_TAB_SIZE; idx++) {
@@ -1489,18 +1477,13 @@
 		l = &ip_vs_conn_tab[idx];
 		for (e=l->next; e!=l; e=e->next) {
 			cp = list_entry(e, struct ip_vs_conn, c_list);
-			atomic_inc(&cp->refcnt);
-			ct_write_unlock(idx);
 
-			if ((ct = cp->control))
-				atomic_inc(&ct->refcnt);
 			IP_VS_DBG(4, "del connection\n");
 			ip_vs_conn_expire_now(cp);
-			if (ct) {
+			if (cp->control) {
 				IP_VS_DBG(4, "del conn template\n");
-				ip_vs_conn_expire_now(ct);
+				ip_vs_conn_expire_now(cp->control);
 			}
-			ct_write_lock(idx);
 		}
 		ct_write_unlock_bh(idx);
 	}
diff -urN linux-2.4.32-pre1/net/netlink/af_netlink.c linux-2.4.32-pre2/net/netlink/af_netlink.c
--- linux-2.4.32-pre1/net/netlink/af_netlink.c	2005-07-27 13:11:47.181694702 -0700
+++ linux-2.4.32-pre2/net/netlink/af_netlink.c	2005-07-27 13:11:50.715825256 -0700
@@ -450,6 +450,11 @@
 	err = netlink_insert(sk, pid);
 	if (err == -EADDRINUSE)
 		goto retry;
+
+	/* If 2 threads race to autobind, that is fine.  */
+	if (err == -EBUSY)
+		err = 0;
+
 	return err;
 }
 
