Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756754AbcDGQbP (ORCPT ); Thu, 7 Apr 2016 12:31:15 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:34650 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755954AbcDGQbM (ORCPT ); Thu, 7 Apr 2016 12:31:12 -0400 Date: Thu, 7 Apr 2016 18:31:09 +0200 From: Michal Hocko To: Piotr Kwapulinski Cc: Vlastimil Babka , akpm@linux-foundation.org, mtk.manpages@gmail.com, cmetcalf@mellanox.com, arnd@arndb.de, viro@zeniv.linux.org.uk, mszeredi@suse.cz, dave@stgolabs.net, kirill.shutemov@linux.intel.com, mingo@kernel.org, dan.j.williams@intel.com, dave.hansen@linux.intel.com, koct9i@gmail.com, hannes@cmpxchg.org, jack@suse.cz, xiexiuqi@huawei.com, iamjoonsoo.kim@lge.com, oleg@redhat.com, gang.chen.5i5j@gmail.com, aarcange@redhat.com, aryabinin@virtuozzo.com, rientjes@google.com, denc716@gmail.com, toshi.kani@hpe.com, ldufour@linux.vnet.ibm.com, kuleshovmail@gmail.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org Subject: Re: [PATCH 0/3] mm/mmap.c: don't unmap the overlapping VMA(s) Message-ID: <20160407163108.GF32755@dhcp22.suse.cz> References: <1459624654-7955-1-git-send-email-kwapulinski.piotr@gmail.com> <20160404073100.GA10272@dhcp22.suse.cz> <570287B3.6050903@suse.cz> <20160407161128.GA2713@home.local> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160407161128.GA2713@home.local> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2114 Lines: 64 On Thu 07-04-16 18:11:29, Piotr Kwapulinski wrote: > On Mon, Apr 04, 2016 at 05:26:43PM +0200, Vlastimil Babka wrote: > > On 04/04/2016 09:31 AM, Michal Hocko wrote: > > >On Sat 02-04-16 21:17:31, Piotr Kwapulinski wrote: > > >>Currently the mmap(MAP_FIXED) discards the overlapping part of the > > >>existing VMA(s). > > >>Introduce the new MAP_DONTUNMAP flag which forces the mmap to fail > > >>with ENOMEM whenever the overlapping occurs and MAP_FIXED is set. > > >>No existing mapping(s) is discarded. > > > > > >You forgot to tell us what is the use case for this new flag. > > > > Exactly. Also, returning ENOMEM is strange, EINVAL might be a better match, > > otherwise how would you distinguish a "geunine" ENOMEM from passing a wrong > > address? > > > > > > Thanks to all for suggestions. I'll fix them. > > The example use case: > #include > #include > #include > > void main(void) > { > void* addr = (void*)0x1000000; > size_t size = 0x600000; > void* start = 0; > start = mmap(addr, > size, > PROT_WRITE, > MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, > -1, 0); > > strcpy(start, "PPPP"); > printf("%s\n", start); // == PPPP > > addr = (void*)0x1000000; > size = 0x9000; > start = mmap(addr, > size, > PROT_READ | PROT_WRITE, > MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, > -1, 0); > > printf("%s\n", start); // != PPPP > } > > Another use case, this time with huge pages in action. > The limit configured in proc's nr_hugepages is exceeded. > mmap unmaps the area and fails. No new mapping is created. > The program segfaults. Yes and this is the standard behavior for ages. So _why_ somebody wants non-default behavior. When I've asked for the use case I meant a real life code (not just an example snippet) which cannot cope with the standard semantic. In other words why this cannot be handled in the userspace and we have to add a new API which we have to maintain for ever? -- Michal Hocko SUSE Labs