All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Williams, Dan J" <dan.j.williams@intel.com>
To: "torvalds@linux-foundation.org" <torvalds@linux-foundation.org>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-nvdimm@lists.01.org" <linux-nvdimm@lists.01.org>,
	"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
	"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>
Subject: [GIT PULL] libnvdimm for 4.15
Date: Thu, 16 Nov 2017 22:12:06 +0000	[thread overview]
Message-ID: <1510870318.21471.1.camel@intel.com> (raw)

Hi Linus, please pull from:

  git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm tags/libnvdimm-for-4.15

...to receive the libnvdimm and dax update for 4.15.

Save for a few late fixes, all of these commits have shipped in -next
releases since before the merge window opened, and 0day has given a
build success notification. The MAP_SYNC work included some re-
factoring of dax_insert_mapping(), to break out a common
dax_iomap_pfn() helper, that collided with other small changes in
fs/dax.c. A suggested merge resolution for that collision and a few
other minor collisions is included below after the diffstat.

The ext4 touches came from Jan, and the xfs touches have Darrick's
reviewed-by. An xfstest for the MAP_SYNC feature [1] has been through a
few round of reviews and is on track to be merged. The final policy of
how MAP_SHARED_VALIDATE and MAP_SYNC flags behave was discussed by you
and Jan here: [2].

[1]: https://lists.01.org/pipermail/linux-nvdimm/2017-October/012974.ht
ml
[2]: https://lists.01.org/pipermail/linux-nvdimm/2017-October/012894.ht
ml

---

The following changes since commit 8a5776a5f49812d29fe4b2d0a2d71675c3facf3f:

  Linux 4.14-rc4 (2017-10-08 20:53:29 -0700)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm tags/libnvdimm-for-4.15

for you to fetch changes up to 4247f24c23589bcc3bc3490515ef8c9497e9ae55:

  Merge branch 'for-4.15/dax' into libnvdimm-for-next (2017-11-15 16:56:11 -0800)

----------------------------------------------------------------
libnvdimm for 4.15

* Introduce MAP_SYNC and MAP_SHARED_VALIDATE, a mechanism to enable
 'userspace flush' of persistent memory updates via filesystem-dax
  mappings. It arranges for any filesystem metadata updates that may be
  required to satisfy a write fault to also be flushed ("on disk") before
  the kernel returns to userspace from the fault handler. Effectively
  every write-fault that dirties metadata completes an fsync() before
  returning from the fault handler. The new MAP_SHARED_VALIDATE mapping
  type guarantees that the MAP_SYNC flag is validated as supported by the
  filesystem's ->mmap() file operation.

* Add support for the standard ACPI 6.2 label access methods that
  replace the NVDIMM_FAMILY_INTEL (vendor specific) label methods. This
  enables interoperability with environments that only implement the
  standardized methods.

* Add support for the ACPI 6.2 NVDIMM media error injection methods.

* Add support for the NVDIMM_FAMILY_INTEL v1.6 DIMM commands for latch
  last shutdown status, firmware update, SMART error injection, and
  SMART alarm threshold control.

* Cleanup physical address information disclosures to be root-only.

* Fix revalidation of the DIMM "locked label area" status to support
  dynamic unlock of the label area.

* Expand unit test infrastructure to mock the ACPI 6.2 Translate SPA
  (system-physical-address) command and error injection commands.

Acknowledgements that came after the commits were pushed to -next:

957ac8c421ad dax: fix PMD faults on zero-length files
Reviewed-by: Ross Zwisler <ross.zwisler@linux.intel.com>

a39e596baa07 xfs: support for synchronous DAX faults
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

7b565c9f965b xfs: Implement xfs_filemap_pfn_mkwrite() using __xfs_filemap_fault()
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

----------------------------------------------------------------
Arvind Yadav (1):
      dax: pr_err() strings should end with newlines

Christoph Hellwig (1):
      xfs: support for synchronous DAX faults

Colin Ian King (1):
      libnvdimm, namespace: make a couple of functions static

