Skip to content
  • Trond Myklebust's avatar
    SUNRPC: Don't call __UDPX_INC_STATS() from a preemptible context · 0afa6b44
    Trond Myklebust authored
    Calling __UDPX_INC_STATS() from a preemptible context leads to a
    warning of the form:
    
     BUG: using __this_cpu_add() in preemptible [00000000] code: kworker/u5:0/31
     caller is xs_udp_data_receive_workfn+0x194/0x270
     CPU: 1 PID: 31 Comm: kworker/u5:0 Not tainted 4.15.0-rc8-00076-g90ea9f1b
    
     #2
     Workqueue: xprtiod xs_udp_data_receive_workfn
     Call Trace:
      dump_stack+0x85/0xc1
      check_preemption_disabled+0xce/0xe0
      xs_udp_data_receive_workfn+0x194/0x270
      process_one_work+0x318/0x620
      worker_thread+0x20a/0x390
      ? process_one_work+0x620/0x620
      kthread+0x120/0x130
      ? __kthread_bind_mask+0x60/0x60
      ret_from_fork+0x24/0x30
    
    Since we're taking a spinlock in those functions anyway, let's fix the
    issue by moving the call so that it occurs under the spinlock.
    
    Reported-by: default avatarkernel test robot <fengguang.wu@intel.com>
    Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
    0afa6b44