From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keith Busch Subject: Re: blk-mq request allocation stalls Date: Mon, 12 Jan 2015 18:35:59 +0000 (UTC) Message-ID: References: <20150109194955.GA32641@redhat.com> <54B042FE.2000205@kernel.dk> <54B043FC.8000902@kernel.dk> <20150109214015.GA1032@redhat.com> <54B04E94.3010403@kernel.dk> <20150109222543.GA1190@redhat.com> <54B071DC.9000307@kernel.dk> <20150110014811.GA2384@redhat.com> <54B08779.2080705@kernel.dk> <20150110031057.GA2823@redhat.com> <54B3DE54.7090909@sandisk.com> <54B3EB4A.9090404@kernel.dk> <54B3F255.5080802@sandisk.com> <54B3F78D.2020704@kernel.dk> <54B3FE89.200@sandisk.com> <54B3FFAE.4070609@kernel.dk> <54B40E8A.6010005@kernel.dk> Reply-To: device-mapper development Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com To: Keith Busch Cc: Jens Axboe , Mike Snitzer , Christoph Hellwig , device-mapper development , Jun'ichi Nomura , Bart Van Assche List-Id: dm-devel.ids On Mon, 12 Jan 2015, Keith Busch wrote: > Oh, let's look at "__blk_rq_prep_clone". dm calls that after > blk_get_request() for the blk-mq based multipath types and overrides the > destinations cmd_flags with the source's even though the source was not > allocated from a blk-mq based queue, much less a shared tag. Untested patch. This will also preserve the failfast cmd_flag dm-mpath set after allocating. --- diff --git a/block/blk-core.c b/block/blk-core.c index 7e78931..6201090 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -2895,7 +2895,10 @@ EXPORT_SYMBOL_GPL(blk_rq_unprep_clone); static void __blk_rq_prep_clone(struct request *dst, struct request *src) { dst->cpu = src->cpu; - dst->cmd_flags = (src->cmd_flags & REQ_CLONE_MASK) | REQ_NOMERGE; + if (dst->q->mq_ops) + dst->cmd_flags |= (src->cmd_flags & REQ_CLONE_MASK) | REQ_NOMERGE; + else + dst->cmd_flags = (src->cmd_flags & REQ_CLONE_MASK) | REQ_NOMERGE; dst->cmd_type = src->cmd_type; dst->__sector = blk_rq_pos(src); dst->__data_len = blk_rq_bytes(src); --