From 5718720410b5b04a7c86767a502bc13fd94d2c79 Mon Sep 17 00:00:00 2001 From: Mike Snitzer Date: Thu, 14 Feb 2019 19:30:47 +0800 Subject: [PATCH] dm: fix dm_wq_work() to only use __split_and_process_bio() if appropriate mainline inclusion from mainline-5.0-rc4 commit 6548c7c538e5658cbce686c2dd1a9b4f5398bf34 category: bugfix bugzilla: 7220 CVE: NA --------------------------- Otherwise targets that don't support/expect IO splitting could resubmit bios using code paths with unnecessary IO splitting complexity. Depends-on: 24113d487843 ("dm: avoid indirect call in __dm_make_request") Fixes: 978e51ba38e00 ("dm: optimize bio-based NVMe IO submission") Signed-off-by: Mike Snitzer Signed-off-by: yangerkun Reviewed-by: Hou Tao Signed-off-by: Yang Yingliang --- drivers/md/dm.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/md/dm.c b/drivers/md/dm.c index d85b2ee9ff61..e5f987260ced 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1701,6 +1701,15 @@ static blk_qc_t __process_bio(struct mapped_device *md, return ret; } +static blk_qc_t dm_process_bio(struct mapped_device *md, + struct dm_table *map, struct bio *bio) +{ + if (dm_get_md_type(md) == DM_TYPE_NVME_BIO_BASED) + return __process_bio(md, map, bio); + else + return __split_and_process_bio(md, map, bio); +} + static blk_qc_t dm_make_request(struct request_queue *q, struct bio *bio) { struct mapped_device *md = q->queuedata; @@ -1721,10 +1730,7 @@ static blk_qc_t dm_make_request(struct request_queue *q, struct bio *bio) return ret; } - if (dm_get_md_type(md) == DM_TYPE_NVME_BIO_BASED) - ret = __process_bio(md, map, bio); - else - ret = __split_and_process_bio(md, map, bio); + ret = dm_process_bio(md, map, bio); dm_put_live_table(md, srcu_idx); return ret; @@ -2426,9 +2432,9 @@ static void dm_wq_work(struct work_struct *work) break; if (dm_request_based(md)) - generic_make_request(c); + (void) generic_make_request(c); else - __split_and_process_bio(md, map, c); + (void) dm_process_bio(md, map, c); } dm_put_live_table(md, srcu_idx); -- GitLab