)]}'
{
  "commit": "2a82b8be8a8dacb48cb7371449a7a9daa558b4a8",
  "tree": "44e6a81dd0e7d7dc634e04b9230b5262a254c5ee",
  "parents": [
    "0892ccd6fe13e08ad9e57007afbb78fe02d66005"
  ],
  "author": {
    "name": "David Chinner",
    "email": "dgc@sgi.com",
    "time": "Wed Jul 11 11:09:12 2007 +1000"
  },
  "committer": {
    "name": "Tim Shimmin",
    "email": "tes@chook.melbourne.sgi.com",
    "time": "Sat Jul 14 15:40:53 2007 +1000"
  },
  "message": "[XFS] Concurrent Multi-File Data Streams\n\nIn media spaces, video is often stored in a frame-per-file format. When\ndealing with uncompressed realtime HD video streams in this format, it is\ncrucial that files do not get fragmented and that multiple files a placed\ncontiguously on disk.\n\nWhen multiple streams are being ingested and played out at the same time,\nit is critical that the filesystem does not cross the streams and\ninterleave them together as this creates seek and readahead cache miss\nlatency and prevents both ingest and playout from meeting frame rate\ntargets.\n\nThis patch set creates a \"stream of files\" concept into the allocator to\nplace all the data from a single stream contiguously on disk so that RAID\narray readahead can be used effectively. Each additional stream gets\nplaced in different allocation groups within the filesystem, thereby\nensuring that we don\u0027t cross any streams. When an AG fills up, we select a\nnew AG for the stream that is not in use.\n\nThe core of the functionality is the stream tracking - each inode that we\ncreate in a directory needs to be associated with the directories\u0027 stream.\nHence every time we create a file, we look up the directories\u0027 stream\nobject and associate the new file with that object.\n\nOnce we have a stream object for a file, we use the AG that the stream\nobject point to for allocations. If we can\u0027t allocate in that AG (e.g. it\nis full) we move the entire stream to another AG. Other inodes in the same\nstream are moved to the new AG on their next allocation (i.e. lazy\nupdate).\n\nStream objects are kept in a cache and hold a reference on the inode.\nHence the inode cannot be reclaimed while there is an outstanding stream\nreference. This means that on unlink we need to remove the stream\nassociation and we also need to flush all the associations on certain\nevents that want to reclaim all unreferenced inodes (e.g. filesystem\nfreeze).\n\nSGI-PV: 964469\nSGI-Modid: xfs-linux-melb:xfs-kern:29096a\n\nSigned-off-by: David Chinner \u003cdgc@sgi.com\u003e\nSigned-off-by: Barry Naujok \u003cbnaujok@sgi.com\u003e\nSigned-off-by: Donald Douwsma \u003cdonaldd@sgi.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Tim Shimmin \u003ctes@sgi.com\u003e\nSigned-off-by: Vlad Apostolov \u003cvapo@sgi.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b49989bb89ad225dd2636f4d783cf3d57fdf5951",
      "old_mode": 33188,
      "old_path": "fs/xfs/Makefile-linux-2.6",
      "new_id": "e7a9a83f0087fae20265bf9f28ef2b4836f7268c",
      "new_mode": 33188,
      "new_path": "fs/xfs/Makefile-linux-2.6"
    },
    {
      "type": "modify",
      "old_id": "ed3a5e1b4b6777490a7d8c6738a1959a15796543",
      "old_mode": 33188,
      "old_path": "fs/xfs/linux-2.6/xfs_globals.c",
      "new_id": "bb72c3d4141f7f3260333e4b734d9bc708e71be9",
      "new_mode": 33188,
      "new_path": "fs/xfs/linux-2.6/xfs_globals.c"
    },
    {
      "type": "modify",
      "old_id": "af24a457d3a33efebe55719cb3dd1bc0e755fe5d",
      "old_mode": 33188,
      "old_path": "fs/xfs/linux-2.6/xfs_linux.h",
      "new_id": "330c4ba9d40445fad61b83c5da8ae1c45049d5c8",
      "new_mode": 33188,
      "new_path": "fs/xfs/linux-2.6/xfs_linux.h"
    },
    {
      "type": "modify",
      "old_id": "cd6eaa44aa2be069875dd56c5d1eb6847d291e8b",
      "old_mode": 33188,
      "old_path": "fs/xfs/linux-2.6/xfs_sysctl.c",
      "new_id": "bb997d75c05c3326c129bd79f57f12aee7d343c1",
      "new_mode": 33188,
      "new_path": "fs/xfs/linux-2.6/xfs_sysctl.c"
    },
    {
      "type": "modify",
      "old_id": "a631fb8cc5ac4c57ad04e9090184eef58fcec75a",
      "old_mode": 33188,
      "old_path": "fs/xfs/linux-2.6/xfs_sysctl.h",
      "new_id": "98b97e399d6fe7038c5e487d134c7a7ed01334ec",
      "new_mode": 33188,
      "new_path": "fs/xfs/linux-2.6/xfs_sysctl.h"
    },
    {
      "type": "modify",
      "old_id": "bf0a12040b1388facefbe43de58d82690d6246c1",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs.h",
      "new_id": "b5a7d92c68438a7d7e6b1d5e38b33a833bb0dd7b",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs.h"
    },
    {
      "type": "modify",
      "old_id": "b1dd0029c60e7cfe0c48b8da0ac5d15968885c01",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_ag.h",
      "new_id": "51c09c114a201934c19ff657edcee15a1fcef52b",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_ag.h"
    },
    {
      "type": "modify",
      "old_id": "09d86388bb711641b275d9263d27d32ca1d772a8",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_bmap.c",
      "new_id": "51ba689a45526d51709fb9d36846c4adc8cbfee0",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_bmap.c"
    },
    {
      "type": "modify",
      "old_id": "5b7eb81453be02160cf7911e8905d0d7a2871c22",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_clnt.h",
      "new_id": "f89196cb08d256cf5a8d288630856e7826e4482c",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_clnt.h"
    },
    {
      "type": "modify",
      "old_id": "b33826961c458f794bdbe0f711014fb73bbac432",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_dinode.h",
      "new_id": "fefd0116bac9577a61b51a5c0d047c9f230784ea",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_dinode.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ce2278611bb74232269f2adad55a7e619141988f",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_filestream.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f655f7dc334c18b673d81880fa6dd8fec28f1817",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_filestream.h"
    },
    {
      "type": "modify",
      "old_id": "1b60cfc28be5546b2d70cc2b80daa3e3814fa154",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_fs.h",
      "new_id": "ec3c9c27e0de699fe66e6fc1aaf48428549b072b",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_fs.h"
    },
    {
      "type": "modify",
      "old_id": "2251a49f3e17c84e47f1488762a926ce168bb4a6",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_fsops.c",
      "new_id": "432e82347ed6d1313f9875ebbc10158e4c3cc4c2",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_fsops.c"
    },
    {
      "type": "modify",
      "old_id": "8fdd30d9ba56424791be59bafc804844ffa6d95c",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_inode.c",
      "new_id": "2ef100be6c4f5700aeef1139d0af231aad722bde",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_inode.c"
    },
    {
      "type": "modify",
      "old_id": "f75afecef8e7b02d78ebb2c4d45a1e381af2ac8c",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_inode.h",
      "new_id": "d418eeed4ebd49fe510eddf58ab43d1ed247d608",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_inode.h"
    },
    {
      "type": "modify",
      "old_id": "0bca2d4227191e2683b8c22feb292195e59d3bc0",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_mount.h",
      "new_id": "76ad74758696db9f76f7ca2dc6e7331ac9149c7a",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_mount.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7deb9e3cbbd3dcb2669186605f8cb9fc91d084e3",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_mru_cache.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "624fd10ee8e5ed21be6be354bb999e147989b915",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_mru_cache.h"
    },
    {
      "type": "modify",
      "old_id": "c343fde10ef9cab03bf6302b96f65981df2d2e4f",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_vfsops.c",
      "new_id": "11f5ea29a0388e62abc4a69507171db69214183c",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_vfsops.c"
    },
    {
      "type": "modify",
      "old_id": "2067d0b0a10e2d1a0b08d772ec8d4aabab2e0d52",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_vnodeops.c",
      "new_id": "60fd0be90a1660d29033203cfa8aa8db647848cb",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_vnodeops.c"
    }
  ]
}