Dan Williams (18):
      libnvdimm, dimm: clear 'locked' status on successful DIMM enable
      libnvdimm, region : make 'resource' attribute only readable by root
      libnvdimm, namespace: make 'resource' attribute only readable by root
      libnvdimm, pfn: make 'resource' attribute only readable by root
      libnvdimm, namespace: fix label initialization to use valid seq numbers
      acpi, nfit: add support for the _LSI, _LSR, and _LSW label methods
      libnvdimm: introduce 'flags' attribute for DIMM 'lock' and 'alias' status
      acpi, nfit: hide unknown commands from nmemX/commands
      acpi, nfit: add support for NVDIMM_FAMILY_INTEL v1.6 DSMs
      mm: introduce MAP_SHARED_VALIDATE, a mechanism to safely define new mmap flags
      acpi, nfit: validate commands against the device type
      tools/testing/nvdimm: unit test clear-error commands
      fs, dax: unify IOMAP_F_DIRTY read vs write handling policy in the dax core
      dax: quiet bdev_dax_supported()
      brd: remove dax support
      dax: stop requiring a live device for dax_flush()
      acpi, nfit: add 'Enable Latch System Shutdown Status' command support
      Merge branch 'for-4.15/dax' into libnvdimm-for-next

Dave Jiang (2):
      libnvdimm: move poison list functions to a new 'badrange' file
      nfit_test: add error injection DSMs

Jan Kara (17):
      mm: Handle 0 flags in _calc_vm_trans() macro
      mm: Remove VM_FAULT_HWPOISON_LARGE_MASK
      dax: Simplify arguments of dax_insert_mapping()
      dax: Factor out getting of pfn out of iomap
      dax: Create local variable for VMA in dax_iomap_pte_fault()
      dax: Create local variable for vmf->flags & FAULT_FLAG_WRITE test
      dax: Inline dax_insert_mapping() into the callsite
      dax: Inline dax_pmd_insert_mapping() into the callsite
      dax: Fix comment describing dax_iomap_fault()
      dax: Allow dax_iomap_fault() to return pfn
      dax: Allow tuning whether dax_insert_mapping_entry() dirties entry
      mm: Define MAP_SYNC and VM_SYNC flags
      dax, iomap: Add support for synchronous faults
      dax: Implement dax_finish_sync_fault()
      ext4: Simplify error handling in ext4_dax_huge_fault()
      ext4: Support for synchronous DAX faults
      xfs: Implement xfs_filemap_pfn_mkwrite() using __xfs_filemap_fault()

Jeff Moyer (1):
      dax: fix PMD faults on zero-length files

Mikulas Patocka (1):
      dax: fix general protection fault in dax_alloc_inode

Ross Zwisler (2):
      MAINTAINERS: Add entry for device DAX
      dev/dax: fix uninitialized variable build warning

Vishal Verma (3):
      libnvdimm, badrange: remove a WARN for list_empty
      nfit_test: when clearing poison, also remove badrange entries
      tools/testing/nvdimm: stricter bounds checking for error injection commands

Yasunori Goto (3):
      nfit_test Make private definitions to command emulation
      acpi nfit: Enable to show what feature is supported via ND_CMD_CALL for nfit_test
      acpi nfit: nfit_test supports translate SPA

 MAINTAINERS                                  |   8 +-
 arch/alpha/include/uapi/asm/mman.h           |   1 +
 arch/mips/include/uapi/asm/mman.h            |   1 +
 arch/parisc/include/uapi/asm/mman.h          |   1 +
 arch/xtensa/include/uapi/asm/mman.h          |   1 +
 drivers/acpi/nfit/core.c                     | 274 ++++++++++++++++++++++-
 drivers/acpi/nfit/mce.c                      |   2 +-
 drivers/acpi/nfit/nfit.h                     |  37 +++-
 drivers/block/Kconfig                        |  12 -
 drivers/block/brd.c                          |  65 ------
 drivers/dax/device.c                         |   3 +-
 drivers/dax/super.c                          |  14 +-
 drivers/nvdimm/Makefile                      |   1 +
 drivers/nvdimm/badrange.c                    | 293 ++++++++++++++++++++++++
 drivers/nvdimm/bus.c                         |  24 +-
 drivers/nvdimm/core.c                        | 260 +---------------------
 drivers/nvdimm/dimm.c                        |   3 +
 drivers/nvdimm/dimm_devs.c                   |  19 ++
 drivers/nvdimm/label.c                       |   2 +-
 drivers/nvdimm/namespace_devs.c              |   6 +-
 drivers/nvdimm/nd-core.h                     |   3 +-
 drivers/nvdimm/nd.h                          |   7 +-
 drivers/nvdimm/pfn_devs.c                    |   8 +
 drivers/nvdimm/region_devs.c                 |   8 +-
 fs/dax.c                                     | 319 ++++++++++++++++++---------
 fs/ext2/file.c                               |   2 +-
 fs/ext4/file.c                               |  26 ++-
 fs/ext4/inode.c                              |  15 ++
 fs/jbd2/journal.c                            |  17 ++
 fs/proc/task_mmu.c                           |   1 +
 fs/xfs/xfs_file.c                            |  44 ++--
 fs/xfs/xfs_iomap.c                           |   5 +
 fs/xfs/xfs_trace.h                           |   2 -
 include/linux/dax.h                          |   4 +-
 include/linux/fs.h                           |   1 +
 include/linux/iomap.h                        |   5 +
 include/linux/jbd2.h                         |   1 +
 include/linux/libnvdimm.h                    |  21 +-
 include/linux/mm.h                           |   9 +-
 include/linux/mman.h                         |  48 +++-
 include/trace/events/fs_dax.h                |   3 +-
 include/uapi/asm-generic/mman-common.h       |   1 +
 include/uapi/asm-generic/mman.h              |   1 +
 mm/mmap.c                                    |  15 ++
 tools/include/uapi/asm-generic/mman-common.h |   1 +
 tools/testing/nvdimm/Kbuild                  |   1 +
 tools/testing/nvdimm/test/nfit.c             | 319 ++++++++++++++++++++++++---
 tools/testing/nvdimm/test/nfit_test.h        |  52 +++++
 48 files changed, 1406 insertions(+), 560 deletions(-)
 create mode 100644 drivers/nvdimm/badrange.c

