diff -urN 2.4.30-hf5/Makefile 2.4.30-hf6/Makefile --- 2.4.30-hf5/Makefile 2005-07-27 15:53:36.000000000 +0200 +++ 2.4.30-hf6/Makefile 2005-07-27 15:53:37.000000000 +0200 @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 30 -EXTRAVERSION = -hf5 +EXTRAVERSION = -hf6 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) diff -urN 2.4.30-hf5/arch/ppc/boot/lib/zlib.c 2.4.30-hf6/arch/ppc/boot/lib/zlib.c --- 2.4.30-hf5/arch/ppc/boot/lib/zlib.c 2003-08-25 13:44:40.000000000 +0200 +++ 2.4.30-hf6/arch/ppc/boot/lib/zlib.c 2005-07-27 15:53:37.000000000 +0200 @@ -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 2.4.30-hf5/arch/ppc64/boot/zlib.c 2.4.30-hf6/arch/ppc64/boot/zlib.c --- 2.4.30-hf5/arch/ppc64/boot/zlib.c 2003-08-25 13:44:40.000000000 +0200 +++ 2.4.30-hf6/arch/ppc64/boot/zlib.c 2005-07-27 15:53:37.000000000 +0200 @@ -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 2.4.30-hf5/arch/sparc64/kernel/sys_sparc32.c 2.4.30-hf6/arch/sparc64/kernel/sys_sparc32.c --- 2.4.30-hf5/arch/sparc64/kernel/sys_sparc32.c 2005-04-14 09:43:33.000000000 +0200 +++ 2.4.30-hf6/arch/sparc64/kernel/sys_sparc32.c 2005-07-27 15:53:37.000000000 +0200 @@ -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 2.4.30-hf5/fs/inode.c 2.4.30-hf6/fs/inode.c --- 2.4.30-hf5/fs/inode.c 2004-04-14 15:05:40.000000000 +0200 +++ 2.4.30-hf6/fs/inode.c 2005-07-27 15:53:37.000000000 +0200 @@ -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 2.4.30-hf5/lib/inflate.c 2.4.30-hf6/lib/inflate.c --- 2.4.30-hf5/lib/inflate.c 2002-11-29 00:53:15.000000000 +0100 +++ 2.4.30-hf6/lib/inflate.c 2005-07-27 15:53:37.000000000 +0200 @@ -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 2.4.30-hf5/lib/zlib_inflate/inftrees.c 2.4.30-hf6/lib/zlib_inflate/inftrees.c --- 2.4.30-hf5/lib/zlib_inflate/inftrees.c 2002-11-29 00:53:15.000000000 +0100 +++ 2.4.30-hf6/lib/zlib_inflate/inftrees.c 2005-07-27 15:53:37.000000000 +0200 @@ -140,7 +140,7 @@ { *t = (inflate_huft *)Z_NULL; *m = 0; - return Z_OK; + return Z_DATA_ERROR; } diff -urN 2.4.30-hf5/net/netlink/af_netlink.c 2.4.30-hf6/net/netlink/af_netlink.c --- 2.4.30-hf5/net/netlink/af_netlink.c 2005-04-14 09:43:35.000000000 +0200 +++ 2.4.30-hf6/net/netlink/af_netlink.c 2005-07-27 15:53:37.000000000 +0200 @@ -330,9 +330,9 @@ u32 pid = nlk_sk(sk)->pid; netlink_table_grab(); - hash->entries--; for (skp = nl_pid_hashfn(hash, pid); *skp; skp = &((*skp)->next)) { if (*skp == sk) { + hash->entries--; *skp = sk->next; __sock_put(sk); break; @@ -450,7 +450,12 @@ err = netlink_insert(sk, pid); if (err == -EADDRINUSE) goto retry; - return 0; + + /* If 2 threads race to autobind, that is fine. */ + if (err == -EBUSY) + err = 0; + + return err; } static inline int netlink_capable(struct socket *sock, unsigned int flag)