Skip to content
  • Bart Van Assche's avatar
    block: Fix a blk_exit_rl() regression · dc9edc44
    Bart Van Assche authored
    
    
    Avoid that the following complaint is reported:
    
     BUG: sleeping function called from invalid context at kernel/workqueue.c:2790
     in_atomic(): 1, irqs_disabled(): 0, pid: 41, name: rcuop/3
     1 lock held by rcuop/3/41:
      #0:  (rcu_callback){......}, at: [<ffffffff8111f9a2>] rcu_nocb_kthread+0x282/0x500
     Call Trace:
      dump_stack+0x86/0xcf
      ___might_sleep+0x174/0x260
      __might_sleep+0x4a/0x80
      flush_work+0x7e/0x2e0
      __cancel_work_timer+0x143/0x1c0
      cancel_work_sync+0x10/0x20
      blk_throtl_exit+0x25/0x60
      blkcg_exit_queue+0x35/0x40
      blk_release_queue+0x42/0x130
      kobject_put+0xa9/0x190
    
    This happens since we invoke callbacks that need to block from the
    queue release handler. Fix this by pushing the final release to
    a workqueue.
    
    Reported-by: default avatarRoss Zwisler <zwisler@gmail.com>
    Fixes: commit b425e504
    
     ("block: Avoid that blk_exit_rl() triggers a use-after-free")
    Signed-off-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
    Tested-by: default avatarRoss Zwisler <ross.zwisler@linux.intel.com>
    
    Updated changelog
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    dc9edc44