*/
static DEFINE_SPINLOCK(cgroup_idr_lock);
-/*
- * Protects cgroup_file->kn for !self csses. It synchronizes notifications
- * against file removal/re-creation across css hiding.
- */
-static DEFINE_SPINLOCK(cgroup_file_kn_lock);
-
DEFINE_PERCPU_RWSEM(cgroup_threadgroup_rwsem);
#define cgroup_assert_mutex_or_rcu_locked() \
struct cgroup_subsys_state *css = cgroup_css(cgrp, cft->ss);
struct cgroup_file *cfile = (void *)css + cft->file_offset;
- spin_lock_irq(&cgroup_file_kn_lock);
+ spin_lock_irq(&cfile->lock);
WRITE_ONCE(cfile->kn, NULL);
- spin_unlock_irq(&cgroup_file_kn_lock);
+ spin_unlock_irq(&cfile->lock);
timer_delete_sync(&cfile->notify_timer);
}
struct cgroup_file *cfile = (void *)css + cft->file_offset;
timer_setup(&cfile->notify_timer, cgroup_file_notify_timer, 0);
-
- spin_lock_irq(&cgroup_file_kn_lock);
- WRITE_ONCE(cfile->kn, kn);
- spin_unlock_irq(&cgroup_file_kn_lock);
+ spin_lock_init(&cfile->lock);
+ cfile->kn = kn;
}
return 0;
return;
}
- spin_lock_irqsave(&cgroup_file_kn_lock, flags);
+ spin_lock_irqsave(&cfile->lock, flags);
if (cfile->kn) {
kn = cfile->kn;
kernfs_get(kn);
WRITE_ONCE(cfile->notified_at, jiffies);
}
- spin_unlock_irqrestore(&cgroup_file_kn_lock, flags);
+ spin_unlock_irqrestore(&cfile->lock, flags);
if (kn) {
kernfs_notify(kn);
{
struct kernfs_node *kn;
- spin_lock_irq(&cgroup_file_kn_lock);
+ spin_lock_irq(&cfile->lock);
kn = cfile->kn;
kernfs_get(kn);
- spin_unlock_irq(&cgroup_file_kn_lock);
+ spin_unlock_irq(&cfile->lock);
if (kn)
kernfs_show(kn, show);