Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752677AbcDUUWD (ORCPT ); Thu, 21 Apr 2016 16:22:03 -0400 Received: from userp1040.oracle.com ([156.151.31.81]:47421 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752294AbcDUUWA (ORCPT ); Thu, 21 Apr 2016 16:22:00 -0400 Subject: Re: [PATCH v3 0/2] Align mmap address for DAX pmd mappings To: Matthew Wilcox , Toshi Kani References: <1460652511-19636-1-git-send-email-toshi.kani@hpe.com> <20160415220531.c7b55adb5b26eb749fae3186@linux-foundation.org> <20160418202610.GA17889@quack2.suse.cz> <20160419182347.GA29068@linux.intel.com> <571844A1.5080703@hpe.com> <20160421070625.GB29068@linux.intel.com> Cc: Jan Kara , linux-nvdimm@ml01.01.org, david@fromorbit.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, adilger.kernel@dilger.ca, viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org, tytso@mit.edu, Andrew Morton , kirill.shutemov@linux.intel.com From: Mike Kravetz Message-ID: <57193658.9020803@oracle.com> Date: Thu, 21 Apr 2016 13:21:44 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.1 MIME-Version: 1.0 In-Reply-To: <20160421070625.GB29068@linux.intel.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Source-IP: aserv0021.oracle.com [141.146.126.233] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2127 Lines: 56 On 04/21/2016 12:06 AM, Matthew Wilcox wrote: > On Wed, Apr 20, 2016 at 11:10:25PM -0400, Toshi Kani wrote: >> How about moving the function (as is) to mm/huge_memory.c, rename it to >> get_hugepage_unmapped_area(), which is defined to NULL in huge_mm.h >> when TRANSPARENT_HUGEPAGE is unset? > > Great idea. Perhaps it should look something like this? > > unsigned long thp_get_unmapped_area(struct file *filp, unsigned long addr, > unsigned long len, unsigned long pgoff, unsigned long flags) > { Might want to keep the future possibility of PUD_SIZE THP in mind? -- Mike Kravetz > loff_t off, off_end, off_pmd; > unsigned long len_pmd, addr_pmd; > > if (addr) > goto out; > if (IS_DAX(filp->f_mapping->host) && !IS_ENABLED(CONFIG_FS_DAX_PMD)) > goto out; > /* Kirill, please fill in the right condition here for THP pagecache */ > > off = (loff_t)pgoff << PAGE_SHIFT; > off_end = off + len; > off_pmd = round_up(off, PMD_SIZE); /* pmd-aligned start offset */ > > if ((off_end <= off_pmd) || ((off_end - off_pmd) < PMD_SIZE)) > goto out; > > len_pmd = len + PMD_SIZE; > if ((off + len_pmd) < off) > goto out; > > addr_pmd = current->mm->get_unmapped_area(filp, NULL, len_pmd, > pgoff, flags); > if (!IS_ERR_VALUE(addr_pmd)) { > addr_pmd += (off - addr_pmd) & (PMD_SIZE - 1); > return addr_pmd; > } > out: > return current->mm->get_unmapped_area(filp, addr, len, pgoff, flags); > } > > - I deleted the check for filp == NULL. It can't be NULL ... this is a > file_operation ;-) > - Why is len_pmd len + PMD_SIZE instead of round_up(len, PMD_SIZE)? > - I'm still in two minds about passing 'addr' to the first call to > get_unmapped_area() instead of NULL. > _______________________________________________ > Linux-nvdimm mailing list > Linux-nvdimm@lists.01.org > https://lists.01.org/mailman/listinfo/linux-nvdimm >