Messages in this thread | | | Subject | Re: [PATCH v3 1/2] dax: add dax_get_unmapped_area for pmd mappings | From | Toshi Kani <> | Date | Mon, 18 Apr 2016 22:36:46 -0400 |
| |
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
| |