)]}'
{
  "commit": "e7d33bb5ea82922e6ddcfc6b28a630b1a4ced071",
  "tree": "6a3d2da32c73b38246750cd8d163029d8a9afcf3",
  "parents": [
    "44a0cf92926c343366a4986808d12ab068504eed"
  ],
  "author": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Sat Sep 07 15:49:18 2013 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Sat Sep 07 15:49:18 2013 -0700"
  },
  "message": "lockref: add ability to mark lockrefs \"dead\"\n\nThe only actual current lockref user (dcache) uses zero reference counts\neven for perfectly live dentries, because it\u0027s a cache: there may not be\nany users, but that doesn\u0027t mean that we want to throw away the dentry.\n\nAt the same time, the dentry cache does have a notion of a truly \"dead\"\ndentry that we must not even increment the reference count of, because\nwe have pruned it and it is not valid.\n\nCurrently that distinction is not visible in the lockref itself, and the\ndentry cache validation uses \"lockref_get_or_lock()\" to either get a new\nreference to a dentry that already had existing references (and thus\ncannot be dead), or get the dentry lock so that we can then verify the\ndentry and increment the reference count under the lock if that\nverification was successful.\n\nThat\u0027s all somewhat complicated.\n\nThis adds the concept of being \"dead\" to the lockref itself, by simply\nusing a count that is negative.  This allows a usage scenario where we\ncan increment the refcount of a dentry without having to validate it,\nand pushing the special \"we killed it\" case into the lockref code.\n\nThe dentry code itself doesn\u0027t actually use this yet, and it\u0027s probably\ntoo late in the merge window to do that code (the dentry_kill() code\nwith its \"should I decrement the count\" logic really is pretty complex\ncode), but let\u0027s introduce the concept at the lockref level now.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ca07b5028b012abd94deabbe5891c6b7f150843f",
      "old_mode": 33188,
      "old_path": "include/linux/lockref.h",
      "new_id": "f279ed9a91631cca7f236d20ef5a29d152332932",
      "new_mode": 33188,
      "new_path": "include/linux/lockref.h"
    },
    {
      "type": "modify",
      "old_id": "7aae8df37f6745ec7b3d42b32a205dfa068f6be5",
      "old_mode": 33188,
      "old_path": "lib/lockref.c",
      "new_id": "e2cd2c0a882126c58e04e47102fb4975c5247d3c",
      "new_mode": 33188,
      "new_path": "lib/lockref.c"
    }
  ]
}
