Message ID | 1466021202-61880-4-git-send-email-kirill.shutemov@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hello, On (06/15/16 23:06), Kirill A. Shutemov wrote: [..] > After creating revalidate vma function, locking inconsistency occured > due to directing the code path to wrong label. This patch directs > to correct label and fix the inconsistency. > > Related commit that caused inconsistency: > http://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/?id=da4360877094368f6dfe75bbe804b0f0a5d575b0 as far as I remember, Vlastimil had "one more thing" to ask http://marc.info/?l=linux-mm&m=146521832732210&w=2 or is it safe? -ss -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Jun 16, 2016 at 09:43:07AM +0900, Sergey Senozhatsky wrote: > Hello, > > On (06/15/16 23:06), Kirill A. Shutemov wrote: > [..] > > After creating revalidate vma function, locking inconsistency occured > > due to directing the code path to wrong label. This patch directs > > to correct label and fix the inconsistency. > > > > Related commit that caused inconsistency: > > http://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/?id=da4360877094368f6dfe75bbe804b0f0a5d575b0 > > > as far as I remember, Vlastimil had "one more thing" to ask > http://marc.info/?l=linux-mm&m=146521832732210&w=2 > > or is it safe? As I mentioned in cover letter, 05/37 address the issue. I didn't fold it in. It's up to Andrew.
diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 7bb30e853335..1777b806de96 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2487,13 +2487,18 @@ static void collapse_huge_page(struct mm_struct *mm, down_read(&mm->mmap_sem); result = hugepage_vma_revalidate(mm, address); - if (result) - goto out; + if (result) { + mem_cgroup_cancel_charge(new_page, memcg, true); + up_read(&mm->mmap_sem); + goto out_nolock; + } pmd = mm_find_pmd(mm, address); if (!pmd) { result = SCAN_PMD_NULL; - goto out; + mem_cgroup_cancel_charge(new_page, memcg, true); + up_read(&mm->mmap_sem); + goto out_nolock; } /* @@ -2502,8 +2507,9 @@ static void collapse_huge_page(struct mm_struct *mm, * label out. Continuing to collapse causes inconsistency. */ if (!__collapse_huge_page_swapin(mm, vma, address, pmd)) { + mem_cgroup_cancel_charge(new_page, memcg, true); up_read(&mm->mmap_sem); - goto out; + goto out_nolock; } up_read(&mm->mmap_sem);