• 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
blk-flush.c 13.7 KB