I started looking further at the improvements we can make once generic_make_request is fixed, and realised that I had missed an important detail in this patch. Several places test current->bio_list, and two actually edit the list. With this change, that cannot see the whole lists, so it could cause a regression. So I've revised the patch to make sure that the entire list of queued bios remains visible, and change the relevant code to look at both the new list and the old list. Following that there are some patches which make the rescuer thread optional, and then starts removing it from some easy-to-fix places. The series summary is below. NeilBrown NeilBrown (5): blk: improve order of bio handling in generic_make_request() blk: remove bio_set arg from blk_queue_split() blk: make the bioset rescue_workqueue optional. blk: use non-rescuing bioset for q->bio_split. block_dev: make blkdev_dio_pool a non-rescuing bioset block/bio.c | 39 +++++++++++++++++++++++++++------ block/blk-core.c | 42 ++++++++++++++++++++++++++++------- block/blk-merge.c | 7 +++--- block/blk-mq.c | 4 ++- drivers/block/drbd/drbd_main.c | 2 +- drivers/block/drbd/drbd_req.c | 2 +- drivers/block/pktcdvd.c | 2 +- drivers/block/ps3vram.c | 2 +- drivers/block/rsxx/dev.c | 2 +- drivers/block/umem.c | 2 +- drivers/block/zram/zram_drv.c | 2 +- drivers/lightnvm/rrpc.c | 2 +- drivers/md/bcache/super.c | 4 ++- drivers/md/dm-crypt.c | 2 +- drivers/md/dm-io.c | 2 +- drivers/md/dm.c | 32 +++++++++++++++------------ drivers/md/md.c | 4 ++- drivers/md/raid10.c | 3 ++- drivers/md/raid5-cache.c | 2 +- drivers/s390/block/dcssblk.c | 2 +- drivers/s390/block/xpram.c | 2 +- drivers/target/target_core_iblock.c | 2 +- fs/btrfs/extent_io.c | 4 ++- fs/xfs/xfs_super.c | 2 +- include/linux/bio.h | 2 ++ include/linux/blkdev.h | 3 +-- 26 files changed, 114 insertions(+), 60 deletions(-)