[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <464bc3f5-aef2-4e6b-b7cb-035077d1e3f4@oracle.com>
Date: Tue, 18 Feb 2025 17:12:47 +0000
From: John Garry <john.g.garry@...cle.com>
To: Andreas Hindborg <a.hindborg@...nel.org>
Cc: Jens Axboe <axboe@...nel.dk>, Oliver Mangold <oliver.mangold@...me>,
linux-block@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] block: set bi_vcnt when cloning bio
On 18/02/2025 11:40, Andreas Hindborg wrote:
> "John Garry" <john.g.garry@...cle.com> writes:
>
>> On 15/02/2025 10:58, Andreas Hindborg wrote:
>>> When cloning a bio, the `bio.bi_vcnt` field is not cloned. This is a
>>> problem if users want to perform bounds checks on the `bio.bi_io_vec`
>>> field.
>>
>> Is this fixing a potential problem? Or fixing a real issue?
>
> It is fixing a problem I ran into in rnull, the rust null block
> implementation. When running with debug assertions enabled, a bound
> check on `bi_io_vec` fails for split bio, because `bio_vcnt` becomes
> zero in the cloned bio.
>
> I can work around this by not using a slice type to represent
> `bi_io_vec` in rust, not a big deal.
>
> But I am genuinely curious if there is a reason for not setting
> `bi_vcnt` during a clone.
I think that it came from commit 59d276fe0 (with the addition of
bio_clone_fast()), where we assume that the cloned bio is not having the
bio_vec touched and so does not need to know bi_vcnt (or bi_max_vecs).
And it is inefficient to needlessly set bi_vcnt then.
> As far as I can tell, it should be safe to
> set. `bi_vcnt` being zero does not seem to have any effect other than to
> puzzle developers debugging the code.
>
> Maybe I missed something?
>
>
Thanks,
John
Powered by blists - more mailing lists