From: Mike Kravetz <mike.kravetz@oracle.com>
To: Miaohe Lin <linmiaohe@huawei.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Muchun Song <songmuchun@bytedance.com>,
Michal Hocko <mhocko@suse.com>, Peter Xu <peterx@redhat.com>,
Naoya Horiguchi <naoya.horiguchi@linux.dev>,
David Hildenbrand <david@redhat.com>,
"Aneesh Kumar K . V" <aneesh.kumar@linux.vnet.ibm.com>,
Andrea Arcangeli <aarcange@redhat.com>,
"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
Davidlohr Bueso <dave@stgolabs.net>,
Prakash Sangappa <prakash.sangappa@oracle.com>,
James Houghton <jthoughton@google.com>,
Mina Almasry <almasrymina@google.com>,
Pasha Tatashin <pasha.tatashin@soleen.com>,
Axel Rasmussen <axelrasmussen@google.com>,
Ray Fucillo <Ray.Fucillo@intersystems.com>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [RFC PATCH v4 7/8] hugetlb: create hugetlb_unmap_file_folio to unmap single file folio
Date: Fri, 29 Jul 2022 11:11:30 -0700 [thread overview]
Message-ID: <YuQi0obsC7x5krRs@monkey> (raw)
In-Reply-To: <3557d5a9-231c-4007-3e7e-5a7bf34ecaa8@huawei.com>
On 07/29/22 10:02, Miaohe Lin wrote:
> On 2022/7/7 4:23, Mike Kravetz wrote:
> > Create the new routine hugetlb_unmap_file_folio that will unmap a single
> > file folio. This is refactored code from hugetlb_vmdelete_list. It is
> > modified to do locking within the routine itself and check whether the
> > page is mapped within a specific vma before unmapping.
> >
> > This refactoring will be put to use and expanded upon in a subsequent
> > patch adding vma specific locking.
> >
> > Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
> > ---
> > fs/hugetlbfs/inode.c | 124 +++++++++++++++++++++++++++++++++----------
> > 1 file changed, 95 insertions(+), 29 deletions(-)
> >
> > diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
> > index 31bd4325fce5..0eac0ea2a245 100644
> > --- a/fs/hugetlbfs/inode.c
> > +++ b/fs/hugetlbfs/inode.c
> > @@ -396,6 +396,94 @@ static int hugetlbfs_write_end(struct file *file, struct address_space *mapping,
> > return -EINVAL;
> > }
> >
> > +/*
> > + * Called with i_mmap_rwsem held for inode based vma maps. This makes
> > + * sure vma (and vm_mm) will not go away. We also hold the hugetlb fault
> > + * mutex for the page in the mapping. So, we can not race with page being
> > + * faulted into the vma.
> > + */
> > +static bool hugetlb_vma_maps_page(struct vm_area_struct *vma,
> > + unsigned long addr, struct page *page)
> > +{
> > + pte_t *ptep, pte;
> > +
> > + ptep = huge_pte_offset(vma->vm_mm, addr,
> > + huge_page_size(hstate_vma(vma)));
> > +
> > + if (!ptep)
> > + return false;
> > +
> > + pte = huge_ptep_get(ptep);
> > + if (huge_pte_none(pte) || !pte_present(pte))
> > + return false;
> > +
> > + if (pte_page(pte) == page)
> > + return true;
> > +
> > + return false; /* WTH??? */
>
> I'm sorry but what does WTH means? IIUC, this could happen if pte_page is a COW-ed private page?
> vma_interval_tree_foreach doesn't exclude the private mapping even after cow?
My apologies, I left that comment in during development and should have removed
it. WTH is an acronym for 'What the Heck?". I added it because I did not
think we should ever get to this return statement.
I am not sure if your COW of a private page would get us to this return
statement. In any case, if we get there we need to return false.
Thank you for your analysis and comments!
--
Mike Kravetz
next prev parent reply other threads:[~2022-07-29 18:11 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-06 20:23 [RFC PATCH v4 0/8] hugetlb: Change huge pmd sharing synchronization again Mike Kravetz
2022-07-06 20:23 ` [RFC PATCH v4 1/8] hugetlbfs: revert use i_mmap_rwsem to address page fault/truncate race Mike Kravetz
2022-07-06 20:23 ` [RFC PATCH v4 2/8] hugetlbfs: revert use i_mmap_rwsem for more pmd sharing synchronization Mike Kravetz
2022-07-06 20:23 ` [RFC PATCH v4 3/8] hugetlbfs: move routine remove_huge_page to hugetlb.c Mike Kravetz
2022-08-05 16:11 ` David Hildenbrand
2022-07-06 20:23 ` [RFC PATCH v4 4/8] hugetlbfs: catch and handle truncate racing with page faults Mike Kravetz
2022-07-27 9:20 ` Miaohe Lin
2022-07-27 19:00 ` Mike Kravetz
2022-07-28 2:02 ` Miaohe Lin
2022-07-28 16:45 ` Mike Kravetz
2022-08-05 16:28 ` David Hildenbrand
2022-08-05 22:41 ` Mike Kravetz
2022-07-06 20:23 ` [RFC PATCH v4 5/8] hugetlb: rename vma_shareable() and refactor code Mike Kravetz
2022-07-06 20:23 ` [RFC PATCH v4 6/8] hugetlb: add vma based lock for pmd sharing synchronization Mike Kravetz
2022-07-29 2:55 ` Miaohe Lin
2022-07-29 18:00 ` Mike Kravetz
2022-07-30 2:12 ` Miaohe Lin
2022-07-06 20:23 ` [RFC PATCH v4 7/8] hugetlb: create hugetlb_unmap_file_folio to unmap single file folio Mike Kravetz
2022-07-29 2:02 ` Miaohe Lin
2022-07-29 18:11 ` Mike Kravetz [this message]
2022-07-30 2:15 ` Miaohe Lin
2022-07-06 20:23 ` [RFC PATCH v4 8/8] hugetlb: use new vma_lock for pmd sharing synchronization Mike Kravetz
2022-07-28 6:51 ` Miaohe Lin
2022-07-28 17:47 ` Mike Kravetz
2022-07-29 1:41 ` Miaohe Lin
2022-07-29 17:41 ` Mike Kravetz
2022-07-30 1:57 ` Miaohe Lin
2022-07-20 14:16 ` [RFC PATCH v4 0/8] hugetlb: Change huge pmd sharing synchronization again Ray Fucillo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YuQi0obsC7x5krRs@monkey \
--to=mike.kravetz@oracle.com \
--cc=Ray.Fucillo@intersystems.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=almasrymina@google.com \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=axelrasmussen@google.com \
--cc=dave@stgolabs.net \
--cc=david@redhat.com \
--cc=jthoughton@google.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linmiaohe@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=naoya.horiguchi@linux.dev \
--cc=pasha.tatashin@soleen.com \
--cc=peterx@redhat.com \
--cc=prakash.sangappa@oracle.com \
--cc=songmuchun@bytedance.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.