* Dave Hansen (dave@xxxxxxxx) 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-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html