On Fri, 19 Mar 2021 15:42:08 -0700 Mike Kravetz wrote: > + > + if (!can_sleep && free_page_may_sleep(h, page)) { > + /* > + * Send page freeing to workqueue > + * > + * Only call schedule_work() if hpage_freelist is previously > + * empty. Otherwise, schedule_work() had been called but the > + * workfn hasn't retrieved the list yet. > + */ > + if (llist_add((struct llist_node *)&page->mapping, > + &hpage_freelist)) > + schedule_work(&free_hpage_work); > + return; > + } Queue work on system_unbound_wq instead of system_wq because of blocking work.