)]}'
{
  "commit": "e71bf0d0ee89e51b92776391c5634938236977d5",
  "tree": "9fc62352a40ad388deebdd8ed497cab926cf0470",
  "parents": [
    "f331c0296f2a9fee0d396a70598b954062603015"
  ],
  "author": {
    "name": "Tejun Heo",
    "email": "tj@kernel.org",
    "time": "Wed Sep 03 09:03:02 2008 +0200"
  },
  "committer": {
    "name": "Jens Axboe",
    "email": "jens.axboe@oracle.com",
    "time": "Thu Oct 09 08:56:06 2008 +0200"
  },
  "message": "block: fix disk-\u003epart[] dereferencing race\n\ndisk-\u003epart[] is protected by its matching bdev\u0027s lock.  However,\nnon-critical accesses like collecting stats and printing out sysfs and\nproc information used to be performed without any locking.  As\npartitions can come and go dynamically, partitions can go away\nunderneath those non-critical accesses.  As some of those accesses are\nwrites, this theoretically can lead to silent corruption.\n\nThis patch fixes the race by using RCU for the partition array and dev\nreference counter to hold partitions.\n\n* Rename disk-\u003epart[] to disk-\u003e__part[] to make sure no one outside\n  genhd layer proper accesses it directly.\n\n* Use RCU for disk-\u003e__part[] dereferencing.\n\n* Implement disk_{get|put}_part() which can be used to get and put\n  partitions from gendisk respectively.\n\n* Iterators are implemented to help iterate through all partitions\n  safely.\n\n* Functions which require RCU readlock are marked with _rcu suffix.\n\n* Use disk_put_part() in __blkdev_put() instead of directly putting\n  the contained kobject.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a0dc2e72fcbb79af6a3ff208150f0296a707a634",
      "old_mode": 33188,
      "old_path": "block/blk-core.c",
      "new_id": "d6128d9ad601ddd463be42e2b7eee802a9c8723c",
      "new_mode": 33188,
      "new_path": "block/blk-core.c"
    },
    {
      "type": "modify",
      "old_id": "9b17da698d7ce6ff5c93caa5717586bf4e9c4428",
      "old_mode": 33188,
      "old_path": "block/blk-merge.c",
      "new_id": "eb2a3ca58303d1ce49d48803703f18dbe0045b8a",
      "new_mode": 33188,
      "new_path": "block/blk-merge.c"
    },
    {
      "type": "modify",
      "old_id": "fa32d09fda24c1f840454f3671dd8ace2cd491de",
      "old_mode": 33188,
      "old_path": "block/genhd.c",
      "new_id": "b431d65439429a91cca1e996464ad931d1b3eaf5",
      "new_mode": 33188,
      "new_path": "block/genhd.c"
    },
    {
      "type": "modify",
      "old_id": "403f7d7e0c2826fa14ef18148ebdb13bcbf1c837",
      "old_mode": 33188,
      "old_path": "block/ioctl.c",
      "new_id": "a5f672ad55f6549b0fffb3834d032349abcf6da4",
      "new_mode": 33188,
      "new_path": "block/ioctl.c"
    },
    {
      "type": "modify",
      "old_id": "885d1409521f63d8156bfc41fbfad5a72804e103",
      "old_mode": 33188,
      "old_path": "drivers/block/aoe/aoecmd.c",
      "new_id": "84c03d65dcc5e5fb930200e091656fe0fb08df41",
      "new_mode": 33188,
      "new_path": "drivers/block/aoe/aoecmd.c"
    },
    {
      "type": "modify",
      "old_id": "72e0a2887cb723bdbc8e858497552475839dc664",
      "old_mode": 33188,
      "old_path": "fs/block_dev.c",
      "new_id": "2f2873b9a04109f1c16e5d8f7863f08f50341e59",
      "new_mode": 33188,
      "new_path": "fs/block_dev.c"
    },
    {
      "type": "modify",
      "old_id": "e77fa144a07dd000e49dcf3f257c08d75e719bf3",
      "old_mode": 33188,
      "old_path": "fs/partitions/check.c",
      "new_id": "96c8bf41e4550a4d9706745cf164d72a7ff8a460",
      "new_mode": 33188,
      "new_path": "fs/partitions/check.c"
    },
    {
      "type": "modify",
      "old_id": "0ff75329199c38e4ab2ad78f5b32eda45c65f327",
      "old_mode": 33188,
      "old_path": "include/linux/genhd.h",
      "new_id": "7fbba19e076bedf62b31664c9aaf227953b6e4a6",
      "new_mode": 33188,
      "new_path": "include/linux/genhd.h"
    }
  ]
}
