Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752377AbcDSCg6 (ORCPT ); Mon, 18 Apr 2016 22:36:58 -0400 Received: from g1t5425.austin.hp.com ([15.216.225.55]:41772 "EHLO g1t5425.austin.hp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751091AbcDSCg4 (ORCPT ); Mon, 18 Apr 2016 22:36:56 -0400 Subject: Re: [PATCH v3 1/2] dax: add dax_get_unmapped_area for pmd mappings To: Jan Kara References: <1460652511-19636-1-git-send-email-toshi.kani@hpe.com> <1460652511-19636-2-git-send-email-toshi.kani@hpe.com> <20160418204708.GB17889@quack2.suse.cz> Cc: "akpm@linux-foundation.org" , "dan.j.williams@intel.com" , "viro@zeniv.linux.org.uk" , "willy@linux.intel.com" , "ross.zwisler@linux.intel.com" , "kirill.shutemov@linux.intel.com" , "david@fromorbit.com" , "tytso@mit.edu" , "adilger.kernel@dilger.ca" , "linux-nvdimm@lists.01.org" , "linux-fsdevel@vger.kernel.org" , "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" From: Toshi Kani Message-ID: <571599BE.7090202@hpe.com> Date: Mon, 18 Apr 2016 22:36:46 -0400 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 MIME-Version: 1.0 In-Reply-To: <20160418204708.GB17889@quack2.suse.cz> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1873 Lines: 57 On 4/18/2016 4:47 PM, Jan Kara wrote: > On Thu 14-04-16 10:48:30, Toshi Kani wrote: >> + >> +/** >> + * dax_get_unmapped_area - handle get_unmapped_area for a DAX file >> + * @filp: The file being mmap'd, if not NULL >> + * @addr: The mmap address. If NULL, the kernel assigns the address >> + * @len: The mmap size in bytes >> + * @pgoff: The page offset in the file where the mapping starts from. >> + * @flags: The mmap flags >> + * >> + * This function can be called by a filesystem for get_unmapped_area(). >> + * When a target file is a DAX file, it aligns the mmap address at the >> + * beginning of the file by the pmd size. >> + */ >> +unsigned long dax_get_unmapped_area(struct file *filp, unsigned long addr, >> + unsigned long len, unsigned long pgoff, unsigned long flags) >> +{ >> + unsigned long off, off_end, off_pmd, len_pmd, addr_pmd; > I think we need to use 'loff_t' for the offsets for things to work on > 32-bits. Agreed. Will change to loff_t. >> + if (!IS_ENABLED(CONFIG_FS_DAX_PMD) || >> + !filp || addr || !IS_DAX(filp->f_mapping->host)) >> + goto out; >> + >> + off = pgoff << PAGE_SHIFT; > And here we need to type to loff_t before the shift... Right. >> + off_end = off + len; >> + off_pmd = round_up(off, PMD_SIZE); /* pmd-aligned offset */ >> + >> + if ((off_end <= off_pmd) || ((off_end - off_pmd) < PMD_SIZE)) > None of these parenthesis is actually needed (and IMHO they make the code > less readable, not more). OK. Will remove the parenthesis. >> + goto out; >> + >> + len_pmd = len + PMD_SIZE; >> + if ((off + len_pmd) < off) >> + goto out; >> + >> + addr_pmd = current->mm->get_unmapped_area(filp, addr, len_pmd, >> + pgoff, flags); >> + if (!IS_ERR_VALUE(addr_pmd)) { >> + addr_pmd += (off - addr_pmd) & (PMD_SIZE - 1); >> + return addr_pmd; > Otherwise the patch looks good to me. Great. Thanks Jan! -Toshi