Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'slab-for-6.14-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab

Pull slab fix from Vlastimil Babka:

- Stable fix for kmem_cache_destroy() called from a WQ_MEM_RECLAIM
workqueue causing a warning due to the new kvfree_rcu_barrier()
(Uladzislau Rezki)

* tag 'slab-for-6.14-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab:
mm/slab/kvfree_rcu: Switch to WQ_MEM_RECLAIM wq

+10 -4
+10 -4
mm/slab_common.c
··· 1304 1304 static int rcu_delay_page_cache_fill_msec = 5000; 1305 1305 module_param(rcu_delay_page_cache_fill_msec, int, 0444); 1306 1306 1307 + static struct workqueue_struct *rcu_reclaim_wq; 1308 + 1307 1309 /* Maximum number of jiffies to wait before draining a batch. */ 1308 1310 #define KFREE_DRAIN_JIFFIES (5 * HZ) 1309 1311 #define KFREE_N_BATCHES 2 ··· 1634 1632 if (delayed_work_pending(&krcp->monitor_work)) { 1635 1633 delay_left = krcp->monitor_work.timer.expires - jiffies; 1636 1634 if (delay < delay_left) 1637 - mod_delayed_work(system_unbound_wq, &krcp->monitor_work, delay); 1635 + mod_delayed_work(rcu_reclaim_wq, &krcp->monitor_work, delay); 1638 1636 return; 1639 1637 } 1640 - queue_delayed_work(system_unbound_wq, &krcp->monitor_work, delay); 1638 + queue_delayed_work(rcu_reclaim_wq, &krcp->monitor_work, delay); 1641 1639 } 1642 1640 1643 1641 static void ··· 1735 1733 // "free channels", the batch can handle. Break 1736 1734 // the loop since it is done with this CPU thus 1737 1735 // queuing an RCU work is _always_ success here. 1738 - queued = queue_rcu_work(system_unbound_wq, &krwp->rcu_work); 1736 + queued = queue_rcu_work(rcu_reclaim_wq, &krwp->rcu_work); 1739 1737 WARN_ON_ONCE(!queued); 1740 1738 break; 1741 1739 } ··· 1885 1883 if (rcu_scheduler_active == RCU_SCHEDULER_RUNNING && 1886 1884 !atomic_xchg(&krcp->work_in_progress, 1)) { 1887 1885 if (atomic_read(&krcp->backoff_page_cache_fill)) { 1888 - queue_delayed_work(system_unbound_wq, 1886 + queue_delayed_work(rcu_reclaim_wq, 1889 1887 &krcp->page_cache_work, 1890 1888 msecs_to_jiffies(rcu_delay_page_cache_fill_msec)); 1891 1889 } else { ··· 2121 2119 int cpu; 2122 2120 int i, j; 2123 2121 struct shrinker *kfree_rcu_shrinker; 2122 + 2123 + rcu_reclaim_wq = alloc_workqueue("kvfree_rcu_reclaim", 2124 + WQ_UNBOUND | WQ_MEM_RECLAIM, 0); 2125 + WARN_ON(!rcu_reclaim_wq); 2124 2126 2125 2127 /* Clamp it to [0:100] seconds interval. */ 2126 2128 if (rcu_delay_page_cache_fill_msec < 0 ||