[UBI UBIFS] replace vmalloc with kmalloc

JiSheng Zhang jszhang3 at gmail.com
Fri Aug 7 05:02:43 EDT 2009


If nandflash driver use DMA to support UBI and UBIFS i/o, there will
be panic like
the following. This is because UBI and UBIFS use vmalloced buffer
somewhere while
nandflash driver put the buffer under DMA and DMA support doesn't like vmalloced
memory.
[  412.369280] UBIFS: default file-system created
[  412.374879] Unable to handle kernel NULL pointer dereference at
virtual address 00000000
[  412.383177] UBIFS: background thread "ubifs_bgt0_0" started, PID 887
[  412.389656] pgd = c0004000
[  412.392419] [00000000] *pgd=00000000
[  412.396117] Internal error: Oops: 817 [#1] PREEMPT

Yes, I know kmalloc may fail when memory get fragmented, but I grep the UBI and
UBIFS's source, there are six .c files and seven .c files using
vmalloc, the function
which call vmalloc are all called during the ubi being attached and
the volume being
mounted. In embedded system, this mainly happen during kernel boot, it
should succeed.

After replacing vmalloc with kmalloc, ubi and ubifs runs fine on my
board. I can alos upload
a patch.

Comments are welcomed!

Jisheng



More information about the linux-mtd mailing list