From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bart Van Assche Subject: dm-mq and end_clone_request() Date: Tue, 19 Jul 2016 15:57:34 -0700 Message-ID: <4ed669ed-beae-76a8-b806-a284565b327a@sandisk.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com To: Mike Snitzer Cc: device-mapper development List-Id: dm-devel.ids Hello Mike, If I run a fio data integrity test against kernel v4.7-rc7 then I see often that fio reports I/O errors if a path is removed despite queue_if_no_path having been set in /etc/multipath.conf. Further analysis showed that this happens because during SCSI device removal a SCSI device enters state SDEV_CANCEL before the block layer queue is marked as "dying". In that state I/O requests submitted to that SCSI device are failed with -EIO. The behavior for end_clone_request() in drivers/md/dm.c for such requests is as follows: - With multiqueue support disabled, call __blk_put_request() and ignore the "error" argument passed to end_clone_request(). - With multiqueue support enabled, pass the "error" argument to dm_complete_request(). Shouldn't end_clone_request() requeue failed requests in both cases instead of passing the I/O error to the submitter only if multiqueue is enabled? Thanks, Bart.