On 01/12/2020 12:59, Christoph Hellwig wrote:
On Tue, Dec 01, 2020 at 12:52:51PM +0000, Matthew Wilcox wrote:
quoted
But the only reason we want to know 'nr_vecs' is so we can allocate a
BIO which has that many vecs, right? But we then don't actually use the
vecs in the bio because we use the ones already present in the iter.
That was why I had it return 1, not nr_vecs.
Did I miss something?
Right now __bio_iov_bvec_add_pages does not reuse the bvecs in the
iter. That being said while we are optmizing this path we might a well
look into reusing them..
I was thinking about memcpy bvec instead of iterating as a first step,
and then try to reuse passed in bvec.
A thing that doesn't play nice with that is setting BIO_WORKINGSET in
__bio_add_page(), which requires to iterate all pages anyway. I have no
clue what it is, so rather to ask if we can optimise it out somehow?
Apart from pre-computing for specific cases...
E.g. can pages of a single bvec segment be both in and out of a working
set? (i.e. PageWorkingset(page)).
--
Pavel Begunkov