On 12/17/21 03:30, David Hildenbrand wrote:
Let's return early for hugetlb, which really only relies on the compound
mapcount so far and does not support PageDoubleMap() yet. Use the chance
It is too early to say if hugetlb double mapping will use PageDoubleMap().
I do not think (hope) it will be necessary. So, I think you can drop mention
of it here.
to cleanup the file-THP case to make it easier to grasp. While at it, use
head_compound_mapcount().
This is a preparation for further changes.
Reviewed-by: Peter Xu peterx@redhat.com
Signed-off-by: David Hildenbrand david@redhat.com
Acked-by: Mike Kravetz mike.kravetz@oracle.com
--
Mike Kravetz
> ---
> mm/util.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/mm/util.c b/mm/util.c
> index 741ba32a43ac..3239e75c148d 100644
> --- a/mm/util.c
> +++ b/mm/util.c
> @@ -732,15 +732,18 @@ int __page_mapcount(struct page *page)
> {
> int ret;
>
> - ret = atomic_read(&page->_mapcount) + 1;
> + if (PageHuge(page))
> + return compound_mapcount(page);
> /*
> * For file THP page->_mapcount contains total number of mapping
> * of the page: no need to look into compound_mapcount.
> */
> - if (!PageAnon(page) && !PageHuge(page))
> - return ret;
> + if (!PageAnon(page))
> + return atomic_read(&page->_mapcount) + 1;
> +
> + ret = atomic_read(&page->_mapcount) + 1;
> page = compound_head(page);
> - ret += atomic_read(compound_mapcount_ptr(page)) + 1;
> + ret += head_compound_mapcount(page);
> if (PageDoubleMap(page))
> ret--;
> return ret;
>