Kernel Newsflash

Richard Gooch

7-APR-2002


What is this page?

This page is meant to reduce questions to the linux-kernel mailing list of the form "kernel x.y.z doesn't compile". Often a fix is posted to the list which solves the problem. Unfortunately, for days afterwards, people ask the same question, even though the fix has been posted many times already.

This page is also meant to be a quick reference to check what the latest kernel version is, and what problems it may have. I try to keep this up to date. You can also check http://www.kernel.org/ which shows the current versions. This should be the definitive guide on what the latest versions are, although it doesn't discuss problems.

Please bookmark this page and refer to it before asking on the kernel list.

This document is for the 2.2, 2.4 and 2.5 series kernels.

Note that some versions of egcs need the compile option: -fno-strict-aliasing
Gcc 2.95.2 has this as the default, although it won't hurt to still provide this switch. Better safe than sorry.


Current Production Kernels (2.4.x series)


The latest official kernel is 2.4.18

On some non-x86 platforms static binaries are broken. Grab 2.4.19-pre1 or later. Note that 2.4.19-pre3 has a major IDE update, which breaks loading of ide-probe-mod as a module. The problem persists with 2.4.19-pre5.

Archive of problems for kernel 2.4.17

Some people have found a compile problem with the networking layer. Apply this fix:
--- net/sunrpc/sched.c.~1~	Fri Oct 12 18:47:31 2001
+++ net/sunrpc/sched.c	Fri Dec 21 18:48:09 2001
@@ -21,6 +21,7 @@
 #include <linux/spinlock.h>
 
 #include <linux/sunrpc/clnt.h>
+#include <linux/sunrpc/xprt.h>
 
 #ifdef RPC_DEBUG
 #define RPCDBG_FACILITY		RPCDBG_SCHED
Also, recent versions of binutils (specifically, 2.11.92.0.12) won't work properly with the kernel, so please use binutils-2.11.92.0.10 until the kernel is fixed. Note that 2.4.18-pre3 should fix this. Keith Owens has provided the following information:
2.4.18-pre3 contains my patch to use .subsection instead of a separate
.text.lock section for out of line lock code.  That should fix most of
the problems, any .text.lock references after 2.4.18-pre3 are almost
certainly code bugs.

IA64 is still using .text.lock (only for read_lock()), gcc 2.96
generates incorrect code for ia64 subsections.  AFAIK there are no uses
of read_lock in discarded sections on IA64.  IA64 has a separate
problem, gcc automatically generates unwind sections that refer to
other sections, the unwind sections get flagged as dangling references.
However that is a generic binutils problem, not the kernel, we have no
control over unwind sections.

2.5.x has not been patched so it still suffers from the dangling
.text.lock problems.

Archive of problems for kernel 2.4.16

Seems to work. The new VM seems to be stabilising, although it's still undocumented.

Archive of problems for kernel 2.4.15

This kernel has a serious bug which causes filesystem corruption when rebooting. This bug was introduced in 2.4.15-pre9.

There are other problems with 2.4.15 as well, which were not caught because 2.4.15-pre9, 2.4.15-final and 2.4.15 were released within the space of about 24 hours, which didn't give sufficient time to enable people to test the new kernels (or even compile).

2.4.15 is the last kernel in the 2.4 series released by Linus. Maintenance of this produciton series has been handed over to Marcelo. Linus is now concentrating on the 2.5 development series.

This is the same kernel (other than a name change) as the new development kernel (2.5.0). Thus, 2.5.0 has the same filesystem corruption problem. Grab 2.5.1 for a fix.

The new VM remains undocumented.


Archive of problems for kernel 2.4.14

Seems to work. The new VM seems to be stabilising, although it's still undocumented. The loop driver doesn't link, due to a missing symbol. Grab one of the 2.4.15 pre-patches.

Archive of problems for kernel 2.4.12

The parallel port driver was broken in this "emergency" release. Grab the pre-patch: 2.4.13-pre1.

Archive of problems for kernel 2.4.11

A nasty bug with symlink handling was introduced, which could lead to corrupted (and unkillable) inodes. Don't use this kernel.

Archive of problems for kernel 2.4.10

The SCSI partition handling code appears to be broken, and sometimes causes commands like mount -a to hang. Also, a pile of experimental, undocumented VM changes were applied, so be wary. The recommended compiler is now gcc-2.95.3, rather than gcc-2.91.66 (egcs-1.1.2).

