All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Williams <dan.j.williams@intel.com>
To: akpm@linux-foundation.org
Cc: Toshi Kani <toshi.kani@hpe.com>,
	linux-nvdimm@lists.01.org, linux-mm@kvack.org,
	Matthew Wilcox <willy@linux.intel.com>,
	Ross Zwisler <ross.zwisler@linux.intel.com>,
	"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Subject: [PATCH -mm 06/25] dax: Split pmd map when fallback on COW
Date: Mon, 07 Dec 2015 17:33:08 -0800	[thread overview]
Message-ID: <20151208013308.25030.16548.stgit@dwillia2-desk3.jf.intel.com> (raw)
In-Reply-To: <20151208013236.25030.68781.stgit@dwillia2-desk3.jf.intel.com>

From: Toshi Kani <toshi.kani@hpe.com>

An infinite loop of PMD faults was observed when attempted to
mlock() a private read-only PMD mmap'd range of a DAX file.

__dax_pmd_fault() simply returns with VM_FAULT_FALLBACK when
falling back to PTE on COW.  However, __handle_mm_fault()
returns without falling back to handle_pte_fault() because
a PMD map is present in this case.

Change __dax_pmd_fault() to split the PMD map, if present,
before returning with VM_FAULT_FALLBACK.

Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Matthew Wilcox <willy@linux.intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 fs/dax.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/fs/dax.c b/fs/dax.c
index 68b04de71d19..88e7b3bfef21 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -578,8 +578,10 @@ int __dax_pmd_fault(struct vm_area_struct *vma, unsigned long address,
 		return VM_FAULT_FALLBACK;
 
 	/* Fall back to PTEs if we're going to COW */
-	if (write && !(vma->vm_flags & VM_SHARED))
+	if (write && !(vma->vm_flags & VM_SHARED)) {
+		split_huge_pmd(vma, pmd, address);
 		return VM_FAULT_FALLBACK;
+	}
 	/* If the PMD would extend outside the VMA */
 	if (pmd_addr < vma->vm_start)
 		return VM_FAULT_FALLBACK;

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2015-12-08  1:33 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-08  1:32 [PATCH -mm 00/25] get_user_pages() for dax pte and pmd mappings Dan Williams
2015-12-08  1:32 ` [PATCH -mm 01/25] pmem, dax: clean up clear_pmem() Dan Williams
2015-12-08  1:32 ` [PATCH -mm 02/25] dax: increase granularity of dax_clear_blocks() operations Dan Williams
2015-12-08  1:32 ` [PATCH -mm 03/25] dax: guarantee page aligned results from bdev_direct_access() Dan Williams
2015-12-08  1:32 ` [PATCH -mm 04/25] dax: fix lifetime of in-kernel dax mappings with dax_map_atomic() Dan Williams
2015-12-08  1:33 ` [PATCH -mm 05/25] mm, dax: fix livelock, allow dax pmd mappings to become writeable Dan Williams
2015-12-08  1:33 ` Dan Williams [this message]
2015-12-08  1:33 ` [PATCH -mm 07/25] um: kill pfn_t Dan Williams
2015-12-08  1:33 ` [PATCH -mm 08/25] kvm: rename pfn_t to kvm_pfn_t Dan Williams
2015-12-08  1:33 ` [PATCH -mm 09/25] mm, dax, pmem: introduce pfn_t Dan Williams
2015-12-08  1:33 ` [PATCH -mm 10/25] mm: introduce find_dev_pagemap() Dan Williams
2015-12-08  1:33 ` [PATCH -mm 11/25] x86, mm: introduce vmem_altmap to augment vmemmap_populate() Dan Williams
2015-12-08  1:33 ` [PATCH -mm 12/25] libnvdimm, pfn, pmem: allocate memmap array in persistent memory Dan Williams
2015-12-08  1:33 ` [PATCH -mm 13/25] avr32: convert to asm-generic/memory_model.h Dan Williams
2015-12-08  1:33 ` [PATCH -mm 14/25] hugetlb: fix compile error on tile Dan Williams
2015-12-08  1:33 ` [PATCH -mm 15/25] frv: fix compiler warning from definition of __pmd() Dan Williams
2015-12-08  1:34 ` [PATCH -mm 16/25] x86, mm: introduce _PAGE_DEVMAP Dan Williams
2015-12-08  1:34   ` Dan Williams
2015-12-08  1:34 ` [PATCH -mm 17/25] mm, dax, gpu: convert vm_insert_mixed to pfn_t Dan Williams
2015-12-08  1:34 ` [PATCH -mm 18/25] mm, dax: convert vmf_insert_pfn_pmd() " Dan Williams
2015-12-08  1:34 ` [PATCH -mm 19/25] list: introduce list_del_poison() Dan Williams
2015-12-08  1:34 ` [PATCH -mm 20/25] libnvdimm, pmem: move request_queue allocation earlier in probe Dan Williams
2015-12-08  1:34 ` [PATCH -mm 21/25] mm, dax, pmem: introduce {get|put}_dev_pagemap() for dax-gup Dan Williams
2015-12-08  1:34 ` [PATCH -mm 22/25] mm, dax: dax-pmd vs thp-pmd vs hugetlbfs-pmd Dan Williams
2015-12-08  1:34 ` [PATCH -mm 23/25] mm, x86: get_user_pages() for dax mappings Dan Williams
2015-12-08  1:34 ` [PATCH -mm 24/25] dax: provide diagnostics for pmd mapping failures Dan Williams
2015-12-08  1:34 ` [PATCH -mm 25/25] dax: re-enable dax pmd mappings Dan Williams
2015-12-08 18:42 ` [PATCH -mm 00/25] get_user_pages() for dax pte and " Logan Gunthorpe
2015-12-08 18:50   ` Dan Williams

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=20151208013308.25030.16548.stgit@dwillia2-desk3.jf.intel.com \
    --to=dan.j.williams@intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-mm@kvack.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=ross.zwisler@linux.intel.com \
    --cc=toshi.kani@hpe.com \
    --cc=willy@linux.intel.com \
    /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.