On 7/15/19 3:01 PM, John Hubbard wrote: > On 7/15/19 2:47 PM, Matt Sickler wrote: ... > I agree: the PageReserved check looks unnecessary here, from my outside-the-kpc_2000-team > perspective, anyway. Assuming that your analysis above is correct, you could collapse that > whole think into just: > > @@ -211,17 +209,8 @@ void transfer_complete_cb(struct aio_cb_data *acd, size_t xfr_count, u32 flags) > BUG_ON(acd->ldev == NULL); > BUG_ON(acd->ldev->pldev == NULL); > > - for (i = 0 ; i < acd->page_count ; i++) { > - if (!PageReserved(acd->user_pages[i])) { > - set_page_dirty(acd->user_pages[i]); > - } > - } > - > dma_unmap_sg(&acd->ldev->pldev->dev, acd->sgt.sgl, acd->sgt.nents, acd->ldev->dir); > - > - for (i = 0 ; i < acd->page_count ; i++) { > - put_page(acd->user_pages[i]); > - } > + put_user_pages_dirty(&acd->user_pages[i], acd->page_count); Ahem, I typed too quickly. :) Please make that: put_user_pages_dirty(acd->user_pages, acd->page_count); thanks, -- John Hubbard NVIDIA