Archive of problems for kernel 2.4.9

Compiling NTFS doesn't work due to a (controversial) global macro change. Add the line #include <linux/kernel.h> to the file linux/fs/ntfs/unistr.h and recompile.

Archive of problems for kernel 2.4.5

The OOM killer is being triggered too early (i.e. when there are clean pages/buffers in the page and buffer caches). Also, disabling memory overcommit doesn't work (and probably never has).

Archive of problems for kernel 2.4.2

The loopback driver still has problems. The 2.4.2-ac kernels distributed by Alan Cox contain a patch to correct this. See the linux/kernel/people/alan/ directory on your local kernel.org mirror site.

Archive of problems for kernel 2.4.1

The loopback driver still has problems.

Archive of problems for kernel 2.4.0

The memory balancing problems seem to have been solved.
The loopback driver corrupts data under some conditions.

Current Development Kernels (2.5.x series)


The latest official kernel is 2.5.7

The video capture device API has changed, but the various drivers have not yet been updated to this new API. Patches to fix this will soon be made available at:
http://bytesex.org/patches/2.5/

Archive of problems for kernel is 2.5.3

The various copies of compression code used in the kernel are being amalgamated. Some mistakes slipped by (due to the lack of a "release candidate" version). Apply this patch:
Index: lib/zlib_inflate/inflate_syms.c
===================================================================
RCS file: /home/cvs/kernel-acme/lib/zlib_inflate/inflate_syms.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 inflate_syms.c
--- lib/zlib_inflate/inflate_syms.c	2002/01/31 22:30:27	1.1.1.1
+++ lib/zlib_inflate/inflate_syms.c	2002/02/02 23:36:05
@@ -18,4 +18,5 @@
 EXPORT_SYMBOL(zlib_inflateSync);
 EXPORT_SYMBOL(zlib_inflateReset);
 EXPORT_SYMBOL(zlib_inflateSyncPoint);
+EXPORT_SYMBOL(zlib_inflateIncomp);
 MODULE_LICENSE("GPL");

Archive of problems for kernel is 2.5.1

This kernel introduced the start of a massive overhaul of the block I/O layer, to improve scalability, particularly on large systems. Not all block device drivers have been converted to the new infrastructure, and doubtless many bugs remain. Use with caution. Also see the notes on kernel 2.4.17 regarding binutils problems.

Old Production Kernels (2.2.x series)


General Note

The 2.2.x serial driver has a bug that interferes with interrupt sharing for multifunction cards. The effect is that opening a serial port on a multifunction card fails, giving an IO error.

The bug can be fixed by editing linux/drivers/char/serial.c and changing each use of IRQ_T(info) to IRQ_T(state).


The latest official kernel is 2.2.20

No known problems.

Archive of problems for kernel 2.2.15

A few security problems. Grab 2.2.16 instead.

Archive of problems for kernel 2.2.12

There still appear to be some stability problems.

Archive of problems for kernel 2.2.10

Some people have reported filesystem corruption.

Archive of problems for kernel 2.2.9

Some people have reported filesystem corruption.

The matroxfb driver won't run as a module. It must be built into the kernel, or you can fix it by adding:

EXPORT_SYMBOL(fb_con);
to the end of drivers/video/fbcon.c

Archive of problems for kernel 2.2.7

The via-rhine problem reported for kernel 2.2.6 remains. Use the same fix.

Archive of problems for kernel 2.2.6

When IrDA is enabled, the file net/irda/iriap.c does not compile. The 2.2.6-ac1 kernel is supposed to fix this ("ac" means Alan Cox). Alan's kernels are available from
ftp://ftp.kernel.org/pub/linux/kernel/people/alan/ or a mirror near you.

There is a run-time bug in the via-rhine driver. The following patch has been posted:

--- linux/drivers/net/via-rhine.c.orig  Sun Apr 11 16:16:17 1999
+++ linux/drivers/net/via-rhine.c       Fri Apr 16 16:46:17 1999
@@ -1053,6 +1053,7 @@
                        skb->protocol = eth_type_trans(skb, dev);
                        netif_rx(skb);
                        dev->last_rx = jiffies;
+                       np->stats.rx_bytes += pkt_len;
                        np->stats.rx_packets++;
                }
                entry = (++np->cur_rx) % RX_RING_SIZE;

