Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755915AbaLWLlp (ORCPT ); Tue, 23 Dec 2014 06:41:45 -0500 Received: from mail-wg0-f49.google.com ([74.125.82.49]:40601 "EHLO mail-wg0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755494AbaLWLlo (ORCPT ); Tue, 23 Dec 2014 06:41:44 -0500 Date: Tue, 23 Dec 2014 12:41:40 +0100 From: Dongsu Park To: Christoph Hellwig Cc: linux-kernel@vger.kernel.org, Jens Axboe , Kent Overstreet , Ming Lin , Al Viro , Ming Lei , Neil Brown , Alasdair Kergon , Mike Snitzer , dm-devel@redhat.com, drbd-dev@lists.linbit.com, Jiri Kosina , Geoff Levand , Jim Paris , Joshua Morris , Philip Kelleher , Minchan Kim , Nitin Gupta , Oleg Drokin , Andreas Dilger Subject: Re: [RFC PATCH 01/17] block: make generic_make_request handle arbitrarily sized bios Message-ID: <20141223114140.GB15080@gmail.com> References: <20141223101614.GA13138@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20141223101614.GA13138@infradead.org> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Christoph, On 23.12.2014 02:16, Christoph Hellwig wrote: > > +void blk_queue_split(struct request_queue *q, struct bio **bio, > > + struct bio_set *bs) > > +{ > > + struct bio *split; > > + > > + if ((*bio)->bi_rw & REQ_DISCARD) > > + split = blk_bio_discard_split(q, *bio, bs); > > + else if ((*bio)->bi_rw & REQ_WRITE_SAME) > > + split = blk_bio_write_same_split(q, *bio, bs); > > + else > > + split = blk_bio_segment_split(q, *bio, q->bio_split); > > + > > + if (split) { > > + bio_chain(split, *bio); > > + generic_make_request(*bio); > > + *bio = split; > > + } > > +} > > +EXPORT_SYMBOL(blk_queue_split); > > I think blk_queue_split needs to explicitly skip BLOCK_PC bios. Those > are SCSI pass through ioctls that we can't split due to their opaque > nature. You mean, checking rq->cmd_type == REQ_TYPE_BLOCK_PC, right? I'm wondering about how to check that in blk_queue_split(). At the moment when blk_queue_split() is called, it's even before a request is mapped e.g. in blk_sq_make_request(). Unlike scsi drivers where it's easy to get cmd->rq, blk_queue_split() doesn't seem to be able to get a request by blk_get_request(). Or am I missing something? Thanks, Dongsu -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/