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) { 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. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html