1313 if (!cgroup_lock_live_group(cgrp))
1314 return -ENODEV;
1315 ret = attach_task_by_pid(cgrp, pid);
1316 cgroup_unlock();
1317 return ret;
1318}
1319
1320
1321enum cgroup_filetype {
1322 FILE_ROOT,
1323 FILE_DIR,
1324 FILE_TASKLIST,
1325 FILE_NOTIFY_ON_RELEASE,
1326 FILE_RELEASE_AGENT,
1327};
1328
1329
1330
1331
1332
1333
1334
1335
1336bool cgroup_lock_live_group(struct cgroup *cgrp)
1337{
1338 mutex_lock(&cgroup_mutex);
1339 if (cgroup_is_removed(cgrp)) {
1340 mutex_unlock(&cgroup_mutex);
1341 return false;
1342 }
1343 return true;
1344}
1345
1346static int cgroup_release_agent_write(struct cgroup *cgrp, struct cftype *cft,
1347 const char *buffer)
1348{
1349 BUILD_BUG_ON(sizeof(cgrp->root->release_agent_path) < PATH_MAX);
1350 if (!cgroup_lock_live_group(cgrp))
1351 return -ENODEV;
1352 strcpy(cgrp->root->release_agent_path, buffer);
1353 cgroup_unlock();