On Fri, Jan 29, 2016 at 9:46 AM, Jens Axboe <axboe@xxxxxx> wrote: > On 01/29/2016 08:18 AM, Dan Williams wrote: >> >> +unsigned char *read_dev_sector(struct block_device *bdev, sector_t n, >> Sector *p) >> +{ >> struct page *page; >> >> - page = read_mapping_page(mapping, (pgoff_t)(n >> >> (PAGE_CACHE_SHIFT-9)), >> - NULL); >> + /* don't populate page cache for dax capable devices */ >> + if (IS_DAX(bdev->bd_inode)) >> + page = read_dax_sector(bdev, n); >> + else >> + page = read_pagecache_sector(bdev, n); >> + > > > Fall back to non-dax, if dax fails? I think we need to fail hard otherwise we're back to the original problem of confusing the dax code that expects to find an empty page cache. > >> +struct page *read_dax_sector(struct block_device *bdev, sector_t n) >> +{ >> + struct page *page = __page_cache_alloc(GFP_KERNEL | __GFP_COLD); > > > Why isn't that just alloc_pages()? Just for symmetry with the same allocation that the pagecache path makes, but alloc_pages() works too... -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html