From patchwork Fri Jan 12 23:17:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Snitzer X-Patchwork-Id: 10161877 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 79ED560327 for ; Fri, 12 Jan 2018 23:17:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 699F128A90 for ; Fri, 12 Jan 2018 23:17:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5BE4028A99; Fri, 12 Jan 2018 23:17:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CC4EC28A90 for ; Fri, 12 Jan 2018 23:17:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965260AbeALXRR (ORCPT ); Fri, 12 Jan 2018 18:17:17 -0500 Received: from mx1.redhat.com ([209.132.183.28]:51600 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965236AbeALXRQ (ORCPT ); Fri, 12 Jan 2018 18:17:16 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B19A94E33E; Fri, 12 Jan 2018 23:17:16 +0000 (UTC) Received: from localhost (unknown [10.18.25.149]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8E8AA60C4B; Fri, 12 Jan 2018 23:17:09 +0000 (UTC) Date: Fri, 12 Jan 2018 18:17:08 -0500 From: Mike Snitzer To: Bart Van Assche Cc: "dm-devel@redhat.com" , "hch@infradead.org" , "linux-block@vger.kernel.org" , "axboe@kernel.dk" , "martin.petersen@oracle.com" , "axboe@fb.com" , "ming.lei@redhat.com" Subject: Re: [PATCH V3 0/5] dm-rq: improve sequential I/O performance Message-ID: <20180112231708.GA6722@redhat.com> References: <1515710256.2752.72.camel@sandisk.com> <20180112014232.GB25090@ming.t460p> <20180112015721.GB32298@redhat.com> <20180112033308.GC25090@ming.t460p> <20180112171840.GA4541@redhat.com> <1515778013.2396.3.camel@wdc.com> <20180112174000.GB5134@redhat.com> <1515779211.2396.11.camel@wdc.com> <20180112180635.GD5134@redhat.com> <1515783288.2396.37.camel@wdc.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1515783288.2396.37.camel@wdc.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Fri, 12 Jan 2018 23:17:16 +0000 (UTC) Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On Fri, Jan 12 2018 at 1:54pm -0500, Bart Van Assche wrote: > The intention of commit 6077c2d706097c0 was to address the last mentioned > case. It may be possible to move the delayed queue rerun from the > dm_queue_rq() into dm_requeue_original_request(). But I think it would be > wrong to rerun the queue immediately in case a SCSI target system returns > "BUSY". This is my 3rd reply to this email.. 3rd time's the charm? ;) Here is a patch that will kick the hw queues via blk_mq_requeue_work(), indirectly from dm-rq.c:__dm_mq_kick_requeue_list(), after a delay if BLK_STS_RESOURCE is returned from the target. Your thoughts on this patch as an alternative to commit 6077c2d7060 ? Thanks, Mike diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index d8c7259..ab2cfdc 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c @@ -1570,7 +1570,10 @@ static int multipath_end_io(struct dm_target *ti, struct request *clone, if (error && blk_path_error(error)) { struct multipath *m = ti->private; - r = DM_ENDIO_REQUEUE; + if (r == BLK_STS_RESOURCE) + r = DM_ENDIO_DELAY_REQUEUE; + else + r = DM_ENDIO_REQUEUE; if (pgpath) fail_path(pgpath); diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c index 6b01298..ab0ed2d 100644 --- a/drivers/md/dm-rq.c +++ b/drivers/md/dm-rq.c @@ -315,6 +315,10 @@ static void dm_done(struct request *clone, blk_status_t error, bool mapped) /* The target wants to requeue the I/O */ dm_requeue_original_request(tio, false); break; + case DM_ENDIO_DELAY_REQUEUE: + /* The target wants to requeue the I/O after a delay */ + dm_requeue_original_request(tio, true); + break; default: DMWARN("unimplemented target endio return value: %d", r); BUG(); diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 9ba8453..da83f64 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h @@ -550,6 +550,7 @@ struct dm_table *dm_swap_table(struct mapped_device *md, #define DM_ENDIO_DONE 0 #define DM_ENDIO_INCOMPLETE 1 #define DM_ENDIO_REQUEUE 2 +#define DM_ENDIO_DELAY_REQUEUE 3 /* * Definitions of return values from target map function. @@ -557,7 +558,7 @@ struct dm_table *dm_swap_table(struct mapped_device *md, #define DM_MAPIO_SUBMITTED 0 #define DM_MAPIO_REMAPPED 1 #define DM_MAPIO_REQUEUE DM_ENDIO_REQUEUE -#define DM_MAPIO_DELAY_REQUEUE 3 +#define DM_MAPIO_DELAY_REQUEUE DM_ENDIO_DELAY_REQUEUE #define DM_MAPIO_KILL 4 #define dm_sector_div64(x, y)( \