[<prev] [next>] [day] [month] [year] [list]
Message-ID: <1454268585.31193.9.camel@intel.com>
Date: Sun, 31 Jan 2016 19:29:46 +0000
From: "Williams, Dan J" <dan.j.williams@...el.com>
To: "torvalds@...ux-foundation.org" <torvalds@...ux-foundation.org>,
"akpm@...ux-foundation.org" <akpm@...ux-foundation.org>
CC: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"linux-nvdimm@...ts.01.org" <linux-nvdimm@...ts.01.org>,
"linux-mm@...ck.org" <linux-mm@...ck.org>,
"linux-block@...r.kernel.org" <linux-block@...r.kernel.org>
Subject: [GIT PULL] libnvdimm-fixes for 4.5-rc2
Hi Linus, please pull from:
git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm libnvdimm-fixes
1/ Fixes to the libnvdimm 'pfn' device that establishes a reserved area
for storing a struct page array.
2/ Fixes for dax operations on a raw block device to prevent pagecache
collisions with dax mappings.
3/ A fix for pfn_t usage in vm_insert_mixed that lead to a null pointer
de-reference.
These have received build success notification from the kbuild robot
across 153 configs and pass the latest ndctl tests.
Note that the below commits are also in -mm, but as Andrew is offline
until tomorrow I thought it best to submit these for 4.5-rc2
consideration. Please yell if I should just wait next time:
65f87ee71852 fs, block: force direct-I/O for dax-enabled block devices
03fc2da63b9a mm: fix pfn_t to page conversion in vm_insert_mixed
76e9f0ee52b0 phys_to_pfn_t: use phys_addr_t
The following changes since commit 92e963f50fc74041b5e9e744c330dca48e04f08d:
Linux 4.5-rc1 (2016-01-24 13:06:47 -0800)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm libnvdimm-fixes
for you to fetch changes up to 76e9f0ee52b0be5761e29847e0ef01f23f24f1df:
phys_to_pfn_t: use phys_addr_t (2016-01-31 09:10:19 -0800)
----------------------------------------------------------------
Dan Williams (8):
libnvdimm: fix mode determination for e820 devices
libnvdimm, pfn: fix restoring memmap location
devm_memremap_pages: fix vmem_altmap lifetime + alignment handling
fs, block: force direct-I/O for dax-enabled block devices
block: revert runtime dax control of the raw block device
block: use DAX for partition table reads
mm: fix pfn_t to page conversion in vm_insert_mixed
phys_to_pfn_t: use phys_addr_t
block/ioctl.c | 38 --------------------------------------
block/partition-generic.c | 18 +++++++++++++++---
drivers/nvdimm/namespace_devs.c | 8 +++++---
drivers/nvdimm/pfn_devs.c | 4 +---
fs/block_dev.c | 28 ----------------------------
fs/dax.c | 20 ++++++++++++++++++++
include/linux/dax.h | 11 +++++++++++
include/linux/fs.h | 5 +----
include/linux/pfn_t.h | 4 ++--
include/uapi/linux/fs.h | 1 -
kernel/memremap.c | 20 ++++++++++++--------
mm/memory.c | 9 +++++++--
tools/testing/nvdimm/test/iomap.c | 2 +-
13 files changed, 75 insertions(+), 93 deletions(-)
commit 9c41242817f4b6d908886c0fdb036d9246c50630
Author: Dan Williams <dan.j.williams@...el.com>
Date: Sat Jan 23 15:34:10 2016 -0800
libnvdimm: fix mode determination for e820 devices
Correctly display "safe" mode when a btt is established on a e820/memmap
defined pmem namespace.
Signed-off-by: Dan Williams <dan.j.williams@...el.com>
commit 45eb570a0db3391c88cba04510a20fe7e4125497
Author: Dan Williams <dan.j.williams@...el.com>
Date: Fri Jan 29 17:42:51 2016 -0800
libnvdimm, pfn: fix restoring memmap location
This path was missed when turning on the memmap in pmem support. Permit
'pmem' as a valid location for the map.
Reported-by: Jeff Moyer <jmoyer@...hat.com>
Signed-off-by: Dan Williams <dan.j.williams@...el.com>
commit eb7d78c9e7f6418932bd5fbee45eb46d5ab05002
Author: Dan Williams <dan.j.williams@...el.com>
Date: Fri Jan 29 21:48:34 2016 -0800
devm_memremap_pages: fix vmem_altmap lifetime + alignment handling
to_vmem_altmap() needs to return valid results until
arch_remove_memory() completes. It also needs to be valid for any pfn
in a section regardless of whether that pfn maps to data. This escape
was a result of a bug in the unit test.
The signature of this bug is that free_pagetable() fails to retrieve a
vmem_altmap and goes off into the weeds:
BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [<ffffffff811d2629>] get_pfnblock_flags_mask+0x49/0x60
[..]
Call Trace:
[<ffffffff811d3477>] free_hot_cold_page+0x97/0x1d0
[<ffffffff811d367a>] __free_pages+0x2a/0x40
[<ffffffff8191e669>] free_pagetable+0x8c/0xd4
[<ffffffff8191ef4e>] remove_pagetable+0x37a/0x808
[<ffffffff8191b210>] vmemmap_free+0x10/0x20
Fixes: 4b94ffdc4163 ("x86, mm: introduce vmem_altmap to augment vmemmap_populate()")
Cc: Andrew Morton <akpm@...ux-foundation.org>
Reported-by: Jeff Moyer <jmoyer@...hat.com>
Signed-off-by: Dan Williams <dan.j.williams@...el.com>
commit 65f87ee71852a754f7981d0653e7136039b8798a
Author: Dan Williams <dan.j.williams@...el.com>
Date: Mon Jan 25 17:23:18 2016 -0800
fs, block: force direct-I/O for dax-enabled block devices
Similar to the file I/O path, re-direct all I/O to the DAX path for I/O
to a block-device special file. Both regular files and device special
files can use the common filp->f_mapping->host lookup to determing is
DAX is enabled.
Otherwise, we confuse the DAX code that does not expect to find live
data in the page cache:
------------[ cut here ]------------
WARNING: CPU: 0 PID: 7676 at mm/filemap.c:217
__delete_from_page_cache+0x9f6/0xb60()
Modules linked in:
CPU: 0 PID: 7676 Comm: a.out Not tainted 4.4.0+ #276
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
00000000ffffffff ffff88006d3f7738 ffffffff82999e2d 0000000000000000
ffff8800620a0000 ffffffff86473d20 ffff88006d3f7778 ffffffff81352089
ffffffff81658d36 ffffffff86473d20 00000000000000d9 ffffea0000009d60
Call Trace:
[< inline >] __dump_stack lib/dump_stack.c:15
[<ffffffff82999e2d>] dump_stack+0x6f/0xa2 lib/dump_stack.c:50
[<ffffffff81352089>] warn_slowpath_common+0xd9/0x140 kernel/panic.c:482
[<ffffffff813522b9>] warn_slowpath_null+0x29/0x30 kernel/panic.c:515
[<ffffffff81658d36>] __delete_from_page_cache+0x9f6/0xb60 mm/filemap.c:217
[<ffffffff81658fb2>] delete_from_page_cache+0x112/0x200 mm/filemap.c:244
[<ffffffff818af369>] __dax_fault+0x859/0x1800 fs/dax.c:487
[<ffffffff8186f4f6>] blkdev_dax_fault+0x26/0x30 fs/block_dev.c:1730
[< inline >] wp_pfn_shared mm/memory.c:2208
[<ffffffff816e9145>] do_wp_page+0xc85/0x14f0 mm/memory.c:2307
[< inline >] handle_pte_fault mm/memory.c:3323
[< inline >] __handle_mm_fault mm/memory.c:3417
[<ffffffff816ecec3>] handle_mm_fault+0x2483/0x4640 mm/memory.c:3446
[<ffffffff8127eff6>] __do_page_fault+0x376/0x960 arch/x86/mm/fault.c:1238
[<ffffffff8127f738>] trace_do_page_fault+0xe8/0x420 arch/x86/mm/fault.c:1331
[<ffffffff812705c4>] do_async_page_fault+0x14/0xd0 arch/x86/kernel/kvm.c:264
[<ffffffff86338f78>] async_page_fault+0x28/0x30 arch/x86/entry/entry_64.S:986
[<ffffffff86336c36>] entry_SYSCALL_64_fastpath+0x16/0x7a
arch/x86/entry/entry_64.S:185
---[ end trace dae21e0f85f1f98c ]---
Fixes: 5a023cdba50c ("block: enable dax for raw block devices")
Reported-by: Dmitry Vyukov <dvyukov@...gle.com>
Reported-by: Kirill A. Shutemov <kirill@...temov.name>
Suggested-by: Jan Kara <jack@...e.cz>
Reviewed-by: Jan Kara <jack@...e.cz>
Suggested-by: Matthew Wilcox <willy@...ux.intel.com>
Tested-by: Ross Zwisler <ross.zwisler@...ux.intel.com>
Signed-off-by: Dan Williams <dan.j.williams@...el.com>
commit 9f4736fe7ca804aa79b5916221bb13dfc6221a0f
Author: Dan Williams <dan.j.williams@...el.com>
Date: Thu Jan 28 20:13:39 2016 -0800
block: revert runtime dax control of the raw block device
Dynamically enabling DAX requires that the page cache first be flushed
and invalidated. This must occur atomically with the change of DAX mode
otherwise we confuse the fsync/msync tracking and violate data
durability guarantees. Eliminate the possibilty of DAX-disabled to
DAX-enabled transitions for now and revisit this for the next cycle.
Cc: Jan Kara <jack@...e.com>
Cc: Jeff Moyer <jmoyer@...hat.com>
Cc: Christoph Hellwig <hch@....de>
Cc: Dave Chinner <david@...morbit.com>
Cc: Matthew Wilcox <willy@...ux.intel.com>
Cc: Andrew Morton <akpm@...ux-foundation.org>
Cc: Ross Zwisler <ross.zwisler@...ux.intel.com>
Signed-off-by: Dan Williams <dan.j.williams@...el.com>
commit d1a5f2b4d8a125943dcb6b032fc7eaefc2c78296
Author: Dan Williams <dan.j.williams@...el.com>
Date: Thu Jan 28 20:25:31 2016 -0800
block: use DAX for partition table reads
Avoid populating pagecache when the block device is in DAX mode.
Otherwise these page cache entries collide with the fsync/msync
implementation and break data durability guarantees.
Cc: Jan Kara <jack@...e.com>
Cc: Jeff Moyer <jmoyer@...hat.com>
Cc: Christoph Hellwig <hch@....de>
Cc: Dave Chinner <david@...morbit.com>
Cc: Andrew Morton <akpm@...ux-foundation.org>
Reported-by: Ross Zwisler <ross.zwisler@...ux.intel.com>
Tested-by: Ross Zwisler <ross.zwisler@...ux.intel.com>
Reviewed-by: Matthew Wilcox <willy@...ux.intel.com>
Signed-off-by: Dan Williams <dan.j.williams@...el.com>
commit 03fc2da63b9a33dce784a2075c7e068bb97cbf69
Author: Dan Williams <dan.j.williams@...el.com>
Date: Tue Jan 26 09:48:05 2016 -0800
mm: fix pfn_t to page conversion in vm_insert_mixed
pfn_t_to_page() honors the flags in the pfn_t value to determine if a
pfn is backed by a page. However, vm_insert_mixed() was originally
written to use pfn_valid() to make this determination. To restore the
old/correct behavior, ignore the pfn_t flags in the !pfn_t_devmap() case
and fallback to trusting pfn_valid().
Fixes: 01c8f1c44b83 ("mm, dax, gpu: convert vm_insert_mixed to pfn_t")
Cc: Dave Hansen <dave@...1.net>
Cc: David Airlie <airlied@...ux.ie>
Reported-by: Tomi Valkeinen <tomi.valkeinen@...com>
Tested-by: Tomi Valkeinen <tomi.valkeinen@...com>
Signed-off-by: Dan Williams <dan.j.williams@...el.com>
commit 76e9f0ee52b0be5761e29847e0ef01f23f24f1df
Author: Dan Williams <dan.j.williams@...el.com>
Date: Fri Jan 22 09:43:28 2016 -0800
phys_to_pfn_t: use phys_addr_t
A dma_addr_t is potentially smaller than a phys_addr_t on some archs.
Don't truncate the address when doing the pfn conversion.
Cc: Ross Zwisler <ross.zwisler@...ux.intel.com>
Reported-by: Matthew Wilcox <willy@...ux.intel.com>
[willy: fix pfn_t_to_phys as well]
Signed-off-by: Dan Williams <dan.j.williams@...el.com>
Powered by blists - more mailing lists