On Wed, Jun 17, 2020 at 7:50 AM Souptick Joarder <jrdr.linux@xxxxxxxxx> wrote: > > First, convert set_page_dirty() to set_page_dirty_lock() > > Second, there is an interval in there after set_page_dirty() and > before put_page(), in which the device could be running and setting > pages dirty. Moving set_page_dirty_lock() after dma_unmap_sg(). > > Signed-off-by: Souptick Joarder <jrdr.linux@xxxxxxxxx> > Suggested-by: John Hubbard <jhubbard@xxxxxxxxxx> > Cc: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > Cc: Bharath Vedartham <linux.bhar@xxxxxxxxx> > --- > drivers/staging/kpc2000/kpc_dma/fileops.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/staging/kpc2000/kpc_dma/fileops.c b/drivers/staging/kpc2000/kpc_dma/fileops.c > index b136353..bcce86c 100644 > --- a/drivers/staging/kpc2000/kpc_dma/fileops.c > +++ b/drivers/staging/kpc2000/kpc_dma/fileops.c > @@ -214,13 +214,13 @@ void transfer_complete_cb(struct aio_cb_data *acd, size_t xfr_count, u32 flags) > BUG_ON(!acd->ldev); > BUG_ON(!acd->ldev->pldev); > > + dma_unmap_sg(&acd->ldev->pldev->dev, acd->sgt.sgl, acd->sgt.nents, acd->ldev->dir); > + > for (i = 0 ; i < acd->page_count ; i++) { > if (!PageReserved(acd->user_pages[i])) Question -> is PageReserved() used with specific purpose not PageDirty() ?? > - set_page_dirty(acd->user_pages[i]); > + set_page_dirty_lock(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]); > > -- > 1.9.1 > _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel