)]}'
{
  "commit": "b744ddf47b06a8fbf058d065b45805db695b0658",
  "tree": "7755f7f8d376fb612d499714b91b3c8379b681b5",
  "parents": [
    "e85d9af87621263048612cc4334172819da8ef21"
  ],
  "author": {
    "name": "Tejun Heo",
    "email": "tj@kernel.org",
    "time": "Tue Oct 28 20:14:31 2025 -1000"
  },
  "committer": {
    "name": "Tejun Heo",
    "email": "tj@kernel.org",
    "time": "Tue Oct 28 20:14:31 2025 -1000"
  },
  "message": "sched_ext: Fix cgroup exit ordering by moving sched_ext_free() to finish_task_switch()\n\nsched_ext_free() was called from __put_task_struct() when the last reference\nto the task is dropped, which could be long after the task has finished\nrunning. This causes cgroup-related problems:\n\n- ops.task_init() can be called on a cgroup which didn\u0027t get ops.cgroup_init()\u0027d\n  during scheduler load.\n\n- ops.cgroup_exit() could be called before ops.exit_task() is called on all\n  member tasks, leading to incorrect exit ordering.\n\nFix by moving it to finish_task_switch() to be called right after the final\ncontext switch away from the dying task, matching when sched_class-\u003etask_dead()\nis called. Rename it to sched_ext_dead() to match the new calling context.\n\nBy calling sched_ext_dead() before cgroup_task_dead(), we ensure that:\n\n- Tasks visible on scx_tasks list have valid cgroups during scheduler load,\n  as cgroup_mutex prevents cgroup destruction while the task is still linked.\n\n- All member tasks have ops.exit_task() called and are removed from scx_tasks\n  before the cgroup can be destroyed and trigger ops.cgroup_exit().\n\nThis fix is made possible by the cgroup_task_dead() split in the previous patch.\n\nThis also makes more sense resource-wise as there\u0027s no point in keeping\nscheduler side resources around for dead tasks.\n\nReported-by: Dan Schatzberg \u003cdschatzberg@meta.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d82b7a9b0658be75faf5aec0984ec2cc45ec38f0",
      "old_mode": 33188,
      "old_path": "include/linux/sched/ext.h",
      "new_id": "d7dd77be571f58187825ea2b313c816cb0b8d23f",
      "new_mode": 33188,
      "new_path": "include/linux/sched/ext.h"
    },
    {
      "type": "modify",
      "old_id": "960c39c9c264bbee35e56d570f0841ac94b6fa3c",
      "old_mode": 33188,
      "old_path": "kernel/fork.c",
      "new_id": "5ae37909a813a4e7238d800dba0ac98fffce6a5f",
      "new_mode": 33188,
      "new_path": "kernel/fork.c"
    },
    {
      "type": "modify",
      "old_id": "40f12e37f60f8282767d9bfd4185cfb42cddf695",
      "old_mode": 33188,
      "old_path": "kernel/sched/core.c",
      "new_id": "d4dbffb27a66d8e334a52ab5c1e78064f153fcd1",
      "new_mode": 33188,
      "new_path": "kernel/sched/core.c"
    },
    {
      "type": "modify",
      "old_id": "2b0e88206d0768634ab7014fb037f7860c04ca5b",
      "old_mode": 33188,
      "old_path": "kernel/sched/ext.c",
      "new_id": "840bc76210c8dfb1770c61154a9faa89d1fa3deb",
      "new_mode": 33188,
      "new_path": "kernel/sched/ext.c"
    }
  ]
}
