)]}'
{
  "commit": "5d8f72b55c275677865de670fa147ed318191d81",
  "tree": "58f4f571440f412861a232ed0c5753771e5a6e58",
  "parents": [
    "ead5c473712eb26db792b18a4dc98fdb312883fe"
  ],
  "author": {
    "name": "Oleg Nesterov",
    "email": "oleg@redhat.com",
    "time": "Fri Oct 26 19:46:06 2012 +0200"
  },
  "committer": {
    "name": "Tejun Heo",
    "email": "tj@kernel.org",
    "time": "Fri Oct 26 14:27:49 2012 -0700"
  },
  "message": "freezer: change ptrace_stop/do_signal_stop to use freezable_schedule()\n\ntry_to_freeze_tasks() and cgroup_freezer rely on scheduler locks\nto ensure that a task doing STOPPED/TRACED -\u003e RUNNING transition\ncan\u0027t escape freezing. This mostly works, but ptrace_stop() does\nnot necessarily call schedule(), it can change task-\u003estate back to\nRUNNING and check freezing() without any lock/barrier in between.\n\nWe could add the necessary barrier, but this patch changes\nptrace_stop() and do_signal_stop() to use freezable_schedule().\nThis fixes the race, freezer_count() and freezer_should_skip()\ncarefully avoid the race.\n\nAnd this simplifies the code, try_to_freeze_tasks/update_if_frozen\nno longer need to use task_is_stopped_or_traced() checks with the\nnon trivial assumptions. We can rely on the mechanism which was\nspecially designed to mark the sleeping task as \"frozen enough\".\n\nv2: As Tejun pointed out, we can also change get_signal_to_deliver()\nand move try_to_freeze() up before \u0027relock\u0027 label.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ee899329e65a6e43320ddfbedd38f427f6d39125",
      "old_mode": 33188,
      "old_path": "include/linux/freezer.h",
      "new_id": "8039893bc3ec205698d5c24e3c16435887d4f1ad",
      "new_mode": 33188,
      "new_path": "include/linux/freezer.h"
    },
    {
      "type": "modify",
      "old_id": "8a92b0e52099185136ace406dcefa7129b1ba5e1",
      "old_mode": 33188,
      "old_path": "kernel/cgroup_freezer.c",
      "new_id": "bedefd9a22df477f25501663e3c05e40dee353b1",
      "new_mode": 33188,
      "new_path": "kernel/cgroup_freezer.c"
    },
    {
      "type": "modify",
      "old_id": "11f82a4d4eae07b4d98595852ea50dcf1c028a6b",
      "old_mode": 33188,
      "old_path": "kernel/freezer.c",
      "new_id": "c38893b0efbaa39d770b11546dba9e97ec53ff51",
      "new_mode": 33188,
      "new_path": "kernel/freezer.c"
    },
    {
      "type": "modify",
      "old_id": "87da817f9e132204add38dc73685962081de9dd8",
      "old_mode": 33188,
      "old_path": "kernel/power/process.c",
      "new_id": "d5a258b60c6fd71aed065a0dd2ea5acadddc991f",
      "new_mode": 33188,
      "new_path": "kernel/power/process.c"
    },
    {
      "type": "modify",
      "old_id": "0af8868525d6d1853acfa77eb9f224566ccfb313",
      "old_mode": 33188,
      "old_path": "kernel/signal.c",
      "new_id": "5ffb5626e0721d52e7230e02a809d904fb2c2666",
      "new_mode": 33188,
      "new_path": "kernel/signal.c"
    }
  ]
}
