[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1353067.1674594631@warthog.procyon.org.uk>
Date: Tue, 24 Jan 2023 21:10:31 +0000
From: David Howells <dhowells@...hat.com>
To: John Hubbard <jhubbard@...dia.com>
Cc: dhowells@...hat.com, Al Viro <viro@...iv.linux.org.uk>,
Christoph Hellwig <hch@...radead.org>,
Matthew Wilcox <willy@...radead.org>,
Jens Axboe <axboe@...nel.dk>, "Jan Kara" <jack@...e.cz>,
Jeff Layton <jlayton@...nel.org>,
David Hildenbrand <david@...hat.com>,
Jason Gunthorpe <jgg@...dia.com>,
Logan Gunthorpe <logang@...tatee.com>,
linux-fsdevel@...r.kernel.org, linux-block@...r.kernel.org,
linux-kernel@...r.kernel.org, "Christoph Hellwig" <hch@....de>,
linux-mm@...ck.org
Subject: Re: [PATCH v9 2/8] iov_iter: Add a function to extract a page list from an iterator
John Hubbard <jhubbard@...dia.com> wrote:
> > + for (;;) {
> > + if (i->nr_segs == 0)
> > + return 0;
> > + maxsize = min(maxsize, i->bvec->bv_len - skip);
> > + if (maxsize)
> > + break;
> > + i->iov_offset = 0;
> > + i->nr_segs--;
> > + i->kvec++;
> > + skip = 0;
> > + }
> > +
> > + skip += i->bvec->bv_offset;
> > + page = i->bvec->bv_page + skip / PAGE_SIZE;
> > + offset = skip % PAGE_SIZE;
> > + *offset0 = offset;
> > +
> > + maxpages = want_pages_array(pages, maxsize, offset, maxpages);
> > + if (!maxpages)
> > + return -ENOMEM;
>
> Is it OK that the iov_iter position has been advanced, and left that way,
> in the case of an early -ENOMEM return here?
I think it should be okay. The for-loop at the top just skips over empty
segments, so it doesn't really advance things. There is an error there,
though: it should be i->bvec++, not i->kvec++ in the loop.
David
Powered by blists - more mailing lists