cgroup: fix mount failure in a corner case
commit 970317aa upstream. # cat test.sh #! /bin/bash mount -t cgroup -o cpu xxx /cgroup umount /cgroup mount -t cgroup -o cpu,cpuacct xxx /cgroup umount /cgroup # ./test.sh mount: xxx already mounted or /cgroup busy mount: according to mtab, xxx is already mounted on /cgroup It's because the cgroupfs_root of the first mount was under destruction asynchronously. Fix this by delaying and then retrying mount for this case. v3: - put the refcnt immediately after getting it. (Tejun) v2: - use percpu_ref_tryget_live() rather that introducing percpu_ref_alive(). (Tejun) - adjust comment. tj: Updated the comment a bit. Signed-off-by:Li Zefan <lizefan@huawei.com> Signed-off-by:
Tejun Heo <tj@kernel.org> [lizf: Backported to 3.15: - s/percpu_ref_tryget_live/atomic_inc_not_zero/ - Use goto instead of calling restart_syscall() - Add cgroup_tree_mutex] Signed-off-by:
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Showing
Please register or sign in to comment