2007-01-08 21:27:36

by Sumit Narayan

[permalink] [raw]
Subject: [BUG] sleeping function called from invalid context at kernel/sched.c

Hi,

I am trying to do file write operations in a thread (filewrite())
initiated from a jprobe (fs_vfs_write()) set on kernel function
(vfs_write()). Although the write operation succeed, I get this on my
log:

BUG: sleeping function called from invalid context at kernel/sched.c:3678
in_atomic():0, irqs_disabled():1
[<c011a65b>] __might_sleep+0xa5/0xab
[<c0343a00>] wait_for_completion+0x1a/0xc9
[<c0118480>] __wake_up+0x32/0x43
[<c012b33a>] __queue_work+0x42/0x4f
[<c012e0f7>] kthread_create+0x9b/0xd3
[<c012e00a>] keventd_create_kthread+0x0/0x52
[<f8a560d4>] filewrite+0x0/0xaf [fsTrace]
[<c03464b9>] do_page_fault+0x31f/0x5c5
[<f8a561da>] fs_vfs_write+0x57/0x9e [fsTrace]
[<f8a560d4>] filewrite+0x0/0xaf [fsTrace]
[<c015f396>] sys_write+0x41/0x67
[<c01034d1>] sysenter_past_esp+0x56/0x79
=======================

$ uname -a
Linux cluster3 2.6.19.1 #1 SMP Thu Dec 21 14:03:57 EST 2006 i686
athlon i386 GNU/Linux

I remember seeing something similar here on LKML, but am unable to
trace it right now. Any idea what's going wrong?

Thanks,
Sumit


2007-01-08 22:57:18

by Frederik Deweerdt

[permalink] [raw]
Subject: Re: [BUG] sleeping function called from invalid context at kernel/sched.c

On Mon, Jan 08, 2007 at 04:27:32PM -0500, Sumit Narayan wrote:
> Hi,
>
> I am trying to do file write operations in a thread (filewrite())
> initiated from a jprobe (fs_vfs_write()) set on kernel function
> (vfs_write()). Although the write operation succeed, I get this on my
> log:
>
> BUG: sleeping function called from invalid context at kernel/sched.c:3678
> in_atomic():0, irqs_disabled():1
> [<c011a65b>] __might_sleep+0xa5/0xab
> [<c0343a00>] wait_for_completion+0x1a/0xc9
> [<c0118480>] __wake_up+0x32/0x43
> [<c012b33a>] __queue_work+0x42/0x4f
> [<c012e0f7>] kthread_create+0x9b/0xd3
> [<c012e00a>] keventd_create_kthread+0x0/0x52
> [<f8a560d4>] filewrite+0x0/0xaf [fsTrace]
> [<c03464b9>] do_page_fault+0x31f/0x5c5
> [<f8a561da>] fs_vfs_write+0x57/0x9e [fsTrace]
> [<f8a560d4>] filewrite+0x0/0xaf [fsTrace]
> [<c015f396>] sys_write+0x41/0x67
> [<c01034d1>] sysenter_past_esp+0x56/0x79
> =======================
kprobe disables interrupts, and you're not supposed to sleep with
interrupts disabled. But you call keventd_create_kthread which sleeps,
and that issues this message.

Regards,
Frederik