From: Damien Le Moal Date: Mon, 8 May 2017 23:40:46 +0000 (-0700) Subject: dm: fix REQ_OP_ZONE_RESET bio handling X-Git-Tag: v4.14-rc1~576^2~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a4aa5e56e5189b88a2891cdcc350dac618810354;p=platform%2Fkernel%2Flinux-rpi.git dm: fix REQ_OP_ZONE_RESET bio handling The REQ_OP_ZONE_RESET bio has no payload and zero sectors. Its position is the only information used to indicate the zone to reset on the device. Due to its zero length, this bio is not cloned and sent to the target through the non-flush case in __split_and_process_bio(). Add an additional case in that function to call __split_and_process_non_flush() without checking the clone info size. Signed-off-by: Damien Le Moal Reviewed-by: Hannes Reinecke Reviewed-by: Bart Van Assche Signed-off-by: Mike Snitzer --- diff --git a/drivers/md/dm.c b/drivers/md/dm.c index ff22aa2..d85adec 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1384,6 +1384,10 @@ static void __split_and_process_bio(struct mapped_device *md, ci.sector_count = 0; error = __send_empty_flush(&ci); /* dec_pending submits any data associated with flush */ + } else if (bio_op(bio) == REQ_OP_ZONE_RESET) { + ci.bio = bio; + ci.sector_count = 0; + error = __split_and_process_non_flush(&ci); } else { ci.bio = bio; ci.sector_count = bio_sectors(bio);