)]}'
{
  "commit": "54561783ee99d73a086f3abbda3e44f87f6bf65b",
  "tree": "73f836a158f9c05ece41cae6cdb80888d9d6ba07",
  "parents": [
    "856848737bd944c1db3ce0a66bbf67e56bd6f77d"
  ],
  "author": {
    "name": "Oleg Nesterov",
    "email": "oleg@tv-sign.ru",
    "time": "Wed Dec 05 15:46:09 2007 +0100"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Wed Dec 05 15:46:09 2007 +0100"
  },
  "message": "lockdep: in_range() fix\n\nTorsten Kaiser wrote:\n\n| static inline int in_range(const void *start, const void *addr, const void *end)\n| {\n|         return addr \u003e\u003d start \u0026\u0026 addr \u003c\u003d end;\n| }\n| This  will return true, if addr is in the range of start (including)\n| to end (including).\n|\n| But debug_check_no_locks_freed() seems does:\n| const void *mem_to \u003d mem_from + mem_len\n| -\u003e mem_to is the last byte of the freed range, that fits in_range\n| lock_from \u003d (void *)hlock-\u003einstance;\n| -\u003e first byte of the lock\n| lock_to \u003d (void *)(hlock-\u003einstance + 1);\n| -\u003e first byte of the next lock, not last byte of the lock that is being checked!\n|\n| The test is:\n| if (!in_range(mem_from, lock_from, mem_to) \u0026\u0026\n|                                         !in_range(mem_from, lock_to, mem_to))\n|                         continue;\n| So it tests, if the first byte of the lock is in the range that is freed -\u003eOK\n| And if the first byte of the *next* lock is in the range that is freed\n| -\u003e Not OK.\n\nWe can also simplify in_range checks, we need only 2 comparisons, not 4.\nIf the lock is not in memory range, it should be either at the left of range\nor at the right.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7e2ca7c9d99c242ea249f9f99c18531a6c97b5a3",
      "old_mode": 33188,
      "old_path": "kernel/lockdep.c",
      "new_id": "0f389621bb6b42d803224db0f85d161a7c95188c",
      "new_mode": 33188,
      "new_path": "kernel/lockdep.c"
    }
  ]
}
