Hi,
在 2023/01/13 9:15, Tejun Heo 写道:
Hello,
On Fri, Jan 13, 2023 at 09:10:25AM +0800, Yu Kuai wrote:
only activate the policy when the controller is actually enabled. So, idk.
What's wrong with synchronizing the two removal paths? blkcg policies are
combinations of cgroups and block device configurations, so having exit
paths from both sides is kinda natural.
I still can't figure out how to synchronizing them will a mutex. Maybe
I'm being foolish...
Hmm... can't you just use e.g. per-bdev mutex which is grabbed by both
blkg_free_workfn() and blkcg_deactivate_policy()?
I think hold the lock in blkg_free_workfn() is too late, pd_free_fn()
for parent from blkcg_deactivate_policy() can be called first.
t1: remove cgroup t1/t2
blkcg_destroy_blkgs
blkg_destroy
percpu_ref_kill(&blkg->refcnt)
blkg_release
blkg_free
schedule_work(&blkg->free_work)
// t1 is done
t2: handle t1 from removing device
blkcg_deactivate_policy
pd_free_fn
// free parent
t3: from t1
blkg_free_workfn
pd_free_fn
// free child
Thanks,
Kuai