1. 02 Nov, 2022 12 commits
  2. 01 Nov, 2022 15 commits
  3. 31 Oct, 2022 4 commits
  4. 25 Oct, 2022 8 commits
  5. 24 Oct, 2022 1 commit
    • Jinlong Chen's avatar
      block: fix up elevator_type refcounting · 8ed40ee3
      Jinlong Chen authored
      The current reference management logic of io scheduler modules contains
      refcnt problems. For example, blk_mq_init_sched may fail before or after
      the calling of e->ops.init_sched. If it fails before the calling, it does
      nothing to the reference to the io scheduler module. But if it fails after
      the calling, it releases the reference by calling kobject_put(&eq->kobj).
      
      As the callers of blk_mq_init_sched can't know exactly where the failure
      happens, they can't handle the reference to the io scheduler module
      properly: releasing the reference on failure results in double-release if
      blk_mq_init_sched has released it, and not releasing the reference results
      in ghost reference if blk_mq_init_sched did not release it either.
      
      The same problem also exists in io schedulers' init_sched implementations.
      
      We can address the problem by adding releasing statements to the error
      handling procedures of blk_mq_init_sched and init_sched implementations.
      But that is counterintuitive and requires modifications to existing io
      schedulers.
      
      Instead, We make elevator_alloc get the io scheduler module references
      that will be released by elevator_release. And then, we match each
      elevator_get with an elevator_put. Therefore, each reference to an io
      scheduler module explicitly has its own getter and releaser, and we no
      longer need to worry about the refcnt problems.
      
      The bugs and the patch can be validated with tools here:
      https://github.com/nickyc975/linux_elv_refcnt_bug.git
      
      [hch: split out a few bits into separate patches, use a non-try
            module_get in elevator_alloc]
      Signed-off-by: default avatarJinlong Chen <nickyc975@zju.edu.cn>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      Link: https://lore.kernel.org/r/20221020064819.1469928-5-hch@lst.deSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
      8ed40ee3