Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758692AbcDHPcn (ORCPT ); Fri, 8 Apr 2016 11:32:43 -0400 Received: from mail-lb0-f195.google.com ([209.85.217.195]:34517 "EHLO mail-lb0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758645AbcDHPck (ORCPT ); Fri, 8 Apr 2016 11:32:40 -0400 Date: Fri, 8 Apr 2016 17:32:29 +0200 From: Piotr Kwapulinski To: Michal Hocko 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: <20160408153228.GA1397@home.local> References: <1459624654-7955-1-git-send-email-kwapulinski.piotr@gmail.com> <20160404073100.GA10272@dhcp22.suse.cz> <570287B3.6050903@suse.cz> <20160407161128.GA2713@home.local> <20160407163108.GF32755@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160407163108.GF32755@dhcp22.suse.cz> 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: 2307 Lines: 64 On Thu, Apr 07, 2016 at 06:31:09PM +0200, Michal Hocko wrote: > 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? Ok, I got it. Thanks for feedback.