Thread (56 messages) 56 messages, 4 authors, 2021-01-09

Re: [External] Re: [PATCH v2 4/6] mm: hugetlb: add return -EAGAIN for dissolve_free_huge_page

From: Michal Hocko <mhocko@suse.com>
Date: 2021-01-07 08:40:07
Also in: lkml

On Thu 07-01-21 11:11:41, Muchun Song wrote:
On Thu, Jan 7, 2021 at 1:07 AM Michal Hocko [off-list ref] wrote:
quoted
On Wed 06-01-21 16:47:37, Muchun Song wrote:
quoted
When dissolve_free_huge_page() races with __free_huge_page(), we can
do a retry. Because the race window is small.
Is this a bug fix or mere optimization. I have hard time to tell from
the description.
It is optimization. Thanks.
quoted
quoted
Signed-off-by: Muchun Song <redacted>
---
 mm/hugetlb.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
[...]
quoted
@@ -1825,6 +1828,14 @@ int dissolve_free_huge_page(struct page *page)
      }
 out:
      spin_unlock(&hugetlb_lock);
+
+     /*
+      * If the freeing of the HugeTLB page is put on a work queue, we should
+      * flush the work before retrying.
+      */
+     if (unlikely(rc == -EAGAIN))
+             flush_work(&free_hpage_work);
Is it safe to wait for the work to finish from this context?
Yes. It is safe.
Please expand on why in the changelog. Same for the optimization
including some numbers showing it really helps.

-- 
Michal Hocko
SUSE Labs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help