* Dave Hansen (d...@sr71.net) wrote:
> On 10/07/2013 01:21 PM, Robert C Jennings wrote:
> > +                                   } else {
> > +                                           if (vma)
> > +                                                   zap_page_range(vma,
> > +                                                           user_start,
> > +                                                           (user_end -
> > +                                                            user_start),
> > +                                                           NULL);
> > +                                           vma = find_vma_intersection(
> > +                                                           current->mm,
> > +                                                           useraddr,
> > +                                                           (useraddr +
> > +                                                            PAGE_SIZE));
> > +                                           if (!IS_ERR_OR_NULL(vma)) {
> > +                                                   user_start = useraddr;
> > +                                                   user_end = (useraddr +
> > +                                                               PAGE_SIZE);
> > +                                           } else
> > +                                                   vma = NULL;
> > +                                   }
> 
> This is pretty unspeakably hideous.  Was there truly no better way to do
> this?

I was hoping to find a better way to coalesce pipe buffers and zap
entire VMAs (and it needs better documentation but your argument is with
structure and I agree). I would love suggestions for improving this but
that is not to say that I've abandoned it; I'm still looking for ways
to make this cleaner.

Doing find_vma() on a single page in the VMA rather than on each and
then zapping once provides a 50% runtime reduction for the writer when
tested with a 256MB vmsplice operation.  Based on the result I felt that
coalescing was justfied but the implementation is ugly.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to