---

commit 82f3359eb04e3a3b5d23655eee58d31a1b17c902
Merge: 18c83d2c0390 4247f24c2358
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Thu Nov 16 13:20:35 2017 -0800

    Merge branch 'libnvdimm-for-next' into test

diff --cc drivers/block/brd.c
index 588360d79fca,b2391bbd7e5a..8028a3a7e7fd
--- a/drivers/block/brd.c
+++ b/drivers/block/brd.c
@@@ -20,12 -20,6 +20,7 @@@
  #include <linux/radix-tree.h>
  #include <linux/fs.h>
  #include <linux/slab.h>
 +#include <linux/backing-dev.h>
- #ifdef CONFIG_BLK_DEV_RAM_DAX
- #include <linux/pfn_t.h>
- #include <linux/dax.h>
- #include <linux/uio.h>
- #endif
  
  #include <linux/uaccess.h>
  
@@@ -449,23 -401,9 +401,10 @@@ static struct brd_device *brd_alloc(in
  	disk->flags		= GENHD_FL_EXT_DEVT;
  	sprintf(disk->disk_name, "ram%d", i);
  	set_capacity(disk, rd_size * 2);
 +	disk->queue->backing_dev_info->capabilities |= BDI_CAP_SYNCHRONOUS_IO;
  
- #ifdef CONFIG_BLK_DEV_RAM_DAX
- 	queue_flag_set_unlocked(QUEUE_FLAG_DAX, brd->brd_queue);
- 	brd->dax_dev = alloc_dax(brd, disk->disk_name, &brd_dax_ops);
- 	if (!brd->dax_dev)
- 		goto out_free_inode;
- #endif
- 
- 
  	return brd;
  
- #ifdef CONFIG_BLK_DEV_RAM_DAX
- out_free_inode:
- 	kill_dax(brd->dax_dev);
- 	put_dax(brd->dax_dev);
- #endif
  out_free_queue:
  	blk_cleanup_queue(brd->brd_queue);
  out_free_dev:
diff --cc fs/dax.c
index 3652b26a0048,f757cd0e2d07..95981591977a
--- a/fs/dax.c
+++ b/fs/dax.c
@@@ -825,38 -820,42 +825,42 @@@ out
  }
  EXPORT_SYMBOL_GPL(dax_writeback_mapping_range);
  
