On Tue, Nov 14, 2017 at 05:47:51PM -0800, Dan Williams wrote:
On Tue, Nov 14, 2017 at 5:37 PM, Jeff Moyer <jmoyer(a)redhat.com>
> PMD faults on a zero length file on a file system mounted with -o dax
> will not generate SIGBUS as expected.
> fd = open(...O_TRUNC);
> addr = mmap(NULL, 2*1024*1024, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
> *addr = 'a';
> <expect SIGBUS>
> The problem is this code in dax_iomap_pmd_fault:
> max_pgoff = (i_size_read(inode) - 1) >> PAGE_SHIFT;
> If the inode size is zero, we end up with a max_pgoff that is way larger
> than 0. :) Fix it by using DIV_ROUND_UP, as is done elsewhere in the
> I tested this with some simple test code that ensured that SIGBUS was
> received where expected.
I assume this needs:
Fixes: 642261ac995e ("dax: add struct iomap based DAX PMD support")
...otherwise looks good to me.
Yep, this fix looks good, thanks. You can add:
Reviewed-by: Ross Zwisler <ross.zwisler(a)linux.intel.com>