)]}'
{
  "log": [
    {
      "commit": "bbf1813fb8ff9d21171bf22e6d1f0e0393601e86",
      "tree": "2b8474019c1320df290d5df03514eaed56e44cc6",
      "parents": [
        "807c453de7c5487d2e5eece76bafdea8f39d249e"
      ],
      "author": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Thu Sep 08 21:09:06 2005 +0100"
      },
      "committer": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Thu Sep 08 21:09:06 2005 +0100"
      },
      "message": "NTFS: Fix cluster (de)allocators to work when the runlist is NULL and more\n      importantly to take a locked runlist rather than them locking it\n      which leads to lock reversal.\n\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\n"
    },
    {
      "commit": "8bb735216a0675e247bbe8b8b92c09d6884d1a17",
      "tree": "7d98e06d0f093e205f21090a123617f2913cb7b3",
      "parents": [
        "84d6ebe63f50b6efd8be252b58a207132157c60f"
      ],
      "author": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Thu Sep 08 16:48:28 2005 +0100"
      },
      "committer": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Thu Sep 08 16:48:28 2005 +0100"
      },
      "message": "NTFS: Remove two bogus BUG_ON()s from fs/ntfs/mft.c.\n\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\n"
    },
    {
      "commit": "e74589ac250e463973361774a90fee2c9d71da02",
      "tree": "d66e3870b1ad88cd174628411fd8e85a6af0fdc4",
      "parents": [
        "3edea4833a1efcd43e1dff082bc8001fdfe74b34"
      ],
      "author": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Tue Aug 16 16:38:28 2005 +0100"
      },
      "committer": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Tue Aug 16 16:38:28 2005 +0100"
      },
      "message": "NTFS: Fix bug in mft record writing where we forgot to set the device in\n      the buffers when mapping them after the VM had discarded them.\n      Thanks to Martin MOKREJŠ for the bug report.\n\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\n"
    },
    {
      "commit": "ba6d2377c85c9b8a793f455d8c9b6cf31985d70f",
      "tree": "21e65c76db693869c84864af02e91c4b997a6ba5",
      "parents": [
        "af859a42d798f047fbfe198ed315a942662c39d2"
      ],
      "author": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Sun Jun 26 22:12:02 2005 +0100"
      },
      "committer": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Sun Jun 26 22:12:02 2005 +0100"
      },
      "message": "NTFS: Fix a nasty deadlock that appeared in recent kernels.\n      The situation: VFS inode X on a mounted ntfs volume is dirty.  For\n      same inode X, the ntfs_inode is dirty and thus corresponding on-disk\n      inode, i.e. mft record, which is in a dirty PAGE_CACHE_PAGE belonging\n      to the table of inodes, i.e. $MFT, inode 0.\n      What happens:\n      Process 1: sys_sync()/umount()/whatever...  calls\n      __sync_single_inode() for $MFT -\u003e do_writepages() -\u003e write_page for\n      the dirty page containing the on-disk inode X, the page is now locked\n      -\u003e ntfs_write_mst_block() which clears PageUptodate() on the page to\n      prevent anyone else getting hold of it whilst it does the write out.\n      This is necessary as the on-disk inode needs \"fixups\" applied before\n      the write to disk which are removed again after the write and\n      PageUptodate is then set again.  It then analyses the page looking\n      for dirty on-disk inodes and when it finds one it calls\n      ntfs_may_write_mft_record() to see if it is safe to write this\n      on-disk inode.  This then calls ilookup5() to check if the\n      corresponding VFS inode is in icache().  This in turn calls ifind()\n      which waits on the inode lock via wait_on_inode whilst holding the\n      global inode_lock.\n      Process 2: pdflush results in a call to __sync_single_inode for the\n      same VFS inode X on the ntfs volume.  This locks the inode (I_LOCK)\n      then calls write-inode -\u003e ntfs_write_inode -\u003e map_mft_record() -\u003e\n      read_cache_page() for the page (in page cache of table of inodes\n      $MFT, inode 0) containing the on-disk inode.  This page has\n      PageUptodate() clear because of Process 1 (see above) so\n      read_cache_page() blocks when it tries to take the page lock for the\n      page so it can call ntfs_read_page().\n      Thus Process 1 is holding the page lock on the page containing the\n      on-disk inode X and it is waiting on the inode X to be unlocked in\n      ifind() so it can write the page out and then unlock the page.\n      And Process 2 is holding the inode lock on inode X and is waiting for\n      the page to be unlocked so it can call ntfs_readpage() or discover\n      that Process 1 set PageUptodate() again and use the page.\n      Thus we have a deadlock due to ifind() waiting on the inode lock.\n      The solution: The fix is to use the newly introduced\n      ilookup5_nowait() which does not wait on the inode\u0027s lock and hence\n      avoids the deadlock.  This is safe as we do not care about the VFS\n      inode and only use the fact that it is in the VFS inode cache and the\n      fact that the vfs and ntfs inodes are one struct in memory to find\n      the ntfs inode in memory if present.  Also, the ntfs inode has its\n      own locking so it does not matter if the vfs inode is locked.\n\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\n"
    },
    {
      "commit": "fa3be92317c4ae34edcf5274e8bbeff181e20b7a",
      "tree": "84ae4ace6c891aa95b804950283e1f8f3e46c730",
      "parents": [
        "1d58b27b8d77ecb816cfa8f846b78c845675eb89"
      ],
      "author": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Sat Jun 25 17:15:36 2005 +0100"
      },
      "committer": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Sat Jun 25 17:15:36 2005 +0100"
      },
      "message": "NTFS: Add an extra parameter @last_vcn to ntfs_get_size_for_mapping_pairs()\n      and ntfs_mapping_pairs_build() to allow the runlist encoding to be\n      partial which is desirable when filling holes in sparse attributes.\n      Update all callers.\n\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\n"
    },
    {
      "commit": "c0c1cc0e46b36347f11b566f99087dc5e6fc1b89",
      "tree": "773105bdde7454d10dccc127048a9847f7e01f11",
      "parents": [
        "271849a98849394ea85fa7caa8a1aaa2b3a849b7"
      ],
      "author": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Mon Mar 07 21:43:38 2005 +0000"
      },
      "committer": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Thu May 05 11:20:49 2005 +0100"
      },
      "message": "NTFS: - Fix bug in fs/ntfs/attrib.c::ntfs_find_vcn_nolock() where after\n        dropping the read lock and taking the write lock we were not checking\n        whether someone else did not already do the work we wanted to do.\n      - Rename ntfs_find_vcn_nolock() to ntfs_attr_find_vcn_nolock().\n      - Tidy up some comments in fs/ntfs/runlist.c.\n      - Add LCN_ENOMEM and LCN_EIO definitions to fs/ntfs/runlist.h.\n\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\n"
    },
    {
      "commit": "8907547d4b099e67762ea4891c127ea1f6dd1cb7",
      "tree": "74fa9c887db8a7915325ad9a76d874ed134c0d9a",
      "parents": [
        "5ae9fcf8f329baba4bada8719cb0337eef083a1a"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "rddunlap@osdl.org",
        "time": "Thu Mar 03 11:19:53 2005 +0000"
      },
      "committer": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Thu May 05 11:11:47 2005 +0100"
      },
      "message": "NTFS: Fix printk format warnings on ia64. (Randy Dunlap)\n\nSigned-off-by: Randy Dunlap \u003crddunlap@osdl.org\u003e\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\n"
    },
    {
      "commit": "b6ad6c52fe36ab35d0fe28c064f59de2ba670c2a",
      "tree": "d888c28a2c3c7fa733045dc7dc9c9bc7f157bf4a",
      "parents": [
        "1a0df15acdae065789446aca83021c72b71db9a5"
      ],
      "author": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Tue Feb 15 10:08:43 2005 +0000"
      },
      "committer": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Thu May 05 10:56:31 2005 +0100"
      },
      "message": "NTFS: - Split ntfs_map_runlist() into ntfs_map_runlist() and a non-locking\n\thelper ntfs_map_runlist_nolock() which is used by ntfs_map_runlist().\n\tThis allows us to map runlist fragments with the runlist lock already\n\theld without having to drop and reacquire it around the call.  Adapt\n\tall callers.\n      - Change ntfs_find_vcn() to ntfs_find_vcn_nolock() which takes a locked\n\trunlist.  This allows us to find runlist elements with the runlist\n\tlock already held without having to drop and reacquire it around the\n\tcall.  Adapt all callers.\n\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\n"
    },
    {
      "commit": "3834c3f227725e2395840aed82342bda4ee9d379",
      "tree": "7a145a78efc44cb5ddce614cdd2618c710c8e3b7",
      "parents": [
        "149f0c5200188a43f1fc11ca2fb14d8183013d10"
      ],
      "author": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Thu Jan 13 11:04:39 2005 +0000"
      },
      "committer": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Thu May 05 10:45:36 2005 +0100"
      },
      "message": "NTFS: Fix stupid bug in fs/ntfs/mft.c introduced in last changeset.\n\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\n"
    },
    {
      "commit": "07a4e2da7dd3c9345f84b2552872f9d38c257451",
      "tree": "8fbd4c3e11196752ae8ff7944ccb26b93cafbb1c",
      "parents": [
        "f50f3ac51983025405a71b70b033cc6bcb0d1fc1"
      ],
      "author": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Wed Jan 12 13:08:26 2005 +0000"
      },
      "committer": {
        "name": "Anton Altaparmakov",
        "email": "aia21@cantab.net",
        "time": "Thu May 05 10:39:08 2005 +0100"
      },
      "message": "NTFS: Use i_size_{read,write}() in fs/ntfs/{aops.c,mft.c} and protect\n      access to the i_size and other size fields using the size_lock.\n\nSigned-off-by: Anton Altaparmakov \u003caia21@cantab.net\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
