• I
    xen: netfront: hold RTNL when updating features. · 1ba37c51
    Ian Campbell 提交于
    Konrad reports:
    [    0.930811] RTNL: assertion failed at /home/konrad/ssd/linux/net/core/dev.c (5258)
    [    0.930821] Pid: 22, comm: xenwatch Not tainted 2.6.39-05193-gd762f438 #1
    [    0.930825] Call Trace:
    [    0.930834]  [<ffffffff8143bd0e>] __netdev_update_features+0xae/0xe0
    [    0.930840]  [<ffffffff8143dd41>] netdev_update_features+0x11/0x30
    [    0.930847]  [<ffffffffa0037105>] netback_changed+0x4e5/0x800 [xen_netfront]
    [    0.930854]  [<ffffffff8132a838>] xenbus_otherend_changed+0xa8/0xb0
    [    0.930860]  [<ffffffff8157ca99>] ? _raw_spin_unlock_irqrestore+0x19/0x20
    [    0.930866]  [<ffffffff8132adfe>] backend_changed+0xe/0x10
    [    0.930871]  [<ffffffff8132875a>] xenwatch_thread+0xba/0x180
    [    0.930876]  [<ffffffff810a8ba0>] ? wake_up_bit+0x40/0x40
    [    0.930881]  [<ffffffff813286a0>] ? split+0xf0/0xf0
    [    0.930886]  [<ffffffff810a8646>] kthread+0x96/0xa0
    [    0.930891]  [<ffffffff815855a4>] kernel_thread_helper+0x4/0x10
    [    0.930896]  [<ffffffff815846b3>] ? int_ret_from_sys_call+0x7/0x1b
    [    0.930901]  [<ffffffff8157cf61>] ? retint_restore_args+0x5/0x6
    [    0.930906]  [<ffffffff815855a0>] ? gs_change+0x13/0x13
    
    This update happens in xenbus watch callback context and hence does not already
    hold the rtnl. Take the lock as necessary.
    Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
    Tested-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    1ba37c51
xen-netfront.c 47.0 KB