[BUG] hugetlb: sleeping function called from invalid context

Gerald Schaefer
2008-08-06T14:46:18Z

Hi,

running the libhugetlbfs test suite I met the following bug:

BUG: sleeping function called from invalid context at include/linux/pagemap.h:294
in_atomic():1, irqs_disabled():0
CPU: 0 Not tainted 2.6.27-rc1 #3
Process private (pid: 4531, task: 000000003f68e400, ksp: 000000002a7e3be8)
0700000033a00700 000000002a7e3bf0 0000000000000002 0000000000000000
000000002a7e3c90 000000002a7e3c08 000000002a7e3c08 0000000000016472
0000000000000000 000000002a7e3be8 0000000000000000 0000000000000000
000000002a7e3bf0 000000000000000c 000000002a7e3bf0 000000002a7e3c60
0000000000337798 0000000000016472 000000002a7e3bf0 000000002a7e3c40
Call Trace:
([<00000000000163f4>] show_trace+0x130/0x140)
[<00000000000164cc>] show_stack+0xc8/0xfc
[<0000000000016c62>] dump_stack+0xb2/0xc0
[<000000000003d64a>] __might_sleep+0x136/0x154
[<000000000008badc>] find_lock_page+0x50/0xb8
[<00000000000b9b08>] hugetlb_fault+0x4c4/0x684
[<00000000000a3e3c>] handle_mm_fault+0x8ec/0xb54
[<00000000003338aa>] do_protection_exception+0x32a/0x3b4
[<00000000000256b2>] sysc_return+0x0/0x8
[<0000000000400fba>] 0x400fba

While holding mm->page_table_lock, hugetlb_fault() calls hugetlbfs_pagecache_page(),
which calls find_lock_page(), which may sleep.

Thanks,
Gerald