From: Ross Zwisler <ross.zwisler@linux.intel.com>
To: Jan Kara <jack@suse.cz>
Cc: linux-fsdevel@vger.kernel.org, linux-nvdimm@lists.01.org,
Andy Lutomirski <luto@kernel.org>,
linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org,
Christoph Hellwig <hch@infradead.org>,
Ross Zwisler <ross.zwisler@linux.intel.com>,
Dan Williams <dan.j.williams@intel.com>,
Boaz Harrosh <boazh@netapp.com>
Subject: Re: [PATCH 10/13] mm: Wire up MAP_SYNC
Date: Mon, 21 Aug 2017 15:37:04 -0600 [thread overview]
Message-ID: <20170821213704.GG26220@linux.intel.com> (raw)
In-Reply-To: <20170817160815.30466-11-jack@suse.cz>
On Thu, Aug 17, 2017 at 06:08:12PM +0200, Jan Kara wrote:
> Pretty crude for now...
>
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---
> fs/ext4/file.c | 2 ++
> include/linux/mm.h | 1 +
> include/linux/mman.h | 3 ++-
> include/uapi/asm-generic/mman.h | 1 +
> mm/mmap.c | 5 +++++
> 5 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/fs/ext4/file.c b/fs/ext4/file.c
> index f84bb29e941e..850037e140d7 100644
> --- a/fs/ext4/file.c
> +++ b/fs/ext4/file.c
> @@ -340,6 +340,8 @@ static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma)
> vma->vm_flags |= VM_MIXEDMAP | VM_HUGEPAGE;
> } else {
> vma->vm_ops = &ext4_file_vm_ops;
> + if (vma->vm_flags & VM_SYNC)
> + return -EOPNOTSUPP;
> }
> return 0;
> }
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index fa036093e76c..d0fb385414a4 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -188,6 +188,7 @@ extern unsigned int kobjsize(const void *objp);
> #define VM_ACCOUNT 0x00100000 /* Is a VM accounted object */
> #define VM_NORESERVE 0x00200000 /* should the VM suppress accounting */
> #define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */
> +#define VM_SYNC 0x00800000 /* Synchronous page faults */
> #define VM_ARCH_1 0x01000000 /* Architecture-specific flag */
> #define VM_ARCH_2 0x02000000
> #define VM_DONTDUMP 0x04000000 /* Do not include in the core dump */
> diff --git a/include/linux/mman.h b/include/linux/mman.h
> index c8367041fafd..c38279b651e5 100644
> --- a/include/linux/mman.h
> +++ b/include/linux/mman.h
> @@ -86,7 +86,8 @@ calc_vm_flag_bits(unsigned long flags)
> {
> return _calc_vm_trans(flags, MAP_GROWSDOWN, VM_GROWSDOWN ) |
> _calc_vm_trans(flags, MAP_DENYWRITE, VM_DENYWRITE ) |
> - _calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED );
> + _calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED ) |
> + _calc_vm_trans(flags, MAP_SYNC, VM_SYNC );
> }
>
> unsigned long vm_commit_limit(void);
> diff --git a/include/uapi/asm-generic/mman.h b/include/uapi/asm-generic/mman.h
> index 7162cd4cca73..00e55627d2df 100644
> --- a/include/uapi/asm-generic/mman.h
> +++ b/include/uapi/asm-generic/mman.h
> @@ -12,6 +12,7 @@
> #define MAP_NONBLOCK 0x10000 /* do not block on IO */
> #define MAP_STACK 0x20000 /* give out an address that is best suited for process/thread stacks */
> #define MAP_HUGETLB 0x40000 /* create a huge page mapping */
> +#define MAP_SYNC 0x80000 /* perform synchronous page faults for the mapping */
>
> /* Bits [26:31] are reserved, see mman-common.h for MAP_HUGETLB usage */
>
> diff --git a/mm/mmap.c b/mm/mmap.c
> index f19efcf75418..18453c04b09f 100644
> --- a/mm/mmap.c
> +++ b/mm/mmap.c
> @@ -1423,12 +1423,17 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
> return -ENODEV;
> if (vm_flags & (VM_GROWSDOWN|VM_GROWSUP))
> return -EINVAL;
> + if (!(vm_flags & VM_SHARED) && (vm_flags & VM_SYNC))
> + return -EINVAL;
I know this will be reworked with Dan's new mmap() interface, but I was
curious what the !(vm_flags & VM_SHARED) check here was for. We're in a
MAP_PRIVATE case, so is it ever possible for VM_SHARED to be set in vm_flags?
I tried to make this happen with some various test scenarios, but wasn't able.
> break;
>
> default:
> return -EINVAL;
> }
> } else {
> + if (vm_flags & VM_SYNC)
> + return -EINVAL;
> +
> switch (flags & MAP_TYPE) {
> case MAP_SHARED:
> if (vm_flags & (VM_GROWSDOWN|VM_GROWSUP))
> --
> 2.12.3
>
WARNING: multiple messages have this Message-ID (diff)
From: Ross Zwisler <ross.zwisler@linux.intel.com>
To: Jan Kara <jack@suse.cz>
Cc: Christoph Hellwig <hch@infradead.org>,
Boaz Harrosh <boazh@netapp.com>,
linux-nvdimm@lists.01.org, linux-xfs@vger.kernel.org,
Andy Lutomirski <luto@kernel.org>,
linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org
Subject: Re: [PATCH 10/13] mm: Wire up MAP_SYNC
Date: Mon, 21 Aug 2017 15:37:04 -0600 [thread overview]
Message-ID: <20170821213704.GG26220@linux.intel.com> (raw)
In-Reply-To: <20170817160815.30466-11-jack@suse.cz>
On Thu, Aug 17, 2017 at 06:08:12PM +0200, Jan Kara wrote:
> Pretty crude for now...
>
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---
> fs/ext4/file.c | 2 ++
> include/linux/mm.h | 1 +
> include/linux/mman.h | 3 ++-
> include/uapi/asm-generic/mman.h | 1 +
> mm/mmap.c | 5 +++++
> 5 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/fs/ext4/file.c b/fs/ext4/file.c
> index f84bb29e941e..850037e140d7 100644
> --- a/fs/ext4/file.c
> +++ b/fs/ext4/file.c
> @@ -340,6 +340,8 @@ static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma)
> vma->vm_flags |= VM_MIXEDMAP | VM_HUGEPAGE;
> } else {
> vma->vm_ops = &ext4_file_vm_ops;
> + if (vma->vm_flags & VM_SYNC)
> + return -EOPNOTSUPP;
> }
> return 0;
> }
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index fa036093e76c..d0fb385414a4 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -188,6 +188,7 @@ extern unsigned int kobjsize(const void *objp);
> #define VM_ACCOUNT 0x00100000 /* Is a VM accounted object */
> #define VM_NORESERVE 0x00200000 /* should the VM suppress accounting */
> #define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */
> +#define VM_SYNC 0x00800000 /* Synchronous page faults */
> #define VM_ARCH_1 0x01000000 /* Architecture-specific flag */
> #define VM_ARCH_2 0x02000000
> #define VM_DONTDUMP 0x04000000 /* Do not include in the core dump */
> diff --git a/include/linux/mman.h b/include/linux/mman.h
> index c8367041fafd..c38279b651e5 100644
> --- a/include/linux/mman.h
> +++ b/include/linux/mman.h
> @@ -86,7 +86,8 @@ calc_vm_flag_bits(unsigned long flags)
> {
> return _calc_vm_trans(flags, MAP_GROWSDOWN, VM_GROWSDOWN ) |
> _calc_vm_trans(flags, MAP_DENYWRITE, VM_DENYWRITE ) |
> - _calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED );
> + _calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED ) |
> + _calc_vm_trans(flags, MAP_SYNC, VM_SYNC );
> }
>
> unsigned long vm_commit_limit(void);
> diff --git a/include/uapi/asm-generic/mman.h b/include/uapi/asm-generic/mman.h
> index 7162cd4cca73..00e55627d2df 100644
> --- a/include/uapi/asm-generic/mman.h
> +++ b/include/uapi/asm-generic/mman.h
> @@ -12,6 +12,7 @@
> #define MAP_NONBLOCK 0x10000 /* do not block on IO */
> #define MAP_STACK 0x20000 /* give out an address that is best suited for process/thread stacks */
> #define MAP_HUGETLB 0x40000 /* create a huge page mapping */
> +#define MAP_SYNC 0x80000 /* perform synchronous page faults for the mapping */
>
> /* Bits [26:31] are reserved, see mman-common.h for MAP_HUGETLB usage */
>
> diff --git a/mm/mmap.c b/mm/mmap.c
> index f19efcf75418..18453c04b09f 100644
> --- a/mm/mmap.c
> +++ b/mm/mmap.c
> @@ -1423,12 +1423,17 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
> return -ENODEV;
> if (vm_flags & (VM_GROWSDOWN|VM_GROWSUP))
> return -EINVAL;
> + if (!(vm_flags & VM_SHARED) && (vm_flags & VM_SYNC))
> + return -EINVAL;
I know this will be reworked with Dan's new mmap() interface, but I was
curious what the !(vm_flags & VM_SHARED) check here was for. We're in a
MAP_PRIVATE case, so is it ever possible for VM_SHARED to be set in vm_flags?
I tried to make this happen with some various test scenarios, but wasn't able.
> break;
>
> default:
> return -EINVAL;
> }
> } else {
> + if (vm_flags & VM_SYNC)
> + return -EINVAL;
> +
> switch (flags & MAP_TYPE) {
> case MAP_SHARED:
> if (vm_flags & (VM_GROWSDOWN|VM_GROWSUP))
> --
> 2.12.3
>
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm
next prev parent reply other threads:[~2017-08-21 21:37 UTC|newest]
Thread overview: 142+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-17 16:08 [RFC PATCH 0/13 v2] dax, ext4: Synchronous page faults Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
[not found] ` <20170817160815.30466-1-jack-AlSwsSmVLrQ@public.gmane.org>
2017-08-17 16:08 ` [PATCH 01/13] mm: Remove VM_FAULT_HWPOISON_LARGE_MASK Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` [PATCH 02/13] dax: Simplify arguments of dax_insert_mapping() Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` [PATCH 03/13] dax: Factor out getting of pfn out of iomap Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-18 22:06 ` Ross Zwisler
2017-08-18 22:06 ` Ross Zwisler
2017-08-23 18:30 ` Christoph Hellwig
2017-08-23 18:30 ` Christoph Hellwig
2017-08-17 16:08 ` [PATCH 04/13] dax: Create local variable for VMA in dax_iomap_pte_fault() Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-18 22:08 ` Ross Zwisler
2017-08-18 22:08 ` Ross Zwisler
2017-08-23 18:30 ` Christoph Hellwig
2017-08-23 18:30 ` Christoph Hellwig
2017-08-17 16:08 ` [PATCH 05/13] dax: Create local variable for vmf->flags & FAULT_FLAG_WRITE test Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
[not found] ` <20170817160815.30466-6-jack-AlSwsSmVLrQ@public.gmane.org>
2017-08-18 22:08 ` Ross Zwisler
2017-08-18 22:08 ` Ross Zwisler
2017-08-18 22:08 ` Ross Zwisler
2017-08-23 18:31 ` Christoph Hellwig
2017-08-23 18:31 ` Christoph Hellwig
2017-08-23 18:31 ` Christoph Hellwig
2017-08-17 16:08 ` [PATCH 06/13] dax: Inline dax_insert_mapping() into the callsite Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
[not found] ` <20170817160815.30466-7-jack-AlSwsSmVLrQ@public.gmane.org>
2017-08-18 22:10 ` Ross Zwisler
2017-08-18 22:10 ` Ross Zwisler
2017-08-18 22:10 ` Ross Zwisler
2017-08-23 18:31 ` Christoph Hellwig
2017-08-23 18:31 ` Christoph Hellwig
2017-08-23 18:31 ` Christoph Hellwig
2017-08-17 16:08 ` [PATCH 07/13] dax: Inline dax_pmd_insert_mapping() " Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
[not found] ` <20170817160815.30466-8-jack-AlSwsSmVLrQ@public.gmane.org>
2017-08-18 22:12 ` Ross Zwisler
2017-08-18 22:12 ` Ross Zwisler
2017-08-18 22:12 ` Ross Zwisler
2017-08-23 18:32 ` Christoph Hellwig
2017-08-23 18:32 ` Christoph Hellwig
2017-08-17 16:08 ` [PATCH 09/13] dax: Allow dax_iomap_fault() to return pfn Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-21 18:45 ` Ross Zwisler
2017-08-21 18:45 ` Ross Zwisler
[not found] ` <20170817160815.30466-10-jack-AlSwsSmVLrQ@public.gmane.org>
2017-08-23 18:34 ` Christoph Hellwig
2017-08-23 18:34 ` Christoph Hellwig
2017-08-23 18:34 ` Christoph Hellwig
2017-08-24 7:26 ` Jan Kara
2017-08-24 7:26 ` Jan Kara
2017-08-17 16:08 ` [PATCH 10/13] mm: Wire up MAP_SYNC Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-21 21:37 ` Ross Zwisler [this message]
2017-08-21 21:37 ` Ross Zwisler
2017-08-22 9:36 ` Jan Kara
2017-08-22 9:36 ` Jan Kara
[not found] ` <20170817160815.30466-11-jack-AlSwsSmVLrQ@public.gmane.org>
2017-08-21 21:57 ` Ross Zwisler
2017-08-21 21:57 ` Ross Zwisler
2017-08-21 21:57 ` Ross Zwisler
2017-08-22 9:34 ` Jan Kara
2017-08-22 9:34 ` Jan Kara
[not found] ` <20170821215703.GA24473-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-08-22 17:27 ` Dan Williams
2017-08-22 17:27 ` Dan Williams
2017-08-22 17:27 ` Dan Williams
2017-08-23 18:43 ` Christoph Hellwig
2017-08-23 18:43 ` Christoph Hellwig
2017-08-23 18:43 ` Christoph Hellwig
2017-08-24 7:16 ` Jan Kara
2017-08-24 7:16 ` Jan Kara
2017-08-17 16:08 ` [PATCH 11/13] dax, iomap: Add support for synchronous faults Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-21 18:58 ` Ross Zwisler
2017-08-21 18:58 ` Ross Zwisler
2017-08-22 9:46 ` Jan Kara
2017-08-22 9:46 ` Jan Kara
2017-08-21 21:09 ` Ross Zwisler
2017-08-21 21:09 ` Ross Zwisler
[not found] ` <20170821210916.GF26220-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-08-22 10:08 ` Jan Kara
2017-08-22 10:08 ` Jan Kara
2017-08-22 10:08 ` Jan Kara
2017-08-24 12:27 ` Christoph Hellwig
2017-08-24 12:27 ` Christoph Hellwig
2017-08-24 12:34 ` Jan Kara
2017-08-24 12:34 ` Jan Kara
2017-08-24 13:38 ` Christoph Hellwig
2017-08-24 13:38 ` Christoph Hellwig
2017-08-24 16:45 ` Jan Kara
2017-08-24 16:45 ` Jan Kara
2017-08-17 16:08 ` [PATCH 12/13] dax: Implement dax_insert_pfn_mkwrite() Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-21 19:01 ` Ross Zwisler
2017-08-21 19:01 ` Ross Zwisler
2017-08-17 16:08 ` [PATCH 08/13] dax: Fix comment describing dax_iomap_fault() Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-18 22:12 ` Ross Zwisler
2017-08-18 22:12 ` Ross Zwisler
2017-08-23 18:32 ` Christoph Hellwig
2017-08-23 18:32 ` Christoph Hellwig
2017-08-17 16:08 ` [PATCH 13/13] ext4: Support for synchronous DAX faults Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-17 16:08 ` Jan Kara
2017-08-21 19:19 ` Ross Zwisler
2017-08-21 19:19 ` Ross Zwisler
[not found] ` <20170821191948.GD26220-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-08-22 10:18 ` Jan Kara
2017-08-22 10:18 ` Jan Kara
2017-08-22 10:18 ` Jan Kara
2017-08-23 18:37 ` Christoph Hellwig
2017-08-23 18:37 ` Christoph Hellwig
2017-08-24 7:18 ` Jan Kara
2017-08-24 7:18 ` Jan Kara
2017-08-24 12:31 ` Christoph Hellwig
2017-08-24 12:31 ` Christoph Hellwig
[not found] ` <20170824123126.GA21282-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2017-08-24 12:34 ` Christoph Hellwig
2017-08-24 12:34 ` Christoph Hellwig
2017-08-24 12:34 ` Christoph Hellwig
2017-08-24 12:36 ` Jan Kara
2017-08-24 12:36 ` Jan Kara
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=20170821213704.GG26220@linux.intel.com \
--to=ross.zwisler@linux.intel.com \
--cc=boazh@netapp.com \
--cc=dan.j.williams@intel.com \
--cc=hch@infradead.org \
--cc=jack@suse.cz \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-nvdimm@lists.01.org \
--cc=linux-xfs@vger.kernel.org \
--cc=luto@kernel.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.