On Sun, Mar 03, 2019 at 11:52:41AM +0200, Artemy Kovalyov wrote: > > > On 02/03/2019 21:44, Ira Weiny wrote: > > > > On Sat, Mar 02, 2019 at 12:24:35PM -0800, john.hubbard@xxxxxxxxx wrote: > > > From: John Hubbard <jhubbard@xxxxxxxxxx> > > > > > > ... > > > 3. Dead code removal: the check for (user_virt & ~page_mask) > > > is checking for a condition that can never happen, > > > because earlier: > > > > > > user_virt = user_virt & page_mask; > > > > > > ...so, remove that entire phrase. > > > > > > bcnt -= min_t(size_t, npages << PAGE_SHIFT, bcnt); > > > mutex_lock(&umem_odp->umem_mutex); > > > for (j = 0; j < npages; j++, user_virt += PAGE_SIZE) { > > > - if (user_virt & ~page_mask) { > > > - p += PAGE_SIZE; > > > - if (page_to_phys(local_page_list[j]) != p) { > > > - ret = -EFAULT; > > > - break; > > > - } > > > - put_page(local_page_list[j]); > > > - continue; > > > - } > > > - > > > > I think this is trying to account for compound pages. (ie page_mask could > > represent more than PAGE_SIZE which is what user_virt is being incrimented by.) > > But putting the page in that case seems to be the wrong thing to do? > > > > Yes this was added by Artemy[1] now cc'ed. > > Right, this is for huge pages, please keep it. > put_page() needed to decrement refcount of the head page. You mean decrement the refcount of the _non_-head pages? Ira >