On Thu, Feb 09, 2023 at 08:55:27PM +0800, Ming Lei wrote: > 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@xxxxxxxxxx> > Fixes: 80a761fd33cf ("block: implement mixed merge of different failfast requests") > Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> > --- > block/blk-merge.c | 35 +++++++++++++++++++++++++++++++++-- > 1 file changed, 33 insertions(+), 2 deletions(-) Hi Tejun, Jens and Guys, Any chance to take a look? The patch addresses one RH customer issue. Thanks, Ming