On Mon, Dec 08, 2014 at 05:58:05PM +0000, Al Viro wrote: > It looks like the second VIRTUAL_BUG_ON() in __phys_addr(), most likely > from __pa(), from virt_to_page(), from > unsigned long addr = (unsigned long)v.iov_base, end; > size_t len = v.iov_len + (*start = addr & (PAGE_SIZE - 1)); > > if (len > maxpages * PAGE_SIZE) > len = maxpages * PAGE_SIZE; > addr &= ~(PAGE_SIZE - 1); > for (end = addr + len; addr < end; addr += PAGE_SIZE) > get_page(*pages++ = virt_to_page(addr)); > return len - *start; > in iov_iter_get_pages(). And that's ITER_KVEC case there... Further > call chain looks like dio_refill_pages(), from dio_get_page(), from > do_direct_io(), eventually from kernel_read() and finit_module(), > Presumably called on O_DIRECT descriptor... FWIW, virt_to_page() is probably not OK to call on an address in the middle of vmalloc'ed area, is it? Would for (end = addr + len; addr < end; addr += PAGE_SIZE) { if (is_vmalloc_addr(addr)) ACCESS_ONCE(*(char *)addr); get_page(*pages++ = virt_to_page(addr)); } be a safe replacement for the loop in the above? -- 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