- static int dax_insert_mapping(struct address_space *mapping,
- 		struct block_device *bdev, struct dax_device *dax_dev,
- 		sector_t sector, size_t size, void *entry,
- 		struct vm_area_struct *vma, struct vm_fault *vmf)
+ static sector_t dax_iomap_sector(struct iomap *iomap, loff_t pos)
  {
- 	unsigned long vaddr = vmf->address;
- 	void *ret, *kaddr;
 -	return iomap->blkno + (((pos & PAGE_MASK) - iomap->offset) >> 9);
++	return (iomap->addr + (pos & PAGE_MASK) - iomap->offset) >> 9;
+ }
+ 
+ static int dax_iomap_pfn(struct iomap *iomap, loff_t pos, size_t size,
+ 			 pfn_t *pfnp)
+ {
+ 	const sector_t sector = dax_iomap_sector(iomap, pos);
  	pgoff_t pgoff;
+ 	void *kaddr;
  	int id, rc;
- 	pfn_t pfn;
+ 	long length;
  
- 	rc = bdev_dax_pgoff(bdev, sector, size, &pgoff);
+ 	rc = bdev_dax_pgoff(iomap->bdev, sector, size, &pgoff);
  	if (rc)
  		return rc;
- 
  	id = dax_read_lock();
- 	rc = dax_direct_access(dax_dev, pgoff, PHYS_PFN(size), &kaddr, &pfn);
- 	if (rc < 0) {
- 		dax_read_unlock(id);
- 		return rc;
+ 	length = dax_direct_access(iomap->dax_dev, pgoff, PHYS_PFN(size),
+ 				   &kaddr, pfnp);
+ 	if (length < 0) {
+ 		rc = length;
+ 		goto out;
  	}
+ 	rc = -EINVAL;
+ 	if (PFN_PHYS(length) < size)
+ 		goto out;
+ 	if (pfn_t_to_pfn(*pfnp) & (PHYS_PFN(size)-1))
+ 		goto out;
+ 	/* For larger pages we need devmap */
+ 	if (length > 1 && !pfn_t_devmap(*pfnp))
+ 		goto out;
+ 	rc = 0;
+ out:
  	dax_read_unlock(id);
- 
- 	ret = dax_insert_mapping_entry(mapping, vmf, entry, sector, 0);
- 	if (IS_ERR(ret))
- 		return PTR_ERR(ret);
- 
- 	trace_dax_insert_mapping(mapping->host, vmf, ret);
- 	if (vmf->flags & FAULT_FLAG_WRITE)
- 		return vm_insert_mixed_mkwrite(vma, vaddr, pfn);
- 	else
- 		return vm_insert_mixed(vma, vaddr, pfn);
+ 	return rc;
  }
  
  /*
diff --cc fs/ext4/inode.c
index 8d2b582fb141,ee4d907a4251..0992d76f7ab1
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@@ -3384,6 -3393,20 +3384,19 @@@ static int ext4_releasepage(struct pag
  		return try_to_free_buffers(page);
  }
  
 -#ifdef CONFIG_FS_DAX
+ static bool ext4_inode_datasync_dirty(struct inode *inode)
+ {
+ 	journal_t *journal = EXT4_SB(inode->i_sb)->s_journal;
+ 
+ 	if (journal)
+ 		return !jbd2_transaction_committed(journal,
+ 					EXT4_I(inode)->i_datasync_tid);
+ 	/* Any metadata buffers to write? */
+ 	if (!list_empty(&inode->i_mapping->private_list))
+ 		return true;
+ 	return inode->i_state & I_DIRTY_DATASYNC;
+ }
+ 
  static int ext4_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
  			    unsigned flags, struct iomap *iomap)
  {
diff --cc include/linux/iomap.h
index ca10767ab73d,73e3b7085dbe..d187cf7c4757
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@@ -22,8 -21,12 +22,13 @@@ struct vm_fault
  /*
   * Flags for all iomap mappings:
   */
 -#define IOMAP_F_NEW	0x01	/* blocks have been newly allocated */
 +#define IOMAP_F_NEW		0x01	/* blocks have been newly allocated */
 +#define IOMAP_F_BOUNDARY	0x02	/* mapping ends at metadata boundary */
+ /*
+  * IOMAP_F_DIRTY indicates the inode has uncommitted metadata needed to access
+  * written data and requires fdatasync to commit them to persistent storage.
+  */
 -#define IOMAP_F_DIRTY	0x02
++#define IOMAP_F_DIRTY		0x04
  
  /*
   * Flags that only need to be reported for IOMAP_REPORT requests:

WARNING: multiple messages have this Message-ID (diff)
From: "Williams, Dan J" <dan.j.williams@intel.com>
To: "torvalds@linux-foundation.org" <torvalds@linux-foundation.org>
Cc: "linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
	"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-nvdimm@lists.01.org" <linux-nvdimm@lists.01.org>
Subject: [GIT PULL] libnvdimm for 4.15
Date: Thu, 16 Nov 2017 22:12:06 +0000	[thread overview]
Message-ID: <1510870318.21471.1.camel@intel.com> (raw)

Hi Linus, please pull from:

  git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm tags/libnvdimm-for-4.15

...to receive the libnvdimm and dax update for 4.15.

Save for a few late fixes, all of these commits have shipped in -next
releases since before the merge window opened, and 0day has given a
build success notification. The MAP_SYNC work included some re-
factoring of dax_insert_mapping(), to break out a common
dax_iomap_pfn() helper, that collided with other small changes in
fs/dax.c. A suggested merge resolution for that collision and a few
other minor collisions is included below after the diffstat.

The ext4 touches came from Jan, and the xfs touches have Darrick's
reviewed-by. An xfstest for the MAP_SYNC feature [1] has been through a
few round of reviews and is on track to be merged. The final policy of
how MAP_SHARED_VALIDATE and MAP_SYNC flags behave was discussed by you
and Jan here: [2].

[1]: https://lists.01.org/pipermail/linux-nvdimm/2017-October/012974.ht
ml
[2]: https://lists.01.org/pipermail/linux-nvdimm/2017-October/012894.ht
ml

---

The following changes since commit 8a5776a5f49812d29fe4b2d0a2d71675c3facf3f:

  Linux 4.14-rc4 (2017-10-08 20:53:29 -0700)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm tags/libnvdimm-for-4.15

for you to fetch changes up to 4247f24c23589bcc3bc3490515ef8c9497e9ae55:

  Merge branch 'for-4.15/dax' into libnvdimm-for-next (2017-11-15 16:56:11 -0800)

----------------------------------------------------------------
libnvdimm for 4.15

* Introduce MAP_SYNC and MAP_SHARED_VALIDATE, a mechanism to enable
 'userspace flush' of persistent memory updates via filesystem-dax
  mappings. It arranges for any filesystem metadata updates that may be
  required to satisfy a write fault to also be flushed ("on disk") before
  the kernel returns to userspace from the fault handler. Effectively
  every write-fault that dirties metadata completes an fsync() before
  returning from the fault handler. The new MAP_SHARED_VALIDATE mapping
  type guarantees that the MAP_SYNC flag is validated as supported by the
  filesystem's ->mmap() file operation.

* Add support for the standard ACPI 6.2 label access methods that
  replace the NVDIMM_FAMILY_INTEL (vendor specific) label methods. This
  enables interoperability with environments that only implement the
  standardized methods.

* Add support for the ACPI 6.2 NVDIMM media error injection methods.

* Add support for the NVDIMM_FAMILY_INTEL v1.6 DIMM commands for latch
  last shutdown status, firmware update, SMART error injection, and
  SMART alarm threshold control.

* Cleanup physical address information disclosures to be root-only.

* Fix revalidation of the DIMM "locked label area" status to support
  dynamic unlock of the label area.

* Expand unit test infrastructure to mock the ACPI 6.2 Translate SPA
  (system-physical-address) command and error injection commands.

Acknowledgements that came after the commits were pushed to -next:

957ac8c421ad dax: fix PMD faults on zero-length files
Reviewed-by: Ross Zwisler <ross.zwisler@linux.intel.com>

a39e596baa07 xfs: support for synchronous DAX faults
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

7b565c9f965b xfs: Implement xfs_filemap_pfn_mkwrite() using __xfs_filemap_fault()
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

----------------------------------------------------------------
Arvind Yadav (1):
      dax: pr_err() strings should end with newlines

Christoph Hellwig (1):
      xfs: support for synchronous DAX faults

Colin Ian King (1):
      libnvdimm, namespace: make a couple of functions static

Dan Williams (18):
      libnvdimm, dimm: clear 'locked' status on successful DIMM enable
      libnvdimm, region : make 'resource' attribute only readable by root
      libnvdimm, namespace: make 'resource' attribute only readable by root
      libnvdimm, pfn: make 'resource' attribute only readable by root
      libnvdimm, namespace: fix label initialization to use valid seq numbers
      acpi, nfit: add support for the _LSI, _LSR, and _LSW label methods
      libnvdimm: introduce 'flags' attribute for DIMM 'lock' and 'alias' status
      acpi, nfit: hide unknown commands from nmemX/commands
      acpi, nfit: add support for NVDIMM_FAMILY_INTEL v1.6 DSMs
      mm: introduce MAP_SHARED_VALIDATE, a mechanism to safely define new mmap flags
      acpi, nfit: validate commands against the device type
      tools/testing/nvdimm: unit test clear-error commands
      fs, dax: unify IOMAP_F_DIRTY read vs write handling policy in the dax core
      dax: quiet bdev_dax_supported()
      brd: remove dax support
      dax: stop requiring a live device for dax_flush()
      acpi, nfit: add 'Enable Latch System Shutdown Status' command support
      Merge branch 'for-4.15/dax' into libnvdimm-for-next

Dave Jiang (2):
      libnvdimm: move poison list functions to a new 'badrange' file
      nfit_test: add error injection DSMs

Jan Kara (17):
      mm: Handle 0 flags in _calc_vm_trans() macro
      mm: Remove VM_FAULT_HWPOISON_LARGE_MASK
      dax: Simplify arguments of dax_insert_mapping()
      dax: Factor out getting of pfn out of iomap
      dax: Create local variable for VMA in dax_iomap_pte_fault()
      dax: Create local variable for vmf->flags & FAULT_FLAG_WRITE test
      dax: Inline dax_insert_mapping() into the callsite
      dax: Inline dax_pmd_insert_mapping() into the callsite
      dax: Fix comment describing dax_iomap_fault()
      dax: Allow dax_iomap_fault() to return pfn
      dax: Allow tuning whether dax_insert_mapping_entry() dirties entry
      mm: Define MAP_SYNC and VM_SYNC flags
      dax, iomap: Add support for synchronous faults
      dax: Implement dax_finish_sync_fault()
      ext4: Simplify error handling in ext4_dax_huge_fault()
      ext4: Support for synchronous DAX faults
      xfs: Implement xfs_filemap_pfn_mkwrite() using __xfs_filemap_fault()

Jeff Moyer (1):
      dax: fix PMD faults on zero-length files

Mikulas Patocka (1):
      dax: fix general protection fault in dax_alloc_inode

Ross Zwisler (2):
      MAINTAINERS: Add entry for device DAX
      dev/dax: fix uninitialized variable build warning

Vishal Verma (3):
      libnvdimm, badrange: remove a WARN for list_empty
      nfit_test: when clearing poison, also remove badrange entries
      tools/testing/nvdimm: stricter bounds checking for error injection commands

Yasunori Goto (3):
      nfit_test Make private definitions to command emulation
      acpi nfit: Enable to show what feature is supported via ND_CMD_CALL for nfit_test
      acpi nfit: nfit_test supports translate SPA

 MAINTAINERS                                  |   8 +-
 arch/alpha/include/uapi/asm/mman.h           |   1 +
 arch/mips/include/uapi/asm/mman.h            |   1 +
 arch/parisc/include/uapi/asm/mman.h          |   1 +
 arch/xtensa/include/uapi/asm/mman.h          |   1 +
 drivers/acpi/nfit/core.c                     | 274 ++++++++++++++++++++++-
 drivers/acpi/nfit/mce.c                      |   2 +-
 drivers/acpi/nfit/nfit.h                     |  37 +++-
 drivers/block/Kconfig                        |  12 -
 drivers/block/brd.c                          |  65 ------
 drivers/dax/device.c                         |   3 +-
 drivers/dax/super.c                          |  14 +-
 drivers/nvdimm/Makefile                      |   1 +
 drivers/nvdimm/badrange.c                    | 293 ++++++++++++++++++++++++
 drivers/nvdimm/bus.c                         |  24 +-
 drivers/nvdimm/core.c                        | 260 +---------------------
 drivers/nvdimm/dimm.c                        |   3 +
 drivers/nvdimm/dimm_devs.c                   |  19 ++
 drivers/nvdimm/label.c                       |   2 +-
 drivers/nvdimm/namespace_devs.c              |   6 +-
 drivers/nvdimm/nd-core.h                     |   3 +-
 drivers/nvdimm/nd.h                          |   7 +-
 drivers/nvdimm/pfn_devs.c                    |   8 +
 drivers/nvdimm/region_devs.c                 |   8 +-
 fs/dax.c                                     | 319 ++++++++++++++++++---------
 fs/ext2/file.c                               |   2 +-
 fs/ext4/file.c                               |  26 ++-
 fs/ext4/inode.c                              |  15 ++
 fs/jbd2/journal.c                            |  17 ++
 fs/proc/task_mmu.c                           |   1 +
 fs/xfs/xfs_file.c                            |  44 ++--
 fs/xfs/xfs_iomap.c                           |   5 +
 fs/xfs/xfs_trace.h                           |   2 -
 include/linux/dax.h                          |   4 +-
 include/linux/fs.h                           |   1 +
 include/linux/iomap.h                        |   5 +
 include/linux/jbd2.h                         |   1 +
 include/linux/libnvdimm.h                    |  21 +-
 include/linux/mm.h                           |   9 +-
 include/linux/mman.h                         |  48 +++-
 include/trace/events/fs_dax.h                |   3 +-
 include/uapi/asm-generic/mman-common.h       |   1 +
 include/uapi/asm-generic/mman.h              |   1 +
 mm/mmap.c                                    |  15 ++
 tools/include/uapi/asm-generic/mman-common.h |   1 +
 tools/testing/nvdimm/Kbuild                  |   1 +
 tools/testing/nvdimm/test/nfit.c             | 319 ++++++++++++++++++++++++---
 tools/testing/nvdimm/test/nfit_test.h        |  52 +++++
 48 files changed, 1406 insertions(+), 560 deletions(-)
 create mode 100644 drivers/nvdimm/badrange.c

---

commit 82f3359eb04e3a3b5d23655eee58d31a1b17c902
Merge: 18c83d2c0390 4247f24c2358
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Thu Nov 16 13:20:35 2017 -0800

    Merge branch 'libnvdimm-for-next' into test

diff --cc drivers/block/brd.c
index 588360d79fca,b2391bbd7e5a..8028a3a7e7fd
--- a/drivers/block/brd.c
+++ b/drivers/block/brd.c
@@@ -20,12 -20,6 +20,7 @@@
  #include <linux/radix-tree.h>
  #include <linux/fs.h>
  #include <linux/slab.h>
 +#include <linux/backing-dev.h>
- #ifdef CONFIG_BLK_DEV_RAM_DAX
- #include <linux/pfn_t.h>
- #include <linux/dax.h>
- #include <linux/uio.h>
- #endif
  
  #include <linux/uaccess.h>
  
@@@ -449,23 -401,9 +401,10 @@@ static struct brd_device *brd_alloc(in
  	disk->flags		= GENHD_FL_EXT_DEVT;
  	sprintf(disk->disk_name, "ram%d", i);
  	set_capacity(disk, rd_size * 2);
 +	disk->queue->backing_dev_info->capabilities |= BDI_CAP_SYNCHRONOUS_IO;
  
- #ifdef CONFIG_BLK_DEV_RAM_DAX
- 	queue_flag_set_unlocked(QUEUE_FLAG_DAX, brd->brd_queue);
- 	brd->dax_dev = alloc_dax(brd, disk->disk_name, &brd_dax_ops);
- 	if (!brd->dax_dev)
- 		goto out_free_inode;
- #endif
- 
- 
  	return brd;
  
- #ifdef CONFIG_BLK_DEV_RAM_DAX
- out_free_inode:
- 	kill_dax(brd->dax_dev);
- 	put_dax(brd->dax_dev);
- #endif
  out_free_queue:
  	blk_cleanup_queue(brd->brd_queue);
  out_free_dev:
diff --cc fs/dax.c
index 3652b26a0048,f757cd0e2d07..95981591977a
--- a/fs/dax.c
+++ b/fs/dax.c
@@@ -825,38 -820,42 +825,42 @@@ out
  }
  EXPORT_SYMBOL_GPL(dax_writeback_mapping_range);
  
- static int dax_insert_mapping(struct address_space *mapping,
- 		struct block_device *bdev, struct dax_device *dax_dev,
- 		sector_t sector, size_t size, void *entry,
- 		struct vm_area_struct *vma, struct vm_fault *vmf)
+ static sector_t dax_iomap_sector(struct iomap *iomap, loff_t pos)
  {
- 	unsigned long vaddr = vmf->address;
- 	void *ret, *kaddr;
 -	return iomap->blkno + (((pos & PAGE_MASK) - iomap->offset) >> 9);
++	return (iomap->addr + (pos & PAGE_MASK) - iomap->offset) >> 9;
+ }
+ 
+ static int dax_iomap_pfn(struct iomap *iomap, loff_t pos, size_t size,
+ 			 pfn_t *pfnp)
+ {
+ 	const sector_t sector = dax_iomap_sector(iomap, pos);
  	pgoff_t pgoff;
+ 	void *kaddr;
  	int id, rc;
- 	pfn_t pfn;
+ 	long length;
  
- 	rc = bdev_dax_pgoff(bdev, sector, size, &pgoff);
+ 	rc = bdev_dax_pgoff(iomap->bdev, sector, size, &pgoff);
  	if (rc)
  		return rc;
- 
  	id = dax_read_lock();
- 	rc = dax_direct_access(dax_dev, pgoff, PHYS_PFN(size), &kaddr, &pfn);
- 	if (rc < 0) {
- 		dax_read_unlock(id);
- 		return rc;
+ 	length = dax_direct_access(iomap->dax_dev, pgoff, PHYS_PFN(size),
+ 				   &kaddr, pfnp);
+ 	if (length < 0) {
+ 		rc = length;
+ 		goto out;
  	}
+ 	rc = -EINVAL;
+ 	if (PFN_PHYS(length) < size)
+ 		goto out;
+ 	if (pfn_t_to_pfn(*pfnp) & (PHYS_PFN(size)-1))
+ 		goto out;
+ 	/* For larger pages we need devmap */
+ 	if (length > 1 && !pfn_t_devmap(*pfnp))
+ 		goto out;
+ 	rc = 0;
+ out:
  	dax_read_unlock(id);
- 
- 	ret = dax_insert_mapping_entry(mapping, vmf, entry, sector, 0);
- 	if (IS_ERR(ret))
- 		return PTR_ERR(ret);
- 
- 	trace_dax_insert_mapping(mapping->host, vmf, ret);
- 	if (vmf->flags & FAULT_FLAG_WRITE)
- 		return vm_insert_mixed_mkwrite(vma, vaddr, pfn);
- 	else
- 		return vm_insert_mixed(vma, vaddr, pfn);
+ 	return rc;
  }
  
  /*
diff --cc fs/ext4/inode.c
index 8d2b582fb141,ee4d907a4251..0992d76f7ab1
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@@ -3384,6 -3393,20 +3384,19 @@@ static int ext4_releasepage(struct pag
  		return try_to_free_buffers(page);
  }
  
 -#ifdef CONFIG_FS_DAX
+ static bool ext4_inode_datasync_dirty(struct inode *inode)
+ {
+ 	journal_t *journal = EXT4_SB(inode->i_sb)->s_journal;
+ 
+ 	if (journal)
+ 		return !jbd2_transaction_committed(journal,
+ 					EXT4_I(inode)->i_datasync_tid);
+ 	/* Any metadata buffers to write? */
+ 	if (!list_empty(&inode->i_mapping->private_list))
+ 		return true;
+ 	return inode->i_state & I_DIRTY_DATASYNC;
+ }
+ 
  static int ext4_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
  			    unsigned flags, struct iomap *iomap)
  {
diff --cc include/linux/iomap.h
index ca10767ab73d,73e3b7085dbe..d187cf7c4757
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@@ -22,8 -21,12 +22,13 @@@ struct vm_fault
  /*
   * Flags for all iomap mappings:
   */
 -#define IOMAP_F_NEW	0x01	/* blocks have been newly allocated */
 +#define IOMAP_F_NEW		0x01	/* blocks have been newly allocated */
 +#define IOMAP_F_BOUNDARY	0x02	/* mapping ends at metadata boundary */
+ /*
+  * IOMAP_F_DIRTY indicates the inode has uncommitted metadata needed to access
+  * written data and requires fdatasync to commit them to persistent storage.
+  */
 -#define IOMAP_F_DIRTY	0x02
++#define IOMAP_F_DIRTY		0x04
  
  /*
   * Flags that only need to be reported for IOMAP_REPORT requests:
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

             reply	other threads:[~2017-11-16 22:12 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-16 22:12 Williams, Dan J [this message]
2017-11-16 22:12 ` [GIT PULL] libnvdimm for 4.15 Williams, Dan J

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1510870318.21471.1.camel@intel.com \
    --to=dan.j.williams@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.