On 2014/6/25 5:01, Tejun Heo wrote: > Hello, Li. > > On Tue, Jun 24, 2014 at 09:22:00AM +0800, Li Zefan wrote: >>> Ah, right. Gees, I'm really hating the fact that we have ->mount but >>> not ->umount. However, can't we make it a bit simpler by just >>> introducing a mutex protecting looking up and refing up an existing >>> root and a sb going away? The only problem is that the refcnt being >>> killed isn't atomic w.r.t. new live ref coming up, right? Why not >>> just add a mutex around them so that they can't race? >> >> Well, kill_sb() is called with sb->s_umount held, while kernfs_mount() >> returned with sb->s_umount held, so adding a mutex will lead to ABBA >> deadlock. > > Hmmm? Why does that matter? The only region in cgroup_mount() which > needs to be put inside such mutex would be root lookup, no? > unfortunately that won't help. I think what you suggest is: cgroup_mount() { mutex_lock(); lookup_cgroup_root(); mutex_unlock(); kernfs_mount(); } cgroup_kill_sb() { mutex_lock(); percpu_ref_kill(); mutex_Unlock(); kernfs_kill_sb(); } See, we may still be destroying the superblock after we've succeeded in getting the refcnt of cgroup root. -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html