Skip to content
Snippets Groups Projects
  1. May 20, 2023
  2. Apr 16, 2023
  3. Apr 13, 2023
  4. Sep 30, 2022
  5. Jul 14, 2022
  6. Feb 02, 2022
  7. Dec 03, 2021
  8. Nov 29, 2021
  9. Nov 19, 2021
  10. Oct 19, 2021
  11. Aug 18, 2021
    • Ming Lei's avatar
      blk-mq: fix is_flush_rq · a9ed27a7
      Ming Lei authored
      
      is_flush_rq() is called from bt_iter()/bt_tags_iter(), and runs the
      following check:
      
      	hctx->fq->flush_rq == req
      
      but the passed hctx from bt_iter()/bt_tags_iter() may be NULL because:
      
      1) memory re-order in blk_mq_rq_ctx_init():
      
      	rq->mq_hctx = data->hctx;
      	...
      	refcount_set(&rq->ref, 1);
      
      OR
      
      2) tag re-use and ->rqs[] isn't updated with new request.
      
      Fix the issue by re-writing is_flush_rq() as:
      
      	return rq->end_io == flush_end_io;
      
      which turns out simpler to follow and immune to data race since we have
      ordered WRITE rq->end_io and refcount_set(&rq->ref, 1).
      
      Fixes: 2e315dc0 ("blk-mq: grab rq->refcount before calling ->fn in blk_mq_tagset_busy_iter")
      Cc: "Blank-Burian, Markus, Dr." <blankburian@uni-muenster.de>
      Cc: Yufen Yu <yuyufen@huawei.com>
      Signed-off-by: default avatarMing Lei <ming.lei@redhat.com>
      Link: https://lore.kernel.org/r/20210818010925.607383-1-ming.lei@redhat.com
      
      
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      a9ed27a7
  12. Aug 17, 2021
  13. May 24, 2021
  14. Jan 27, 2021
  15. Dec 08, 2020
  16. Dec 01, 2020
  17. Nov 13, 2020
  18. Oct 30, 2020
  19. Aug 11, 2020
  20. Jul 17, 2020
    • Yufen Yu's avatar
      block: defer flush request no matter whether we have elevator · b5718d6c
      Yufen Yu authored
      
      Commit 7520872c ("block: don't defer flushes on blk-mq + scheduling")
      tried to fix deadlock for cycled wait between flush requests and data
      request into flush_data_in_flight. The former holded all driver tags
      and wait for data request completion, but the latter can not complete
      for waiting free driver tags.
      
      After commit 923218f6 ("blk-mq: don't allocate driver tag upfront
      for flush rq"), flush requests will not get driver tag before queuing
      into flush queue.
      
      * With elevator, flush request just get sched_tags before inserting
        flush queue. It will not get driver tag until issue them to driver.
        data request on list fq->flush_data_in_flight will complete in
        the end.
      
      * Without elevator, each flush request will get a driver tag when
        allocate request. Then data request on fq->flush_data_in_flight
        don't worry about lacking driver tag.
      
      In both of these cases, cycled wait cannot be true. So we may allow
      to defer flush request.
      
      Signed-off-by: default avatarYufen Yu <yuyufen@huawei.com>
      Reviewed-by: default avatarMing Lei <ming.lei@redhat.com>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      b5718d6c
  21. Jul 08, 2020
  22. Jul 02, 2020
  23. Jun 30, 2020
Loading