Hello Guys, The 1st patch adds bio_rewind which can restore bio to original position by recording sectors between the original position to bio's end sector if the bio's end sector won't change, which should be very common to see. The 2nd and 3rd patch cleans up dm code for handling requeue & completion. The last patch implements 2 stage dm io requeue for avoiding to allocate one bio beforehand for just handling requeue which is one unusual event. The 1st stage requeue is added for cloning & restoring original bio in wq context, then 2nd stage requeue will use that as original bio for handling requeue. Ming Lei (4): block: add bio_rewind() API dm: add new helper for handling dm_io requeue dm: improve handling for DM_REQUEUE and AGAIN dm: add two stage requeue block/bio-integrity.c | 19 ++++ block/bio.c | 19 ++++ block/blk-crypto-internal.h | 7 ++ block/blk-crypto.c | 23 +++++ drivers/md/dm-core.h | 11 ++- drivers/md/dm.c | 180 ++++++++++++++++++++++++++++-------- include/linux/bio.h | 21 +++++ include/linux/bvec.h | 33 +++++++ 8 files changed, 271 insertions(+), 42 deletions(-) -- 2.31.1