* [PATCH] block: Make __bio_clone_fast() copy bi_vcnt @ 2018-06-27 20:12 Bart Van Assche 2018-06-27 23:50 ` Ming Lei 2018-06-28 15:53 ` Jens Axboe 0 siblings, 2 replies; 15+ messages in thread From: Bart Van Assche @ 2018-06-27 20:12 UTC (permalink / raw) To: Jens Axboe Cc: linux-block, Christoph Hellwig, Bart Van Assche, Mike Snitzer, Ming Lei, Hannes Reinecke, Johannes Thumshirn Although __bio_clone_fast() copies bi_io_vec, it does not copy bi_vcnt, the number of elements in bi_io_vec[] that contains data. Copy bi_vcnt such that code that needs this member behaves identically for original and for cloned requests. Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Mike Snitzer <snitzer@redhat.com> Cc: Ming Lei <ming.lei@redhat.com> Cc: Hannes Reinecke <hare@suse.com> Cc: Johannes Thumshirn <jthumshirn@suse.de> --- block/bio.c | 1 + 1 file changed, 1 insertion(+) diff --git a/block/bio.c b/block/bio.c index f7e3d88bd0b6..55f8e0dedd69 100644 --- a/block/bio.c +++ b/block/bio.c @@ -605,6 +605,7 @@ void __bio_clone_fast(struct bio *bio, struct bio *bio_src) bio->bi_opf = bio_src->bi_opf; bio->bi_write_hint = bio_src->bi_write_hint; bio->bi_iter = bio_src->bi_iter; + bio->bi_vcnt = bio_src->bi_vcnt; bio->bi_io_vec = bio_src->bi_io_vec; bio_clone_blkcg_association(bio, bio_src); -- 2.17.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-27 20:12 [PATCH] block: Make __bio_clone_fast() copy bi_vcnt Bart Van Assche @ 2018-06-27 23:50 ` Ming Lei 2018-06-27 23:59 ` Bart Van Assche 2018-06-28 15:53 ` Jens Axboe 1 sibling, 1 reply; 15+ messages in thread From: Ming Lei @ 2018-06-27 23:50 UTC (permalink / raw) To: Bart Van Assche Cc: Jens Axboe, linux-block, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn On Wed, Jun 27, 2018 at 01:12:31PM -0700, Bart Van Assche wrote: > Although __bio_clone_fast() copies bi_io_vec, it does not copy bi_vcnt, > the number of elements in bi_io_vec[] that contains data. Copy bi_vcnt > such that code that needs this member behaves identically for original > and for cloned requests. > > Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> > Cc: Christoph Hellwig <hch@lst.de> > Cc: Mike Snitzer <snitzer@redhat.com> > Cc: Ming Lei <ming.lei@redhat.com> > Cc: Hannes Reinecke <hare@suse.com> > Cc: Johannes Thumshirn <jthumshirn@suse.de> > --- > block/bio.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/block/bio.c b/block/bio.c > index f7e3d88bd0b6..55f8e0dedd69 100644 > --- a/block/bio.c > +++ b/block/bio.c > @@ -605,6 +605,7 @@ void __bio_clone_fast(struct bio *bio, struct bio *bio_src) > bio->bi_opf = bio_src->bi_opf; > bio->bi_write_hint = bio_src->bi_write_hint; > bio->bi_iter = bio_src->bi_iter; > + bio->bi_vcnt = bio_src->bi_vcnt; > bio->bi_io_vec = bio_src->bi_io_vec; No, don't do that. For a cloned bio, both .bi_vcnt and .bi_io_vec can't be used directly, and we have done huge such cleanup for supporting multipage bvec, that is the great idea of immutable bvecs invented by Kent. Thanks, Ming ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-27 23:50 ` Ming Lei @ 2018-06-27 23:59 ` Bart Van Assche 2018-06-28 0:30 ` Ming Lei 0 siblings, 1 reply; 15+ messages in thread From: Bart Van Assche @ 2018-06-27 23:59 UTC (permalink / raw) To: Ming Lei Cc: Jens Axboe, linux-block@vger.kernel.org, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn On 06/27/18 16:50, Ming Lei wrote: > On Wed, Jun 27, 2018 at 01:12:31PM -0700, Bart Van Assche wrote: >> Although __bio_clone_fast() copies bi_io_vec, it does not copy bi_vcnt, >> the number of elements in bi_io_vec[] that contains data. Copy bi_vcnt >> such that code that needs this member behaves identically for original >> and for cloned requests. >> >> Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> >> Cc: Christoph Hellwig <hch@lst.de> >> Cc: Mike Snitzer <snitzer@redhat.com> >> Cc: Ming Lei <ming.lei@redhat.com> >> Cc: Hannes Reinecke <hare@suse.com> >> Cc: Johannes Thumshirn <jthumshirn@suse.de> >> --- >> block/bio.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/block/bio.c b/block/bio.c >> index f7e3d88bd0b6..55f8e0dedd69 100644 >> --- a/block/bio.c >> +++ b/block/bio.c >> @@ -605,6 +605,7 @@ void __bio_clone_fast(struct bio *bio, struct bio *bio_src) >> bio->bi_opf = bio_src->bi_opf; >> bio->bi_write_hint = bio_src->bi_write_hint; >> bio->bi_iter = bio_src->bi_iter; >> + bio->bi_vcnt = bio_src->bi_vcnt; >> bio->bi_io_vec = bio_src->bi_io_vec; > > No, don't do that. Why not? I think it's a huge booby trap that cloned bio's have a bi_io_vec but zero bi_vcnt. > For a cloned bio, both .bi_vcnt and .bi_io_vec can't be used directly, > and we have done huge such cleanup for supporting multipage bvec, that is > the great idea of immutable bvecs invented by Kent. My understanding is that the above change doesn't conflict at all with the immutable biovec work -- to the contrary. Bart. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-27 23:59 ` Bart Van Assche @ 2018-06-28 0:30 ` Ming Lei 2018-06-28 15:21 ` Bart Van Assche 0 siblings, 1 reply; 15+ messages in thread From: Ming Lei @ 2018-06-28 0:30 UTC (permalink / raw) To: Bart Van Assche Cc: Jens Axboe, linux-block@vger.kernel.org, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn On Wed, Jun 27, 2018 at 04:59:41PM -0700, Bart Van Assche wrote: > On 06/27/18 16:50, Ming Lei wrote: > > On Wed, Jun 27, 2018 at 01:12:31PM -0700, Bart Van Assche wrote: > > > Although __bio_clone_fast() copies bi_io_vec, it does not copy bi_vcnt, > > > the number of elements in bi_io_vec[] that contains data. Copy bi_vcnt > > > such that code that needs this member behaves identically for original > > > and for cloned requests. > > > > > > Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> > > > Cc: Christoph Hellwig <hch@lst.de> > > > Cc: Mike Snitzer <snitzer@redhat.com> > > > Cc: Ming Lei <ming.lei@redhat.com> > > > Cc: Hannes Reinecke <hare@suse.com> > > > Cc: Johannes Thumshirn <jthumshirn@suse.de> > > > --- > > > block/bio.c | 1 + > > > 1 file changed, 1 insertion(+) > > > > > > diff --git a/block/bio.c b/block/bio.c > > > index f7e3d88bd0b6..55f8e0dedd69 100644 > > > --- a/block/bio.c > > > +++ b/block/bio.c > > > @@ -605,6 +605,7 @@ void __bio_clone_fast(struct bio *bio, struct bio *bio_src) > > > bio->bi_opf = bio_src->bi_opf; > > > bio->bi_write_hint = bio_src->bi_write_hint; > > > bio->bi_iter = bio_src->bi_iter; > > > + bio->bi_vcnt = bio_src->bi_vcnt; > > > bio->bi_io_vec = bio_src->bi_io_vec; > > > > No, don't do that. > > Why not? I think it's a huge booby trap that cloned bio's have a bi_io_vec > but zero bi_vcnt. One core idea of immutable bvec is to use bio->bi_iter and the original bvec table to iterate over anywhere in the bio. That is why .bi_io_vec needs to copy, but not see any reason why .bi_vcnt needs to do. Do you have use cases on .bi_vcnt for cloned bio? Thanks, Ming ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-28 0:30 ` Ming Lei @ 2018-06-28 15:21 ` Bart Van Assche 2018-06-28 15:32 ` Mike Snitzer 2018-06-28 23:10 ` [PATCH] " Ming Lei 0 siblings, 2 replies; 15+ messages in thread From: Bart Van Assche @ 2018-06-28 15:21 UTC (permalink / raw) To: Ming Lei Cc: Jens Axboe, linux-block@vger.kernel.org, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn On 06/27/18 17:30, Ming Lei wrote: > One core idea of immutable bvec is to use bio->bi_iter and the original > bvec table to iterate over anywhere in the bio. That is why .bi_io_vec > needs to copy, but not see any reason why .bi_vcnt needs to do. > > Do you have use cases on .bi_vcnt for cloned bio? So far this is only a theoretical concern. There are many functions in the block layer that use .bi_vcnt, and it is a lot of work to figure out all the callers of all these functions. Bart. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: block: Make __bio_clone_fast() copy bi_vcnt 2018-06-28 15:21 ` Bart Van Assche @ 2018-06-28 15:32 ` Mike Snitzer 2018-06-28 23:10 ` [PATCH] " Ming Lei 1 sibling, 0 replies; 15+ messages in thread From: Mike Snitzer @ 2018-06-28 15:32 UTC (permalink / raw) To: Bart Van Assche Cc: Ming Lei, Jens Axboe, linux-block@vger.kernel.org, Christoph Hellwig, Hannes Reinecke, Johannes Thumshirn On Thu, Jun 28 2018 at 11:21am -0400, Bart Van Assche <bart.vanassche@wdc.com> wrote: > On 06/27/18 17:30, Ming Lei wrote: > >One core idea of immutable bvec is to use bio->bi_iter and the original > >bvec table to iterate over anywhere in the bio. That is why .bi_io_vec > >needs to copy, but not see any reason why .bi_vcnt needs to do. > > > >Do you have use cases on .bi_vcnt for cloned bio? > > So far this is only a theoretical concern. There are many functions > in the block layer that use .bi_vcnt, and it is a lot of work to > figure out all the callers of all these functions. No point wasting time with that. I don't understand why Ming cares. Your change is obviously correct. The state should get transfered over to reflect reality. This patch doesn't harm anything, it just prevents some clone-specific failure in the future. Acked-by: Mike Snitzer <snitzer@redhat.com> ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-28 15:21 ` Bart Van Assche 2018-06-28 15:32 ` Mike Snitzer @ 2018-06-28 23:10 ` Ming Lei 2018-06-28 23:16 ` Kent Overstreet 1 sibling, 1 reply; 15+ messages in thread From: Ming Lei @ 2018-06-28 23:10 UTC (permalink / raw) To: Bart Van Assche Cc: Ming Lei, Jens Axboe, linux-block@vger.kernel.org, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn, Kent Overstreet On Thu, Jun 28, 2018 at 11:21 PM, Bart Van Assche <bart.vanassche@wdc.com> wrote: > On 06/27/18 17:30, Ming Lei wrote: >> >> One core idea of immutable bvec is to use bio->bi_iter and the original >> bvec table to iterate over anywhere in the bio. That is why .bi_io_vec >> needs to copy, but not see any reason why .bi_vcnt needs to do. >> >> Do you have use cases on .bi_vcnt for cloned bio? > > > So far this is only a theoretical concern. There are many functions in the > block layer that use .bi_vcnt, and it is a lot of work to figure out all the > callers of all these functions. No, any functions using .bi_vcnt on a cloned-bio may be a bug, and we should take a close look. Thanks, Ming Lei ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-28 23:10 ` [PATCH] " Ming Lei @ 2018-06-28 23:16 ` Kent Overstreet 2018-06-28 23:54 ` Bart Van Assche 2018-06-29 2:18 ` Jens Axboe 0 siblings, 2 replies; 15+ messages in thread From: Kent Overstreet @ 2018-06-28 23:16 UTC (permalink / raw) To: Ming Lei Cc: Bart Van Assche, Ming Lei, Jens Axboe, linux-block@vger.kernel.org, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn On Fri, Jun 29, 2018 at 07:10:47AM +0800, Ming Lei wrote: > On Thu, Jun 28, 2018 at 11:21 PM, Bart Van Assche > <bart.vanassche@wdc.com> wrote: > > On 06/27/18 17:30, Ming Lei wrote: > >> > >> One core idea of immutable bvec is to use bio->bi_iter and the original > >> bvec table to iterate over anywhere in the bio. That is why .bi_io_vec > >> needs to copy, but not see any reason why .bi_vcnt needs to do. > >> > >> Do you have use cases on .bi_vcnt for cloned bio? > > > > > > So far this is only a theoretical concern. There are many functions in the > > block layer that use .bi_vcnt, and it is a lot of work to figure out all the > > callers of all these functions. Back when I implemented immutable biovecs I thoroughly audited all the bi_vcnt uses and removed all of them that weren't by the code that owns/submits the bio. Grepping around I see one or two suspicious uses.. blk-merge.c in particular > No, any functions using .bi_vcnt on a cloned-bio may be a bug, and we should > take a close look. not just cloned bios, any code using bi_vcnt on a bio it didn't create is wrong. so big nack to this patch (I wasn't ccd on it though and it doesn't seem to have hit lkml, so I can't find the original patch...) ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-28 23:16 ` Kent Overstreet @ 2018-06-28 23:54 ` Bart Van Assche 2018-06-29 0:04 ` Kent Overstreet 2018-06-29 2:18 ` Jens Axboe 1 sibling, 1 reply; 15+ messages in thread From: Bart Van Assche @ 2018-06-28 23:54 UTC (permalink / raw) To: Kent Overstreet, Ming Lei Cc: Ming Lei, Jens Axboe, linux-block@vger.kernel.org, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn On 06/28/18 16:16, Kent Overstreet wrote: > On Fri, Jun 29, 2018 at 07:10:47AM +0800, Ming Lei wrote: >> On Thu, Jun 28, 2018 at 11:21 PM, Bart Van Assche >> <bart.vanassche@wdc.com> wrote: >>> On 06/27/18 17:30, Ming Lei wrote: >>>> >>>> One core idea of immutable bvec is to use bio->bi_iter and the original >>>> bvec table to iterate over anywhere in the bio. That is why .bi_io_vec >>>> needs to copy, but not see any reason why .bi_vcnt needs to do. >>>> >>>> Do you have use cases on .bi_vcnt for cloned bio? >>> >>> So far this is only a theoretical concern. There are many functions in the >>> block layer that use .bi_vcnt, and it is a lot of work to figure out all the >>> callers of all these functions. > > Back when I implemented immutable biovecs I thoroughly audited all the bi_vcnt > uses and removed all of them that weren't by the code that owns/submits the bio. > > Grepping around I see one or two suspicious uses.. blk-merge.c in particular > >> No, any functions using .bi_vcnt on a cloned-bio may be a bug, and we should >> take a close look. > > not just cloned bios, any code using bi_vcnt on a bio it didn't create is wrong. > > so big nack to this patch (I wasn't ccd on it though and it doesn't seem to have > hit lkml, so I can't find the original patch...) Hello Kent, Thanks for chiming in. The linux-block mailing list is archived by multiple websites. The entire e-mail thread is available on e.g. https://www.mail-archive.com/linux-block@vger.kernel.org/msg23006.html. I have a question for you: at least in kernel v4.17 bio_clone_bioset() copies bi_vcnt from the source to the destination bio. However, __bio_clone_fast() doesn't copy bi_vcnt. Isn't that an inconsistency? Thanks, Bart. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-28 23:54 ` Bart Van Assche @ 2018-06-29 0:04 ` Kent Overstreet 2018-06-29 20:00 ` Bart Van Assche 0 siblings, 1 reply; 15+ messages in thread From: Kent Overstreet @ 2018-06-29 0:04 UTC (permalink / raw) To: Bart Van Assche Cc: Ming Lei, Ming Lei, Jens Axboe, linux-block@vger.kernel.org, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn On Thu, Jun 28, 2018 at 04:54:44PM -0700, Bart Van Assche wrote: > On 06/28/18 16:16, Kent Overstreet wrote: > > On Fri, Jun 29, 2018 at 07:10:47AM +0800, Ming Lei wrote: > > > On Thu, Jun 28, 2018 at 11:21 PM, Bart Van Assche > > > <bart.vanassche@wdc.com> wrote: > > > > On 06/27/18 17:30, Ming Lei wrote: > > > > > > > > > > One core idea of immutable bvec is to use bio->bi_iter and the original > > > > > bvec table to iterate over anywhere in the bio. That is why .bi_io_vec > > > > > needs to copy, but not see any reason why .bi_vcnt needs to do. > > > > > > > > > > Do you have use cases on .bi_vcnt for cloned bio? > > > > > > > > So far this is only a theoretical concern. There are many functions in the > > > > block layer that use .bi_vcnt, and it is a lot of work to figure out all the > > > > callers of all these functions. > > > > Back when I implemented immutable biovecs I thoroughly audited all the bi_vcnt > > uses and removed all of them that weren't by the code that owns/submits the bio. > > > > Grepping around I see one or two suspicious uses.. blk-merge.c in particular > > > > > No, any functions using .bi_vcnt on a cloned-bio may be a bug, and we should > > > take a close look. > > > > not just cloned bios, any code using bi_vcnt on a bio it didn't create is wrong. > > > > so big nack to this patch (I wasn't ccd on it though and it doesn't seem to have > > hit lkml, so I can't find the original patch...) > > Hello Kent, > > Thanks for chiming in. The linux-block mailing list is archived by multiple > websites. The entire e-mail thread is available on e.g. > https://www.mail-archive.com/linux-block@vger.kernel.org/msg23006.html. > > I have a question for you: at least in kernel v4.17 bio_clone_bioset() > copies bi_vcnt from the source to the destination bio. However, > __bio_clone_fast() doesn't copy bi_vcnt. Isn't that an inconsistency? No - when you use bio_clone_bioset() you get a bio that you own and can do whatever you want with, so it does make sense for it to initialize bi_vcnt. e.g. you could use bio_clone_bioset() when you're going to be bouncing a bio, iterating over each bvec and allocating a new page and copying data from the old page to the new page. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-29 0:04 ` Kent Overstreet @ 2018-06-29 20:00 ` Bart Van Assche 2018-06-30 23:38 ` Kent Overstreet 0 siblings, 1 reply; 15+ messages in thread From: Bart Van Assche @ 2018-06-29 20:00 UTC (permalink / raw) To: Kent Overstreet Cc: Ming Lei, Ming Lei, Jens Axboe, linux-block@vger.kernel.org, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn On 06/28/18 17:04, Kent Overstreet wrote: > On Thu, Jun 28, 2018 at 04:54:44PM -0700, Bart Van Assche wrote: >> Thanks for chiming in. The linux-block mailing list is archived by multiple >> websites. The entire e-mail thread is available on e.g. >> https://www.mail-archive.com/linux-block@vger.kernel.org/msg23006.html. >> >> I have a question for you: at least in kernel v4.17 bio_clone_bioset() >> copies bi_vcnt from the source to the destination bio. However, >> __bio_clone_fast() doesn't copy bi_vcnt. Isn't that an inconsistency? > > No - when you use bio_clone_bioset() you get a bio that you own and can do > whatever you want with, so it does make sense for it to initialize bi_vcnt. > > e.g. you could use bio_clone_bioset() when you're going to be bouncing a bio, > iterating over each bvec and allocating a new page and copying data from the old > page to the new page. Hello Kent, Have you considered to explain this in a comment above __bio_clone_fast() to avoid that the next person who reads that function gets confused? Bart. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-29 20:00 ` Bart Van Assche @ 2018-06-30 23:38 ` Kent Overstreet 0 siblings, 0 replies; 15+ messages in thread From: Kent Overstreet @ 2018-06-30 23:38 UTC (permalink / raw) To: Bart Van Assche Cc: Ming Lei, Ming Lei, Jens Axboe, linux-block@vger.kernel.org, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn On Fri, Jun 29, 2018 at 01:00:33PM -0700, Bart Van Assche wrote: > On 06/28/18 17:04, Kent Overstreet wrote: > > On Thu, Jun 28, 2018 at 04:54:44PM -0700, Bart Van Assche wrote: > > > Thanks for chiming in. The linux-block mailing list is archived by multiple > > > websites. The entire e-mail thread is available on e.g. > > > https://www.mail-archive.com/linux-block@vger.kernel.org/msg23006.html. > > > > > > I have a question for you: at least in kernel v4.17 bio_clone_bioset() > > > copies bi_vcnt from the source to the destination bio. However, > > > __bio_clone_fast() doesn't copy bi_vcnt. Isn't that an inconsistency? > > > > No - when you use bio_clone_bioset() you get a bio that you own and can do > > whatever you want with, so it does make sense for it to initialize bi_vcnt. > > > > e.g. you could use bio_clone_bioset() when you're going to be bouncing a bio, > > iterating over each bvec and allocating a new page and copying data from the old > > page to the new page. > > Hello Kent, > > Have you considered to explain this in a comment above __bio_clone_fast() to > avoid that the next person who reads that function gets confused? Well, there is a large comment in bio_clone_bioset() that you must have found... ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-28 23:16 ` Kent Overstreet 2018-06-28 23:54 ` Bart Van Assche @ 2018-06-29 2:18 ` Jens Axboe 1 sibling, 0 replies; 15+ messages in thread From: Jens Axboe @ 2018-06-29 2:18 UTC (permalink / raw) To: Kent Overstreet, Ming Lei Cc: Bart Van Assche, Ming Lei, linux-block@vger.kernel.org, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn On 6/28/18 5:16 PM, Kent Overstreet wrote: > On Fri, Jun 29, 2018 at 07:10:47AM +0800, Ming Lei wrote: >> On Thu, Jun 28, 2018 at 11:21 PM, Bart Van Assche >> <bart.vanassche@wdc.com> wrote: >>> On 06/27/18 17:30, Ming Lei wrote: >>>> >>>> One core idea of immutable bvec is to use bio->bi_iter and the original >>>> bvec table to iterate over anywhere in the bio. That is why .bi_io_vec >>>> needs to copy, but not see any reason why .bi_vcnt needs to do. >>>> >>>> Do you have use cases on .bi_vcnt for cloned bio? >>> >>> >>> So far this is only a theoretical concern. There are many functions in the >>> block layer that use .bi_vcnt, and it is a lot of work to figure out all the >>> callers of all these functions. > > Back when I implemented immutable biovecs I thoroughly audited all the bi_vcnt > uses and removed all of them that weren't by the code that owns/submits the bio. > > Grepping around I see one or two suspicious uses.. blk-merge.c in particular > >> No, any functions using .bi_vcnt on a cloned-bio may be a bug, and we should >> take a close look. > > not just cloned bios, any code using bi_vcnt on a bio it didn't create is wrong. > > so big nack to this patch (I wasn't ccd on it though and it doesn't seem to have > hit lkml, so I can't find the original patch...) Yeah, you are both right, I was smoking crack. -- Jens Axboe ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-27 20:12 [PATCH] block: Make __bio_clone_fast() copy bi_vcnt Bart Van Assche 2018-06-27 23:50 ` Ming Lei @ 2018-06-28 15:53 ` Jens Axboe 2018-06-28 22:53 ` Ming Lei 1 sibling, 1 reply; 15+ messages in thread From: Jens Axboe @ 2018-06-28 15:53 UTC (permalink / raw) To: Bart Van Assche Cc: linux-block, Christoph Hellwig, Mike Snitzer, Ming Lei, Hannes Reinecke, Johannes Thumshirn On 6/27/18 2:12 PM, Bart Van Assche wrote: > Although __bio_clone_fast() copies bi_io_vec, it does not copy bi_vcnt, > the number of elements in bi_io_vec[] that contains data. Copy bi_vcnt > such that code that needs this member behaves identically for original > and for cloned requests. Applied - it's correct for the current base. -- Jens Axboe ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] block: Make __bio_clone_fast() copy bi_vcnt 2018-06-28 15:53 ` Jens Axboe @ 2018-06-28 22:53 ` Ming Lei 0 siblings, 0 replies; 15+ messages in thread From: Ming Lei @ 2018-06-28 22:53 UTC (permalink / raw) To: Jens Axboe Cc: Bart Van Assche, linux-block, Christoph Hellwig, Mike Snitzer, Hannes Reinecke, Johannes Thumshirn On Thu, Jun 28, 2018 at 09:53:23AM -0600, Jens Axboe wrote: > On 6/27/18 2:12 PM, Bart Van Assche wrote: > > Although __bio_clone_fast() copies bi_io_vec, it does not copy bi_vcnt, > > the number of elements in bi_io_vec[] that contains data. Copy bi_vcnt > > such that code that needs this member behaves identically for original > > and for cloned requests. > > Applied - it's correct for the current base. > Any users of cloned bio shouldn't use this bio's .bi_vcnt directly, since this counter represents the original bio's actual io vector number, nothing related with the cloned bio. So I don't understand why we need to copy it. Thanks, Ming ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2018-06-30 23:38 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-06-27 20:12 [PATCH] block: Make __bio_clone_fast() copy bi_vcnt Bart Van Assche 2018-06-27 23:50 ` Ming Lei 2018-06-27 23:59 ` Bart Van Assche 2018-06-28 0:30 ` Ming Lei 2018-06-28 15:21 ` Bart Van Assche 2018-06-28 15:32 ` Mike Snitzer 2018-06-28 23:10 ` [PATCH] " Ming Lei 2018-06-28 23:16 ` Kent Overstreet 2018-06-28 23:54 ` Bart Van Assche 2018-06-29 0:04 ` Kent Overstreet 2018-06-29 20:00 ` Bart Van Assche 2018-06-30 23:38 ` Kent Overstreet 2018-06-29 2:18 ` Jens Axboe 2018-06-28 15:53 ` Jens Axboe 2018-06-28 22:53 ` Ming Lei
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).