)]}'
{
  "commit": "cea78f4d2c26b497966593718d44582085857194",
  "tree": "aa3c6d3b5deddd03fd92afabec4c50a28e152bde",
  "parents": [
    "1b147244ad704bb8a4a14d2d2f2df2e72fdb8f88"
  ],
  "author": {
    "name": "David Howells",
    "email": "dhowells@redhat.com",
    "time": "Thu Feb 23 17:36:26 2012 +0000"
  },
  "committer": {
    "name": "David Howells",
    "email": "dhowells@redhat.com",
    "time": "Thu Feb 23 17:36:26 2012 +0000"
  },
  "message": "Noisefs: A predictable noise producing fs for testing things\n\nAdd a configurable, predictable noise-producing filesystem for testing stuff,\nparticularly cache coherency handling in NFS and FS-Cache.\n\nIt\u0027s based somewhat on ramfs, so you mount an empty fs and populate it:\n\n\tmount -t noisefs none /mnt\n\ttouch /mnt/{a,b}\n\tmkdir /mnt/{c,d}\n\ttouch /mnt/c/{e,f}\n\nThe size of files can be set, e.g.:\n\n\techo hello \u003e/mnt/a\n\techo hello \u003e\u003e/mnt/a\n\ttruncate -s 4096 /mnt/a\n\nHowever, no data is actually stored, and the filesystem is not persistent.\nData can be read, but it\u0027s generated by a pattern generator, and is available\nup to the EOF point.\n\nThe data pattern is generated in BE words of four bytes, consisting of the sum\nof the filesystem key, inode number, inode data version number and the word\nnumber within the file (file offset / 4).  This should make it easy to check\nquickly whether the data is correct.\n\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nCONFIGURATION\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n (1) A file\u0027s i_version number can be given a timeout.  This means that once\n     an i_version is viewed (by getattr), it is only good for that many more\n     seconds.  After that it will be incremented and the timeout begun again:\n\n\tsetfattr -n iversion_timo -v 4 /mnt/a\n\n     The file\u0027s i_version number is also incremented any time there\u0027s a write\n     or a truncation operation performed on the file.\n\n\n (2) A file can be made to inject an arbitrary error (EIO by default) when\n     i_version reaches or exceeds a certain number:\n\n\tsetfattr -n inject_error_at -v 4 /mnt/a\n\tsetfattr -n error_to_inject -v 28 /mnt/a\n\n     So the above would inject ENOSPC when i_version \u003e\u003d 4.\n\n (3) A 32-bit filesystem ID key can be set during mounting:\n\n\tmount -t noisefs none /mnt -o fs_key\u003d1234\n\n     Note that when exporting this filesystem through NFS, an FSID should be\n     set as the mount does not have real device numbers of its own.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d621f02a3f9e26ee9f98160566981c12be69e395",
      "old_mode": 33188,
      "old_path": "fs/Kconfig",
      "new_id": "1ad9d40a61f8d44ad37f4765800282b0bdc51796",
      "new_mode": 33188,
      "new_path": "fs/Kconfig"
    },
    {
      "type": "modify",
      "old_id": "93804d4d66e1876c55338887bfd0d81f1dd43505",
      "old_mode": 33188,
      "old_path": "fs/Makefile",
      "new_id": "15106d552d7a56477d8f0b92a1631f1344f265e6",
      "new_mode": 33188,
      "new_path": "fs/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bf68072bf49952c95c768617ecaf69f09a558a82",
      "new_mode": 33188,
      "new_path": "fs/noisefs/Kconfig"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "59f97465da65b369b9ec2fb6414ef4e2dbed5baf",
      "new_mode": 33188,
      "new_path": "fs/noisefs/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "98af0b2ac7c8bf233c95ff0ba33199131d52fc10",
      "new_mode": 33188,
      "new_path": "fs/noisefs/file.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "62fc2aae796f56b0dc43a8508b26b633a3fd245c",
      "new_mode": 33188,
      "new_path": "fs/noisefs/inode.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "37a93ece5409e95abd94a946d1fd95419ca1000c",
      "new_mode": 33188,
      "new_path": "fs/noisefs/internal.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6118fad65819b2dea8b4220129dca08d1423b2cd",
      "new_mode": 33188,
      "new_path": "fs/noisefs/super.c"
    },
    {
      "type": "modify",
      "old_id": "363ba7082ef59efab5e90d94184cbf593aeff7ea",
      "old_mode": 33188,
      "old_path": "mm/page-writeback.c",
      "new_id": "4dc4ec1c09e3b5a419cf97ab81acc593582b71c7",
      "new_mode": 33188,
      "new_path": "mm/page-writeback.c"
    }
  ]
}
