FAILED: patch "[PATCH] mm: fail get_vaddr_frames() for filesystem-dax mappings" failed to apply to 4.9-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
b7f0554a56f21fb3e636a627450a9add030889beMon Sep 17 00:00:00 2001
From: Dan Williams <[email protected]>
Date: Wed, 29 Nov 2017 16:10:39 -0800
Subject: [PATCH] mm: fail get_vaddr_frames() for filesystem-dax mappings
Until there is a solution to the dma-to-dax vs truncate problem it is not safe to allow V4L2, Exynos, and other frame vector users to create long standing / irrevocable memory registrations against filesytem-dax vmas.
[[email protected]: add comment for vma_is_fsdax() check in get_vaddr_frames(), per Jan]
Link http://lkml.kernel.org/r/151197874035.26211.4061781453123083667.stgit@dwillia2-desk3.amr.corp.intel.com open here
Link http://lkml.kernel.org/r/151068939985.7446.15684639617389154187.stgit@dwillia2-desk3.amr.corp.intel.com open here
Fixes 3565fce3a659 ("mm, x86: get_user_pages() for dax mappings")
Signed-off-by Dan Williams <[email protected]>
Reviewed-by Jan Kara <[email protected]>
Cc Inki Dae <[email protected]>
Cc Seung-Woo Kim <[email protected]>
Cc Joonyoung Shim <[email protected]>
Cc Kyungmin Park <[email protected]>
Cc Mauro Carvalho Chehab <[email protected]>
Cc Mel Gorman <[email protected]>
Cc Vlastimil Babka <[email protected]>
Cc Christoph Hellwig <[email protected]>
Cc Doug Ledford <[email protected]>
Cc Hal Rosenstock <[email protected]>
Cc Jason Gunthorpe <[email protected]>
Cc Jeff Moyer <[email protected]>
Cc Ross Zwisler <[email protected]>
Cc Sean Hefty <[email protected]>
Cc <[email protected]>
Signed-off-by Andrew Morton <[email protected]>
Signed-off-by Linus Torvalds <[email protected]>
mm/frame_vector.c +12 -0
@@ -53,6 +53,18 @@ int get_vaddr_frames(unsigned long start, unsigned int nr_frames, ret = -EFAULT ; goto out; } + +/* +* While get_vaddr_frames() could be used for transient (kernel +* controlled lifetime) pinning of memory pages all current +* users establish long term (userspace controlled lifetime) +* page pinning. Treat get_vaddr_frames() like +* get_user_pages_longterm() and disallow it for filesystem-dax +* mappings. +*/ +if (vma_is_fsdax (vma)) +return -EOPNOTSUPP ; +if (!(vma->vm_flags & (VM_IO |VM_PFNMAP ))) { vec->got_ref = true; vec->is_pfns = false;