/* * cgroup_rename - Only allow simple rename of directories in place. */ static int cgroup1_rename(struct kernfs_node *kn, struct kernfs_node *new_parent, const char *new_name_str) { struct cgroup *cgrp = kn->priv; int ret; if (kernfs_type(kn) != KERNFS_DIR) return -ENOTDIR; if (kn->parent != new_parent) return -EIO; /* * We're gonna grab cgroup_mutex which nests outside kernfs * active_ref. kernfs_rename() doesn't require active_ref * protection. Break them before grabbing cgroup_mutex. */ kernfs_break_active_protection(new_parent); kernfs_break_active_protection(kn); mutex_lock(&cgroup_mutex); ret = kernfs_rename(kn, new_parent, new_name_str); if (!ret) TRACE_CGROUP_PATH(rename, cgrp); mutex_unlock(&cgroup_mutex); kernfs_unbreak_active_protection(kn); kernfs_unbreak_active_protection(new_parent); return ret; }
static int dslab_rename(struct kernfs_node *kn, struct kernfs_node *new_parent, const char *new_name_str) { int ret = 0; if (kernfs_type(kn) != KERNFS_DIR) return -ENOTDIR; if (kn->parent != new_parent) return -EIO; kernfs_break_active_protection(new_parent); kernfs_break_active_protection(kn); ret = kernfs_rename(kn, new_parent, new_name_str); kernfs_unbreak_active_protection(kn); kernfs_unbreak_active_protection(new_parent); return ret; }