The radio-cadet video capture driver doesn't compile. The following patch has been posted:

--- include/linux/videodev.h.stock	Sat Apr 17 11:00:04 1999
+++ include/linux/videodev.h	Sat Apr 17 11:00:34 1999
@@ -275,6 +275,7 @@
 #define VID_HARDWARE_GEMTEK	18
 #define VID_HARDWARE_TYPHOON	19
 #define VID_HARDWARE_VINO	20	/* Reserved for SGI Indy Vino */
+#define VID_HARDWARE_CADET	21	/* Cadet radio */
 
 /*
  *	Initialiser list

The MSDOS/FAT filesystems do not compile. The following patch should fix it:

diff -urN linux-2.2.6/fs/fat/fatfs_syms.c linux/fs/fat/fatfs_syms.c
--- linux-2.2.6/fs/fat/fatfs_syms.c	Thu Feb 25 10:03:56 1999
+++ linux/fs/fat/fatfs_syms.c	Tue Apr 20 00:19:38 1999
@@ -54,6 +54,7 @@
 EXPORT_SYMBOL(unlock_fat);
 EXPORT_SYMBOL(fat_dir_ioctl);
 EXPORT_SYMBOL(fat_readpage);
+EXPORT_SYMBOL(fat_is_binary);
 
 int init_fat_fs(void)
 {
diff -urN linux-2.2.6/fs/fat/inode.c linux/fs/fat/inode.c
--- linux-2.2.6/fs/fat/inode.c	Fri Apr 16 13:26:37 1999
+++ linux/fs/fat/inode.c	Tue Apr 20 00:18:36 1999
@@ -703,7 +703,7 @@
 	if(raw_entry->attr & ATTR_SYS)
 		if (MSDOS_SB(sb)->options.sys_immutable)
 			inode->i_flags |= S_IMMUTABLE;
-	MSDOS_I(inode)->i_binary = is_binary(MSDOS_SB(sb)->options.conversion,
+	MSDOS_I(inode)->i_binary = fat_is_binary(MSDOS_SB(sb)->options.conversion,
 	    raw_entry->ext);
 	MSDOS_I(inode)->i_attrs = raw_entry->attr & ATTR_UNUSED;
 	/* this is as close to the truth as we can get ... */
diff -urN linux-2.2.6/fs/fat/misc.c linux/fs/fat/misc.c
--- linux-2.2.6/fs/fat/misc.c	Thu Feb 25 10:03:56 1999
+++ linux/fs/fat/misc.c	Tue Apr 20 00:18:56 1999
@@ -55,7 +55,7 @@
  * the extension part of the file name.
  */
 
-int is_binary(char conversion,char *extension)
+int fat_is_binary(char conversion,char *extension)
 {
 	char *walk;
 
diff -urN linux-2.2.6/fs/msdos/namei.c linux/fs/msdos/namei.c
--- linux-2.2.6/fs/msdos/namei.c	Tue Apr 13 09:15:18 1999
+++ linux/fs/msdos/namei.c	Tue Apr 20 00:22:31 1999
@@ -713,7 +713,7 @@
 	fat_cache_inval_inode(old_inode);
 	old_inode->i_version = ++event;
 	MSDOS_I(old_inode)->i_binary =
-		is_binary(MSDOS_SB(sb)->options.conversion, free_de->ext);
+		fat_is_binary(MSDOS_SB(sb)->options.conversion, free_de->ext);
 	old_inode->i_ino = free_ino;
 	fat_mark_buffer_dirty(sb, free_bh, 1);
 	old_de->name[0] = DELETED_FLAG;
diff -urN linux-2.2.6/include/linux/msdos_fs.h linux/include/linux/msdos_fs.h
--- linux-2.2.6/include/linux/msdos_fs.h	Thu Feb 25 10:04:04 1999
+++ linux/include/linux/msdos_fs.h	Tue Apr 20 00:20:22 1999
@@ -195,7 +195,7 @@
 };
 
 /* misc.c */
-extern int is_binary(char conversion,char *extension);
+extern int fat_is_binary(char conversion,char *extension);
 extern void lock_fat(struct super_block *sb);
 extern void unlock_fat(struct super_block *sb);
 extern int fat_add_cluster(struct inode *inode);

Go back to my: Home Page, Linux Page or Linux Documentation Page.

Richard Gooch (rgooch at atnf dot csiro dot au)