Messages in this thread | | | Subject | Re: [PATCH v2] RDMA/umem: minor bug fix and cleanup in error handling paths | From | Artemy Kovalyov <> | Date | Sun, 3 Mar 2019 11:52:41 +0200 |
| |
On 02/03/2019 21:44, Ira Weiny wrote: > > On Sat, Mar 02, 2019 at 12:24:35PM -0800, john.hubbard@gmail.com wrote: >> From: John Hubbard <jhubbard@nvidia.com> >> >> ... >> 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.
| |