• Ming Lei's avatar
    block: sync mixed merged request's failfast with 1st bio's · 3ce6a115
    Ming Lei authored
    We support mixed merge for requests/bios with different fastfail
    settings. When request fails, each time we only handle the portion
    with same failfast setting, then bios with failfast can be failed
    immediately, and bios without failfast can be retried.
    
    The idea is pretty good, but the current implementation has several
    defects:
    
    1) initially RA bio doesn't set failfast, however bio merge code
    doesn't consider this point, and just check its failfast setting for
    deciding if mixed merge is required. Fix this issue by adding helper
    of bio_failfast().
    
    2) when merging bio to request front, if this request is mixed
    merged, we have to sync request's faifast setting with 1st bio's
    failfast. Fix it by calling blk_update_mixed_merge().
    
    3) when merging bio to request back, if this request is mixed
    merged, we have to mark the bio as failfast, because blk_update_request
    simply updates request failfast with 1st bio's failfast. Fix
    it by calling blk_update_mixed_merge().
    
    Fixes one normal EXT4 READ IO failure issue, because it is observed
    that the normal READ IO is merged with RA IO, and the mixed merged
    request has different failfast setting with 1st bio's, so finally
    the normal READ IO doesn't get retried.
    
    Cc: Tejun Heo <tj@kernel.org>
    Fixes: 80a761fd ("block: implement mixed merge of different failfast requests")
    Signed-off-by: default avatarMing Lei <ming.lei@redhat.com>
    Link: https://lore.kernel.org/r/20230209125527.667004-1-ming.lei@redhat.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    3ce6a115
blk-merge.c 31.6 KB