From patchwork Thu Aug 17 16:08:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kara X-Patchwork-Id: 9906643 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D43D46024A for ; Thu, 17 Aug 2017 16:09:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C693628A5B for ; Thu, 17 Aug 2017 16:09:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB6AB28B30; Thu, 17 Aug 2017 16:09:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 70F8628A5B for ; Thu, 17 Aug 2017 16:09:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753230AbdHQQJL (ORCPT ); Thu, 17 Aug 2017 12:09:11 -0400 Received: from mx2.suse.de ([195.135.220.15]:53166 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752536AbdHQQIa (ORCPT ); Thu, 17 Aug 2017 12:08:30 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id D77D9AE90; Thu, 17 Aug 2017 16:08:27 +0000 (UTC) Received: by quack2.suse.cz (Postfix, from userid 1000) id 837731E3470; Thu, 17 Aug 2017 18:08:24 +0200 (CEST) From: Jan Kara To: Cc: linux-nvdimm@lists.01.org, Andy Lutomirski , , , Christoph Hellwig , Ross Zwisler , Dan Williams , Boaz Harrosh , Jan Kara Subject: [PATCH 10/13] mm: Wire up MAP_SYNC Date: Thu, 17 Aug 2017 18:08:12 +0200 Message-Id: <20170817160815.30466-11-jack@suse.cz> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20170817160815.30466-1-jack@suse.cz> References: <20170817160815.30466-1-jack@suse.cz> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Pretty crude for now... Signed-off-by: Jan Kara --- 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; 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))