Sunday, December 19, 2010

Linux 2.6.35 + glibc compiled with >linux-header-2.6.34 == Unusable MIPS N32 System

getdents64 was added to N32 ABI during 2.6.35 merge window. But it has a problem which is later fixed by a patch merged in 2.6.36 window.

IIRC, readdir in glibc works with both getdents and getdents64, and it prefers getdents64 if it is available.

So if your glibc is compiled against linux-header-2.6.35 and upwards, readdir will use getdents64, but on Linux 2.6.35 it actually calls getdents. So readdir will be confused.

As a consequence, you will have problems accessing files. The system will be effectively unusable.

So if you have encountered this problem, pray that you have another system which could boot the machine. Compile a kernel 2.6.36 or upwards and use it to boot the system. Then you should be able to get your system back.