)]}'
{
  "commit": "bd681513fa6f2ff29aa391f01e413a2d1c59fd77",
  "tree": "bb10ec6ef876b4d7a553cbe54976ec49a0d10b21",
  "parents": [
    "81317fdeddcef259b6ecf7b5c0d04caa167c6b54"
  ],
  "author": {
    "name": "Chris Mason",
    "email": "chris.mason@oracle.com",
    "time": "Sat Jul 16 15:23:14 2011 -0400"
  },
  "committer": {
    "name": "Chris Mason",
    "email": "chris.mason@oracle.com",
    "time": "Wed Jul 27 12:46:46 2011 -0400"
  },
  "message": "Btrfs: switch the btrfs tree locks to reader/writer\n\nThe btrfs metadata btree is the source of significant\nlock contention, especially in the root node.   This\ncommit changes our locking to use a reader/writer\nlock.\n\nThe lock is built on top of rw spinlocks, and it\nextends the lock tracking to remember if we have a\nread lock or a write lock when we go to blocking.  Atomics\ncount the number of blocking readers or writers at any\ngiven time.\n\nIt removes all of the adaptive spinning from the old code\nand uses only the spinning/blocking hints inside of btrfs\nto decide when it should continue spinning.\n\nIn read heavy workloads this is dramatically faster.  In write\nheavy workloads we\u0027re still faster because of less contention\non the root node lock.\n\nWe suffer slightly in dbench because we schedule more often\nduring write locks, but all other benchmarks so far are improved.\n\nSigned-off-by: Chris Mason \u003cchris.mason@oracle.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d2431284b913e19f3d6060d56c63d3f55eccc2ef",
      "old_mode": 33188,
      "old_path": "fs/btrfs/ctree.c",
      "new_id": "0ad48e782d379e961f2333d74bc528862756686a",
      "new_mode": 33188,
      "new_path": "fs/btrfs/ctree.c"
    },
    {
      "type": "modify",
      "old_id": "3063f21d3fc6a062bee2cc5a53c5d1e0cb64c801",
      "old_mode": 33188,
      "old_path": "fs/btrfs/ctree.h",
      "new_id": "40235e10cfb920c105b778143f483455e519723e",
      "new_mode": 33188,
      "new_path": "fs/btrfs/ctree.h"
    },
    {
      "type": "modify",
      "old_id": "98c68e658a9b2eb08a8ba99d0b5691f16fc8a67d",
      "old_mode": 33188,
      "old_path": "fs/btrfs/delayed-inode.c",
      "new_id": "b52c672f4c180beae28f60302071731bd343dcba",
      "new_mode": 33188,
      "new_path": "fs/btrfs/delayed-inode.c"
    },
    {
      "type": "modify",
      "old_id": "7021dde74d81890c8a717260c1a9a1ca1b92f9c5",
      "old_mode": 33188,
      "old_path": "fs/btrfs/extent-tree.c",
      "new_id": "2a782c2fcb622153b54b09c373601cf34ce31b96",
      "new_mode": 33188,
      "new_path": "fs/btrfs/extent-tree.c"
    },
    {
      "type": "modify",
      "old_id": "76ecbb8ed0e0d1835eed09d917d04461f3ca4a9b",
      "old_mode": 33188,
      "old_path": "fs/btrfs/extent_io.c",
      "new_id": "5392c3b12fc13cd061a544880e7c2e1f15db6d1c",
      "new_mode": 33188,
      "new_path": "fs/btrfs/extent_io.c"
    },
    {
      "type": "modify",
      "old_id": "b5f120cca9161d77bcdabd86dd5dcdca90264ad3",
      "old_mode": 33188,
      "old_path": "fs/btrfs/extent_io.h",
      "new_id": "21a7ca9e72825752a3b910cdfb9fac444094b96b",
      "new_mode": 33188,
      "new_path": "fs/btrfs/extent_io.h"
    },
    {
      "type": "modify",
      "old_id": "66fa43dc3f0f9ff8b5c67e5330120fd663bf4054",
      "old_mode": 33188,
      "old_path": "fs/btrfs/locking.c",
      "new_id": "d77b67c4b275731417c11e04ad38b3dc9c4d456b",
      "new_mode": 33188,
      "new_path": "fs/btrfs/locking.c"
    },
    {
      "type": "modify",
      "old_id": "5c33a560a2f100c2454797d122875a76921403ab",
      "old_mode": 33188,
      "old_path": "fs/btrfs/locking.h",
      "new_id": "17247ddb81a00f80e2e3e0a82c5c87e36cc564d1",
      "new_mode": 33188,
      "new_path": "fs/btrfs/locking.h"
    },
    {
      "type": "modify",
      "old_id": "4ce8a9f41d1ec3916753bd610183a82b4dc6aa21",
      "old_mode": 33188,
      "old_path": "fs/btrfs/tree-log.c",
      "new_id": "ac278dd83175e3a64a573f9a16e154a21226ecda",
      "new_mode": 33188,
      "new_path": "fs/btrfs/tree-log.c"
    }
  ]
}
