Eternal loop in fill_autooob_layout

Braden Simpson braden.simpson at
Sun Jan 15 20:20:46 EST 2006

Hi all,

I'm pretty new to this whole Linux and MTD thing so my apologies in
advance if I seem to
be unusually clueless in this regard.

I am working on getting a 2.6.16 kernel to boot from a Diskonchip 2000
TSOP on a PC/104
'embedded' platform with mixed success.

When I patch my kernel with any of the more recent MTD
snapshots (12th Jan 2006
for example) it causes the kernel to hang on startup.  I have tracked
down the location of the hang to the fill_autooob_layout function in
nand_base.c and it appears that the while loop is
never being exited.

Turning on the MTD kernel debug to level three gives a continuous stream of:

     fill_autooob_layout: oob concatenated, aggregate length 0

Note that this is being logged by the second kernel debug line in the
'else' clause.  Further
investigation shows that the 'i' counter never gets incremented above
2 and if I follow the code
it is reasonably obvious why.  Neither loop termination condition will
ever become true as 'i' is
decremented and incremented by one each loop, and 'cur' is always
incremented by zero!

What is not so obvious is what this routine is doing as the unpatched
MTD version of the
nand_base.c code in the kernel doesn't have this routine and
works as expected.
Can anybody provide any pointers as to what should be happening here?


Braden Simpson

More information about the linux-mtd mailing list