Re: [PATCHv3 2/2] mm: implement ->map_pages for page cache

From: Kirill A. Shutemov
Date: Wed Apr 02 2014 - 15:08:10 EST


On Wed, Apr 02, 2014 at 10:03:24PM +0400, Konstantin Khlebnikov wrote:
> > +void filemap_map_pages(struct vm_area_struct *vma, struct vm_fault *vmf)
> > +{
> > + struct radix_tree_iter iter;
> > + void **slot;
> > + struct file *file = vma->vm_file;
> > + struct address_space *mapping = file->f_mapping;
> > + loff_t size;
> > + struct page *page;
> > + unsigned long address = (unsigned long) vmf->virtual_address;
> > + unsigned long addr;
> > + pte_t *pte;
> > +
> > + rcu_read_lock();
> > + radix_tree_for_each_slot(slot, &mapping->page_tree, &iter, vmf->pgoff) {
> > + if (iter.index > vmf->max_pgoff)
> > + break;
> > +repeat:
> > + page = radix_tree_deref_slot(slot);
>
> Here is obvious race with memory reclaimer/truncate. Pointer to page
> might become NULL.

Thanks for noticing that. It has been fixed in -mm already.

--
Kirill A. Shutemov
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/