[UBI UBIFS] replace vmalloc with kmalloc

From: JiSheng Zhang
Date: Fri Aug 07 2009 - 05:02:51 EST


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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/