lkml.org 
[lkml]   [2021]   [Apr]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v6 01/30] iov_iter: Add ITER_XARRAY
On Fri, Apr 09, 2021 at 10:09:05AM +0100, David Howells wrote:
> Al Viro <viro@zeniv.linux.org.uk> wrote:
>
> > > +#define iterate_all_kinds(i, n, v, I, B, K, X) { \
> >
> > Do you have any users that would pass different B and X?
> >
> > > @@ -1440,7 +1665,7 @@ ssize_t iov_iter_get_pages_alloc(struct iov_iter *i,
> > > return v.bv_len;
> > > }),({
> > > return -EFAULT;
> > > - })
> > > + }), 0
> >
> > Correction - users that might get that flavour. This one explicitly checks
> > for xarray and doesn't get to iterate_... in that case.
>
> This is the case for iterate_all_kinds(), but not for iterate_and_advance().
>
> See _copy_mc_to_iter() for example: that can return directly out of the middle
> of the loop, so the X variant must drop the rcu_read_lock(), but the B variant
> doesn't need to. You also can't just use break to get out as the X variant
> has a loop within a loop to handle iteration over the subelements of a THP.

"Why does it need a loop? bvecs can contain multi-page vectors"
"memcpy_from_page can't handle that"
"doesn't that mean that iterating over a bvec is already broken?"
"yes"

\
 
 \ /
  Last update: 2021-04-09 13:46    [W:0.088 / U:0.276 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site