• Andrey Yurovsky's avatar
    mac80211: fix allocation in mesh_queue_preq · 59615b5f
    Andrey Yurovsky authored
    We allocate a PREQ queue node in mesh_queue_preq, however the allocation
    may cause us to sleep.  Use GFP_ATOMIC to prevent this.
    
    [ 1869.126498] BUG: scheduling while atomic: ping/1859/0x10000100
    [ 1869.127164] Modules linked in: ath5k mac80211 ath
    [ 1869.128310] Pid: 1859, comm: ping Not tainted 2.6.30-wl #1
    [ 1869.128754] Call Trace:
    [ 1869.129293]  [<c1023a2b>] __schedule_bug+0x48/0x4d
    [ 1869.129866]  [<c13b5533>] __schedule+0x77/0x67a
    [ 1869.130544]  [<c1026f2e>] ? release_console_sem+0x17d/0x185
    [ 1869.131568]  [<c807cf47>] ? mesh_queue_preq+0x2b/0x165 [mac80211]
    [ 1869.132318]  [<c13b5b3e>] schedule+0x8/0x1f
    [ 1869.132807]  [<c1023c12>] __cond_resched+0x16/0x2f
    [ 1869.133478]  [<c13b5bf0>] _cond_resched+0x27/0x32
    [ 1869.134191]  [<c108a370>] kmem_cache_alloc+0x1c/0xcf
    [ 1869.134714]  [<c10273ae>] ? printk+0x15/0x17
    [ 1869.135670]  [<c807cf47>] mesh_queue_preq+0x2b/0x165 [mac80211]
    [ 1869.136731]  [<c807d1f8>] mesh_nexthop_lookup+0xee/0x12d [mac80211]
    [ 1869.138130]  [<c807417e>] ieee80211_xmit+0xe6/0x2b2 [mac80211]
    [ 1869.138935]  [<c80be46d>] ? ath5k_hw_setup_rx_desc+0x0/0x66 [ath5k]
    [ 1869.139831]  [<c80c97bc>] ? ath5k_tasklet_rx+0xba/0x506 [ath5k]
    [ 1869.140863]  [<c8075191>] ieee80211_subif_start_xmit+0x6c9/0x6e4
    [mac80211]
    [ 1869.141665]  [<c105cf1c>] ? handle_level_irq+0x78/0x9d
    [ 1869.142390]  [<c12e3f93>] dev_hard_start_xmit+0x168/0x1c7
    [ 1869.143092]  [<c12f1f17>] __qdisc_run+0xe1/0x1b7
    [ 1869.143612]  [<c12e25ff>] qdisc_run+0x18/0x1a
    [ 1869.144248]  [<c12e62f4>] dev_queue_xmit+0x16a/0x25a
    [ 1869.144785]  [<c13b6dcc>] ? _read_unlock_bh+0xe/0x10
    [ 1869.145465]  [<c12eacdb>] neigh_resolve_output+0x19c/0x1c7
    [ 1869.146182]  [<c130e2da>] ? ip_finish_output+0x0/0x51
    [ 1869.146697]  [<c130e2a0>] ip_finish_output2+0x182/0x1bc
    [ 1869.147358]  [<c130e327>] ip_finish_output+0x4d/0x51
    [ 1869.147863]  [<c130e9d5>] ip_output+0x80/0x85
    [ 1869.148515]  [<c130cc49>] dst_output+0x9/0xb
    [ 1869.149141]  [<c130dec6>] ip_local_out+0x17/0x1a
    [ 1869.149632]  [<c130e0bc>] ip_push_pending_frames+0x1f3/0x255
    [ 1869.150343]  [<c13247ff>] raw_sendmsg+0x5e6/0x667
    [ 1869.150883]  [<c1033c55>] ? insert_work+0x6a/0x73
    [ 1869.151834]  [<c8071e00>] ?
    ieee80211_invoke_rx_handlers+0x17da/0x1ae8 [mac80211]
    [ 1869.152630]  [<c132bd68>] inet_sendmsg+0x3b/0x48
    [ 1869.153232]  [<c12d7deb>] __sock_sendmsg+0x45/0x4e
    [ 1869.153740]  [<c12d8537>] sock_sendmsg+0xb8/0xce
    [ 1869.154519]  [<c80be46d>] ? ath5k_hw_setup_rx_desc+0x0/0x66 [ath5k]
    [ 1869.155289]  [<c1036b25>] ? autoremove_wake_function+0x0/0x30
    [ 1869.155859]  [<c115992b>] ? __copy_from_user_ll+0x11/0xce
    [ 1869.156573]  [<c1159d99>] ? copy_from_user+0x31/0x54
    [ 1869.157235]  [<c12df646>] ? verify_iovec+0x40/0x6e
    [ 1869.157778]  [<c12d869a>] sys_sendmsg+0x14d/0x1a5
    [ 1869.158714]  [<c8072c40>] ? __ieee80211_rx+0x49e/0x4ee [mac80211]
    [ 1869.159641]  [<c80c83fe>] ? ath5k_rxbuf_setup+0x6d/0x8d [ath5k]
    [ 1869.160543]  [<c80be46d>] ? ath5k_hw_setup_rx_desc+0x0/0x66 [ath5k]
    [ 1869.161434]  [<c80beba4>] ? ath5k_hw_get_rxdp+0xe/0x10 [ath5k]
    [ 1869.162319]  [<c80c97bc>] ? ath5k_tasklet_rx+0xba/0x506 [ath5k]
    [ 1869.163063]  [<c1005627>] ? enable_8259A_irq+0x40/0x43
    [ 1869.163594]  [<c101edb8>] ? __dequeue_entity+0x23/0x27
    [ 1869.164793]  [<c100187a>] ? __switch_to+0x2b/0x105
    [ 1869.165442]  [<c1021d5f>] ? finish_task_switch+0x5b/0x74
    [ 1869.166129]  [<c12d963a>] sys_socketcall+0x14b/0x17b
    [ 1869.166612]  [<c1002b95>] syscall_call+0x7/0xb
    Signed-off-by: default avatarAndrey Yurovsky <andrey@cozybit.com>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    59615b5f
mesh_hwmp.c 24 KB