From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756318AbbJVBnB (ORCPT ); Wed, 21 Oct 2015 21:43:01 -0400 Received: from userp1040.oracle.com ([156.151.31.81]:46149 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756044AbbJVBm4 (ORCPT ); Wed, 21 Oct 2015 21:42:56 -0400 From: Mike Kravetz To: linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: Dave Hansen , Naoya Horiguchi , Hugh Dickins , Davidlohr Bueso , Andrew Morton , Mike Kravetz Subject: [PATCH] mm/hugetlb: i_mmap_lock_write before unmapping in remove_inode_hugepages Date: Wed, 21 Oct 2015 18:42:27 -0700 Message-Id: <1445478147-29782-1-git-send-email-mike.kravetz@oracle.com> X-Mailer: git-send-email 2.4.3 X-Source-IP: aserv0022.oracle.com [141.146.126.234] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Code was added to remove_inode_hugepages that will unmap a page if it is mapped. i_mmap_lock_write() must be taken during the call to hugetlb_vmdelete_list(). This is to prevent mappings(vmas) from being added or deleted while the list of vmas is being examined. Signed-off-by: Mike Kravetz --- fs/hugetlbfs/inode.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index f25b72f..0f3999d 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -428,9 +428,11 @@ static void remove_inode_hugepages(struct inode *inode, loff_t lstart, * until we finish removing the page. */ if (page_mapped(page)) { + i_mmap_lock_write(mapping); hugetlb_vmdelete_list(&mapping->i_mmap, next * pages_per_huge_page(h), (next + 1) * pages_per_huge_page(h)); + i_mmap_unlock_write(mapping); } lock_page(page); -- 2.4.3