hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/mm/backing-dev.c
....@@ -378,6 +378,15 @@
378378 static DEFINE_SPINLOCK(cgwb_lock);
379379 static struct workqueue_struct *cgwb_release_wq;
380380
381
+static void cgwb_free_rcu(struct rcu_head *rcu_head)
382
+{
383
+ struct bdi_writeback *wb = container_of(rcu_head,
384
+ struct bdi_writeback, rcu);
385
+
386
+ percpu_ref_exit(&wb->refcnt);
387
+ kfree(wb);
388
+}
389
+
381390 static void cgwb_release_workfn(struct work_struct *work)
382391 {
383392 struct bdi_writeback *wb = container_of(work, struct bdi_writeback,
....@@ -395,9 +404,8 @@
395404 blkcg_unpin_online(blkcg);
396405
397406 fprop_local_destroy_percpu(&wb->memcg_completions);
398
- percpu_ref_exit(&wb->refcnt);
399407 wb_exit(wb);
400
- kfree_rcu(wb, rcu);
408
+ call_rcu(&wb->rcu, cgwb_free_rcu);
401409 }
402410
403411 static void cgwb_release(struct percpu_ref *refcnt)