)]}'
{
  "log": [
    {
      "commit": "3812560fc261f257d9bb4b035e8c322e60a5ee86",
      "tree": "0d45019fb297b091655b97332e7569262e5056ad",
      "parents": [
        "10875a060a4acba1352d290aa7e07988853d96d9"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed May 14 16:40:18 2014 -0700"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 15 10:46:50 2014 -0700"
      },
      "message": "tux3: Add tux3 to fs makefile and config\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\n"
    },
    {
      "commit": "10875a060a4acba1352d290aa7e07988853d96d9",
      "tree": "5f548e5d4b4925040e1e620673a4d3daf1d24c11",
      "parents": [
        "f1e878a1ff27466809adbb51e76ccc8643c3f28d"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed May 14 16:38:27 2014 -0700"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 15 10:46:37 2014 -0700"
      },
      "message": "tux3: Track api change to __generic_file_aio_write\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\n"
    },
    {
      "commit": "f1e878a1ff27466809adbb51e76ccc8643c3f28d",
      "tree": "f12de1faa1047a85a7a99f3319455e7025d6bbcc",
      "parents": [
        "f82233703a6cb2d977d802d8403beafd4b180ee8"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Tue May 13 20:57:50 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue May 13 20:57:50 2014 +0900"
      },
      "message": "tux3: Fix missing i_ctime update for xattr\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "f82233703a6cb2d977d802d8403beafd4b180ee8",
      "tree": "ab8c87974df6dd9ea6cb8a00bf03f99e7422bc15",
      "parents": [
        "9f27a764bbc6b388a80dd1aaf8b86b5c7077511f"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Tue May 13 20:57:45 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue May 13 20:57:45 2014 +0900"
      },
      "message": "tux3: Fix timestamp update for special files\n\nSpecial files are updating timestamps without locking and\nchange_begin/end now.  This means, tux3 crashes at\ntux3_mark_inode_dirty() because of no change_begin().\n\nSo, this adds -\u003eupdate_time() handler to special files.\n\n[FIXME: maybe, we should add lock for timestamp.]\n\nAnd additionally, dir/symlink updates timestamps i_*time directly\n(except i_atime), so this adds assertion in -\u003eupdate_time() of\ndir/symlink for debugging.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "9f27a764bbc6b388a80dd1aaf8b86b5c7077511f",
      "tree": "ccf8d6a15469cc549bece040379db248c1056746",
      "parents": [
        "f84ac75d56bd4b8319198d1d4cb9ee64f96492c0"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Tue May 13 20:56:34 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue May 13 20:56:34 2014 +0900"
      },
      "message": "tux3: Fix tux3_iattrdirty() usages\n\nNow, on some paths, mark_inode_dirty() is not called after\ntux3_iattrdirty() was called.\n\nE.g. If inode-\u003ei_ctime is same with current time, file_update_time()\nskips to dirty inode.\n\n\ttux3_iattrdirty()\n\tfile_update_time() {\n\t    if (!timespec_equal(\u0026inode-\u003ei_ctime, \u0026now))\n\t\tsync_it |\u003d S_CTIME;\n\t    if (sync_it)\n\t        mark_inode_dirty_sync()\n\t}\n\nThis is wrong as tux3_iattrdirty() usage. tux3_iattrdirty() was\ncalled, the caller must call mark_inode_dirty() too.\n\nOtherwise,\n\n\tdelta \u003d 1\n\ttux3_iattrdirty(inode)\n\t    iattr_delta \u003d delta\n\n        /* flush delta 1 */\n\tinode is not dirty, so iattr_delta \u003d\u003d 1 is remaining\n\n\t/* flush delta 2 for data pages */\n\tread_idata_for_i_size()\n\t    if (iattr_delta !\u003d delta)\n\t\t/*\n\t\t * iattr_delta is still 1, so read from idata[], but\n\t\t * idata[] is invalid.\n\t\t */\n\nBy remaining iattr_delta, future inode flush is confused, and hits to\nassertion.\n\nTo fix this, this makes sure to call tux3_iattrdirty() only when we call\nmark_inode_dirty().\n\n[FIXME: file_update_time() of mmap and write can race.]\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "f84ac75d56bd4b8319198d1d4cb9ee64f96492c0",
      "tree": "4f97da2abc3109bb82fa9445993646e6d3610d99",
      "parents": [
        "525bb770d4c81e425e71927042f3353b2821fb5f"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu May 08 16:17:57 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 08 16:17:57 2014 +0900"
      },
      "message": "tux3: Some cleanup for checkpatch\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "525bb770d4c81e425e71927042f3353b2821fb5f",
      "tree": "7621bf03c6f603cc4d336fae7ef4ddb553f67498",
      "parents": [
        "e433e32db346cb25271c340bfa3217ab91a1f830"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 08 15:39:06 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 08 15:39:06 2014 +0900"
      },
      "message": "tux3: Change \"marshal\" to \"staging\"\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "e433e32db346cb25271c340bfa3217ab91a1f830",
      "tree": "38d712a6d2b5688b5f298718957bf11b5112eeb7",
      "parents": [
        "5ba195b3e5122a4f8885dd502895208209d8d165"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 08 15:38:59 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 08 15:38:59 2014 +0900"
      },
      "message": "tux3: Cleanup comments and add MODULE_{AUTHOR,DESCRIPTION}\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "5ba195b3e5122a4f8885dd502895208209d8d165",
      "tree": "933c8ed2b22c4a3ea169f32fe7796185eab52ac6",
      "parents": [
        "4bb790e7a72885e91e47a6981d1ae8a2c6062b4c"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Tue May 06 16:57:26 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue May 06 16:57:26 2014 +0900"
      },
      "message": "tux3: Introduce nanosecond timestamp format\n\nThis format is not fixed version though, was easier to implement\ncompared with fixed 32.32.\n\nFIXME: timestamp can has many unused bits, and it bloats inode\nsize. So, we may introduce new format again to reduce size.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "4bb790e7a72885e91e47a6981d1ae8a2c6062b4c",
      "tree": "f7ae7398480c50f59aa90dc82294e4ea287a1706",
      "parents": [
        "03112e4772729dd1db69cb70068e7d53b468c2f9"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Tue May 06 16:57:23 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue May 06 16:57:23 2014 +0900"
      },
      "message": "tux3: Cleanup/Fix fixed point timestamp\n\nCleanup, then use \"signed\" value to allow negative.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "03112e4772729dd1db69cb70068e7d53b468c2f9",
      "tree": "87b8c950348d14a313ed46ceea867d7dc9343bb8",
      "parents": [
        "f4f78e6788f874a3c6f7d3a038f53fd5182e08ef"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Tue May 06 01:20:36 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue May 06 01:20:36 2014 +0900"
      },
      "message": "tux3: Fix umount race with flusher\n\nWhile umount, do_commit can race with umount. So, this checks if need\nto commit or not. Otherwise, e.g. sb-\u003elogmap can be freed already by\n-\u003eput_super().\n\nAs bonus, if sync/fsync() called when has no dirty inodes, this exits\ndo_commit() immediately.\n\nFIXME:\n- there is no need to commit if normal inodes are not dirty?\n  (there is no case of internal inodes only dirty?)\n- this way may be fragile. -\u003eput_super() should wait to stop flusher?\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "f4f78e6788f874a3c6f7d3a038f53fd5182e08ef",
      "tree": "ee92c24ae5cf0b4c91be23841f213aace2d1a638",
      "parents": [
        "2bd28285aa6cd34beaedc07003846b9cbcca3d73"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 17:47:38 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 17:47:38 2014 +0900"
      },
      "message": "tux3: Remove btree dump method\n\nWe now use the walk.c framework to dump\nIf there is ever a use for this we could possibly add it back\nSome other dumpers like bitmap dump are genuinely useful\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "2bd28285aa6cd34beaedc07003846b9cbcca3d73",
      "tree": "5fc8e3455dfbf2f43ae362a6fe54db18544db94e",
      "parents": [
        "cfba1660b1934477bd49dd79b585b196d8ac3c53"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 17:42:53 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 17:42:53 2014 +0900"
      },
      "message": "tux3: Respell map_region as filemap\n\nThis is arguably the central operation of the filesystem (map\na file to/from backing store) and deserves a more elegant name.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "cfba1660b1934477bd49dd79b585b196d8ac3c53",
      "tree": "5b95c6a7bfda4b390f8e011efa61b50665e64b82",
      "parents": [
        "757bf2cd3db44d4365ed38f0bcf5d067583d71bb"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu May 01 17:22:35 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 17:22:35 2014 +0900"
      },
      "message": "tux3: Make tux_readdir() more robust against invalid f_pos\n\nIf dir f_pos is invalid position, and current tux_readdir() calls\nBUG() as wrong entry.\n\nThis patch checks f_pos and more detail of dir entry (from ext4\nchecker). And additionally, checks f_pos alignment is valid at first.\n\nIf f_pos is invalid clearly, this returns -ENOENT as SuSv4\u0027s readdir()\nsays.\n\nIf directory entry is invalid, converts from tux_zero_len_error() to\njust error message, then skip that block and continue.  [FIXME: If\ndirectory entry is invalid, skips that block, and continue at next\nblock. What is good behavior?]\n\nReported-by: \"Darrick J. Wong\" \u003cdarrick.wong@oracle.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "757bf2cd3db44d4365ed38f0bcf5d067583d71bb",
      "tree": "aa6edec452e5d06d828ab04c24d42023ee37e7ff",
      "parents": [
        "66e06b3693f5a7c2449ed0f2996a96ea3a30c1e5"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Apr 27 15:36:19 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 15:36:19 2014 +0900"
      },
      "message": "tux3: Fix struct bio for kernel v3.14\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "66e06b3693f5a7c2449ed0f2996a96ea3a30c1e5",
      "tree": "48326e39e2051ef461f1745dee038d5aa3a8a946",
      "parents": [
        "c6d82acc178b551dc7af3ed7a7a7a4ec9173b489"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu May 01 17:22:32 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 17:22:32 2014 +0900"
      },
      "message": "tux3: Support mmap write: Fix race of mmap write with write(2) for copy_from_user()\n\nmmap write and write(2) can race.\n\n               cpu0                          cpu1\n       write(2)\n           delta-1 \u003d get_delta()\n\t   remove_suid()\n\t   update_timestamp()\n           write_begin()\n                                         delta++\n                                         mmap write\n                                             lock_page()\n                                             delta-2 \u003d get_delta()\n\t\t\t\t\t     page-B \u003d pagefork(page-A)\n\t\t\t\t\t     unlock_page()\n               get_delta_if_need()\n\t       lock_page()\n\t       page-B \u003d find_get_page();\n\t       pagefork(page-B)\n\n           write_end()\n               put_delta()\n\nIf mmap write and write(2) run in above order, cpu0 see dirty page-B\nfor delta-2, while write(2) is using delta-1.  We should guarantee one\ndoesn\u0027t see data in future delta.\n\nTo fix this race, this (re)takes delta while holding lock_page(). With\nthis change, we guarantee to use latest delta, and fix race.\n\nFIXME: But this way separates transactions of\nupdate_timestamp()/remove_suid()/etc. and first modification to\npage. We would be better to modify data and metadata in same delta\nthough (to make app\u0027s modification and on-disk state more atomic).\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "c6d82acc178b551dc7af3ed7a7a7a4ec9173b489",
      "tree": "d9d07cd100c518d2a097de35d18d1b0b97687338",
      "parents": [
        "e6a05f151161b0dc31068585d5783a93d0fd2661"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sat May 03 11:54:44 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sat May 03 11:54:44 2014 +0900"
      },
      "message": "tux3: Support mmap write: Fix race of mmap write with truncate(2)\n\nmmap write and truncate(2) can race on delta boundary.\n\n               cpu0                                   cpu1\n       delta-1 \u003d get_delta();\n       truncate(2)\n                                              delta++\n                                              mmap write\n                                                  delta-2 \u003d get_delta();\n                                                  page-B \u003d pagefork(page-A);\n           tux3_truncate_inode_page(page-B);\n\nIf mmap write and truncate(2) ran by above order, truncate(2) see\ndirty page for delta-2. We should guarantee one doesn\u0027t see data in\nfuture delta.\n\nTo avoid this race, this introduces -\u003etruncate_lock. And protects mmap\nwrite while truncate(2) is running.\n\nFIXME: This race would be rare cases in real usage though, more fine\ngranulate lock would be better.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "e6a05f151161b0dc31068585d5783a93d0fd2661",
      "tree": "9884f4d08f92b78de991619893d1d815995a06ae",
      "parents": [
        "83ea9edc6532b2e379fd6b1031ffcc2b4db9563e"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Apr 27 15:36:14 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 15:36:14 2014 +0900"
      },
      "message": "tux3: Support mmap write: Check overflow of round_up(newsize, PAGE_SIZE)\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "83ea9edc6532b2e379fd6b1031ffcc2b4db9563e",
      "tree": "0d37d302e27732d3a4dcc7d2e82560fe6467caf0",
      "parents": [
        "a5bb7eae2af5ef12fa5ae63db78341ff195e345b"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Apr 27 15:36:12 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 15:36:12 2014 +0900"
      },
      "message": "tux3: Support mmap write: Add support of mlock page handling\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "a5bb7eae2af5ef12fa5ae63db78341ff195e345b",
      "tree": "4e8a538c19eafb08f7c8761b061ed668d156a616",
      "parents": [
        "0ffba0cbd35ccb13e1961e006eb6190a44f2c5d6"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Apr 27 15:36:11 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 15:36:11 2014 +0900"
      },
      "message": "tux3: Support mmap write: Fix race of mmap write with write(2) on delta boundary\n\nClear writable to protect oldpage from following mmap write race.\n\n       cpu0                          cpu1                   cpu2\n                                                          [mmap write]\n                                                          mmap write(old)\n                                                              page fault\n                                    [backend]                 dirty old\n                                    delta++\n   [page_fault]\n   page fork\n       [*A]\n                                                          mmap write(old)\n                                                              no page fault\n       copy_page(new, old)                                    modify page\n       replace_pte(new, old)\n                                    flusher\n                                    page_mkclean(old)\n\nThere is delay between delta++ and page_mkclean() for I/O. So,\nwhile cpu0 copying data on page by pagefork, another cpu (cpu2)\ncan change data on the same page. If this race happens, new and old\npage can have different data.\n\nTo fix this race, we should make PTE read-only before start pagefork\nat [*A] place.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "0ffba0cbd35ccb13e1961e006eb6190a44f2c5d6",
      "tree": "9a9e8590561675babe586f08c66bef011ef988b6",
      "parents": [
        "4365b0d9857a5808ce70191f703984ee58544358"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Apr 27 15:36:09 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 15:36:09 2014 +0900"
      },
      "message": "tux3: Support mmap write: Fix outside of i_size handling\n\nIf there are pages outside i_size, we have to clear dirty and remove\nthose from I/O candidate.\n\nNow, tux3_clear_page_dirty_for_io() possibly dirty page again by\ncurrent frontend delta. But, we should not dirty pages in backend, and\nwe should simply discard pages outside i_size.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "4365b0d9857a5808ce70191f703984ee58544358",
      "tree": "4b0a9e9988b3c80b8ccb095c794205329139a319",
      "parents": [
        "54b3c445821b2546763094bf2f629e7902665024"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu May 08 17:46:56 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 08 17:46:56 2014 +0900"
      },
      "message": "tux3: Support mmap write: Add initial mmap write support\n\nTo support mmap write, we have to care about stabled pages (pages on\nflushing delta). I.e. once pages are decided as flushing to backing\nstorage, we should not leak modification/truncation of pages in\nfrontend to flushing delta (this provides reliability like\ndata\u003djournal).\n\nTo provide this, we do pagefork the page in previous delta to modify\nin frontend.\n\nBefore issue I/O, PTE of the page become read-only. Then, we will\nnotice mmap write via page fault (-\u003epage_mkwrite() hook). In\n-\u003epage_mkwrite(), if page was stabled (dirtied for previous delta, or\nunder I/O), we do pagefork the page to new page, switch PTE to point\nnew page, and make PTE writable.\n\nWith this, stabled page is not modified, and frontend can continue\nmodification to new page without waiting I/O.\n\n[FIXME: -\u003epage_mkwrite() can\u0027t support pagefork directly\n(-\u003epage_mkwrite() is assuming the page in PTE is not modified.). So,\nthis patch switch PTE to new page, and make writable in\n-\u003epage_mkwrite(). Then, retry page fault again, and resolve page fault\nby switched PTE for new page.]\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "54b3c445821b2546763094bf2f629e7902665024",
      "tree": "14e3018a596b0216b088147d0d49117ef13a41c3",
      "parents": [
        "6cc4b7554124f72798791d2e241dd35b53956def"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu May 01 17:22:26 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 17:22:26 2014 +0900"
      },
      "message": "tux3: Support mmap write: Add unmap page to truncate path\n\nTo support mmap write, we have to teach truncate about unmap page on\ntruncate pages. We can\u0027t use pagecache truncation in core kernel,\nbecause core kernel doesn\u0027t know about pagefork (core kernel try to\nmodify stabled page, and try to truncate pages under I/O).\n\nThis adds unmap_mapping_range() for truncated frontend pages.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "6cc4b7554124f72798791d2e241dd35b53956def",
      "tree": "220af22fe20df9c694030d7e4d53b0e626f69e66",
      "parents": [
        "90b49960c5736a5dd3d73a633925330a7a5f3f26"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 17:37:56 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 17:37:56 2014 +0900"
      },
      "message": "tux3: Make block allocation goal depend on inode number and logical file offset\n\nMake block allocation goal depend on inode number and logical file offset.\nIf the inode is outside the volume block range, \"fold\" it by masking against\nthe volume mask, which is the smallest binary number greater than the volume\nsize. If still outside, subtract half the volume mask so that it is inside.\nVolume coverage of masked values is not perfectly even, but close enough.\nThe purpose of masking this way is to resist fragmentation if the volume size\nchanges.\n\nUse linear allocation without extrapolation when inodes are being written in\nsequential order. If this is too far from the extrapolated goal, then use the\nextrapolated goal instead.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "90b49960c5736a5dd3d73a633925330a7a5f3f26",
      "tree": "384521d5c1e6b2d84bacb6a6142e6bc086afd3af",
      "parents": [
        "137f3eaefbe51fd16880b807de1e299e13a5c0b4"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 17:37:15 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 17:37:15 2014 +0900"
      },
      "message": "tux3: Try to create directories in less congested block groups\n\nTry to create directories in less congested block groups. Choose a congestion\nthreshold based on directory depth (in root or not) and volume fullness. For\ndeeper directories and fuller volumes, accept fuller groups for the inode\nnumber goal. Check a limited number of groups to find a good fit, otherwise\njust use the extrapolated inum goal.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "137f3eaefbe51fd16880b807de1e299e13a5c0b4",
      "tree": "2da40dde023a4c78d0c9636d5a120f7df11c0727",
      "parents": [
        "de1550ac7128f4d337fd1b5071168d2bb4fc1b3f"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 16:32:26 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu May 01 16:32:26 2014 +0900"
      },
      "message": "tux3: Export countmap_used\n\nThis will be used by directory create congestion avoidance algorithm.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "de1550ac7128f4d337fd1b5071168d2bb4fc1b3f",
      "tree": "7bfe20b6c49c83f45fc0c01b8b38d5499bfe6bc4",
      "parents": [
        "b29f7f2be29b28ff6429e3cc17162344d9e7c409"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Mon Apr 28 12:28:06 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Mon Apr 28 12:28:06 2014 +0900"
      },
      "message": "tux3: Fix alloc_cursor() locking for read\n\nWhile frontend waiting lock for btree, backend can add the new depth.\n\n          frontend                          backend\n\n    alloc_cursor(btree, 0)\n                                      btree_write()\n                                          /* adds new depth */\n    btree_probe()\n\nIf this race happens, cursor doesn\u0027t have enough space for depth. This\npatch fixes by taking lock before allocating cursor.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "b29f7f2be29b28ff6429e3cc17162344d9e7c409",
      "tree": "fe3a718c13e041a06101b46cbf1c4275a1359747",
      "parents": [
        "1efa49b613e70cb2790b2558d064b9ce44ec1ae2"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 22:39:31 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 22:39:31 2014 +0900"
      },
      "message": "tux3: Introduce direct extent as alternative to btree root\n\nFor a relatively small file that can be allocated linearly without\nholes the btree root is overloaded as a direct extent pointer. On\nmedia, the high bit of the btree depth is used to indicate that\nthe root is actually a direct extent. This takes advantage of the\nfact that the data paths for direct extent and btree root are\nnearly the same. Whether this is the best approach is a good\nquestion. We should try this, see how it performs, then consider\nthe ideal solution.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "1efa49b613e70cb2790b2558d064b9ce44ec1ae2",
      "tree": "f7d4b43934fe177eb2101fac66134e564d53b471",
      "parents": [
        "2d056048197df944ef4e2130fbe75a8c463e7e96"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Apr 27 15:30:44 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 15:30:44 2014 +0900"
      },
      "message": "tux3: Allow btree to point leaf directly\n\nNow, btree can\u0027t point the leaf directly. So, this teaches to point\nthe leaf directly to reduce metadata size for small file.\n\n[FIXME:\n- this is still use btree_alloc_empty_leaf() to preallocate a leaf\n(this might be better to move into btree_write()).\n- btree_chop() still leaves the empty leaf after full truncation. We\n  would be better to remove the empty leaf.]\n\nThis is measure of this improvement.\n\n[before]\n# tar xf linux-3.13.7.tar\nreal\t0m59.512s\nuser\t0m0.348s\nsys\t0m2.920s\n# sync\nreal\t2m54.447s\nuser\t0m0.348s\nsys\t0m2.948s\n\n[after]\n# tar xf linux-3.13.7.tar\nreal\t0m50.966s\nuser\t0m0.384s\nsys\t0m2.856s\n# sync\nreal\t2m25.759s\nuser\t0m0.384s\nsys\t0m2.884s\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "2d056048197df944ef4e2130fbe75a8c463e7e96",
      "tree": "ffd3a57d8d2174a7120be0ead767411c0cbb924a",
      "parents": [
        "5e25f1d866bf1c0ee3e57c4a4ff4421d80d4a1b5"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Apr 27 15:27:18 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 15:27:18 2014 +0900"
      },
      "message": "tux3: Change root.depth mean to include leaf level\n\nNow, root.depth is not including leaf level. I.e. depth \u003d\u003d 1 means\nbnode+leaf. So, this doesn\u0027t allow btree has only one leaf.\n\nTo remove confusable state, this change root.depth mean.\n\nI.e.\n\ndepth \u003d\u003d 0 - empty btree\ndepth \u003d\u003d 1 - only has a leaf\ndepth \u003d\u003d 2 - a bnode + leaves\n\nWith this, we can make btree has only one leaf.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "5e25f1d866bf1c0ee3e57c4a4ff4421d80d4a1b5",
      "tree": "27dc64d2c55d28a5ba7ccbf2650e88758c1ab98d",
      "parents": [
        "2e5ca8cd04f871a6e36df806f04dee3bc95d54ed"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 18:14:35 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 18:14:35 2014 +0900"
      },
      "message": "tux3: Respell dleaf2 as dleaf\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "2e5ca8cd04f871a6e36df806f04dee3bc95d54ed",
      "tree": "8e09ffb1a973023835bab202b9bfb064d2a5a268",
      "parents": [
        "be735d8a0acacc5c901396d4a618be7043e5a1a9"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 15:23:27 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 15:23:27 2014 +0900"
      },
      "message": "tux3: Rename dleaf2 files as dleaf\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "be735d8a0acacc5c901396d4a618be7043e5a1a9",
      "tree": "9ba7319ff5690faf592307e321bd06917024c645",
      "parents": [
        "3351d81d41fd072518c435a937e22815909b1f97"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 15:23:24 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Apr 27 15:23:24 2014 +0900"
      },
      "message": "tux3: Remove dleaf1 data leaf format\n\nThe idea of dleaf1 was to implement a compressed leaf format with\nabout 40% more extents per block but implementation details were\ntoo complex. If we ever want this and have time to make it work\nproperly we can add it back.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "3351d81d41fd072518c435a937e22815909b1f97",
      "tree": "c646db4d75f990a8968e17480ebccf4a5d41bfe3",
      "parents": [
        "1dcad62578cc51072e7adb8d9d8f6caef384337c"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Tue Apr 08 09:32:38 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue Apr 08 09:32:38 2014 +0900"
      },
      "message": "tux3: Remove malloc()/free() wrapper\n\nNow, we are using malloc()/free() wrapper to share codes with\nuserland. However, kernel APIs has more features than userland.\n\nSo, this uses kernel APIs directly, and instead, emulates kernel APIs\nin userland.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "1dcad62578cc51072e7adb8d9d8f6caef384337c",
      "tree": "256b63a52cc87831f568eaa2e20b3db6f9bcf236",
      "parents": [
        "6d50f7f63826cde6a755458cea9a3a8bbeb25b99"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Mon Apr 21 22:18:07 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Mon Apr 21 22:18:07 2014 +0900"
      },
      "message": "tux3: Remove obsoleted two FIXMEs\n\nThose are added for future at front/back separation. But those seems\nnot useful. So removes those, instead to enable.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "6d50f7f63826cde6a755458cea9a3a8bbeb25b99",
      "tree": "855debd6524c8be8cd22e9e5a5a1d1be4094a157",
      "parents": [
        "9d190848f26c1b07332d9872cf973f09bf2746f7"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Mar 16 14:39:03 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Mar 16 14:39:03 2014 +0900"
      },
      "message": "tux3: Fix countmap_load() race with forked buffer\n\nIf countmap_used() was used in frontend, pin buffer can have forked\nbuffer.\n\nSo, we have to use blockread() if pin has forked buffer.\n\nFIXME: or we should use bigger locking to prevent to set forked buffer\nto pin?\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "9d190848f26c1b07332d9872cf973f09bf2746f7",
      "tree": "4d0ee0d7e723d23e7ed9de2f8f169a658bb96701",
      "parents": [
        "9b8da2c37b75acb68de614ce9a0340303db92226"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Tue Mar 25 22:55:26 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue Mar 25 22:55:26 2014 +0900"
      },
      "message": "tux3: Fix deferred inode deletion locking\n\nWe defer inode deletion from itree and in-core inode destroy. To\ndefer, we dirty inode when inode refcount became 0.\n\nBut, iput_final() is not expecting to dirty inode. So, for now, we are\nusing a dirty way to defer. I.e. set dirty inode and return false from\n-\u003edrop_inode(). (this is fragile, and can have issue)\n\nWell, so, to dirty inode, we want to call mark_inode_dirty(). But\nmark_inode_dirty() is not callable from iput_final() (by reason of\nlocking order).\n\nTo workaround this locking order, we unlock inode-\u003ei_lock\ntemporary. But unlocking inode-\u003ei_lock makes chance to freeing inode\nagain by cache reclaim. To avoid, cache reclaimer frees the inode, we\nset I_WILL_FREE before drop inode-\u003ei_lock.\n\n[FIXME:\n- -\u003edrop_inode() can\u0027t prevent to be freed while umount.  So, if vfs\n  (like fsnotify) is taking refcount of inode while umount, inodes may\n  not be flushed by last sync_system(), and we may have problem.\n\n- I_WILL_FREE affects to igrab which we don\u0027t want to affect.]\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "9b8da2c37b75acb68de614ce9a0340303db92226",
      "tree": "2fa4c9e116295dd6626e81a2ef84ba202645dd02",
      "parents": [
        "6c7a4b82b346010288d15f9addf11d7116d777e3"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sat Mar 22 04:54:05 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sat Mar 22 04:54:05 2014 +0900"
      },
      "message": "tux3: Optimize deferred inums search\n\nFor now, we are using inode hash to find, deferred allocated\ninums. But, loop of find_inode() consumes cpu and slow on some\nsituations.\n\nTo fix, this replaces inode hash with simple deferred inums bitmap.\n\nstruct tux3_idefer_map is hash table.\nstruct tux3_idefer_node is bitmap for BITMAP_SIZE bits.\n\n\"node\" has index and count, and hashed into \"map\".\n\nWith this simple bitmap, we can find free inum (skip deferred inums)\nby find_next_zero_bit().\n\nAnd dbench become about from 50MB/s to 400 MB/s. (For now, it seems to\nbe fast)\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "6c7a4b82b346010288d15f9addf11d7116d777e3",
      "tree": "4440eeec21a5960bbe14770bc1ad19885f3579db",
      "parents": [
        "d4d602f7e0862fe7302f94d2a3533dda224d5f88"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Mar 16 03:07:23 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Mar 16 03:07:23 2014 +0900"
      },
      "message": "tux3: Call tux3_get_current_delta() outside loop\n\ntux3_get_current_delta() access get_current(), and it is not free\noperation.\n\nSo, this move tux3_get_current_delta() to outside loop.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "d4d602f7e0862fe7302f94d2a3533dda224d5f88",
      "tree": "f7a3de30a933f02291d7525941532ac15cd63598",
      "parents": [
        "ddeafc38ef0734f5a7f4bf0892eaf7013f6a5e36"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sat Mar 22 01:10:39 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sat Mar 22 01:10:39 2014 +0900"
      },
      "message": "tux3: Fix bitmap update for logblock itself in replay\n\nThe log block can use the physical address which is freed by\nreplay. So, updating bitmap for logblock itself should be after\nlogical update (stage2) replay.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "ddeafc38ef0734f5a7f4bf0892eaf7013f6a5e36",
      "tree": "020faa2bd88147c6daca164cebfeebfb187922d7",
      "parents": [
        "fdba06fdccab595f23190d2927da90cc95e05053"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sat Mar 01 18:23:14 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sat Mar 01 18:23:14 2014 +0900"
      },
      "message": "tux3: Fix tux3_truncate_inode_pages_range() overflow handling\n\nAt 3.11, truncate_inode_pages_range() was changed to support partial\npage range. But it doesn\u0027t handle corner cases correctly.\n\nloff_t is signed, so loff_t \u003e\u003e shift_bits is invalid operation.\nSo, we have to care loff_t doesn\u0027t overflow signed.\n\nThis assumes loff_t \u003e\u003e PAGE_CACHE_SHIFT doesn\u0027t overflow pgoff_t (this\nis true if loff_t \u003c MAX_LFS_FILESIZE).\n\nWith this assumption, this fix overflow cases by just casting to (u64).\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "fdba06fdccab595f23190d2927da90cc95e05053",
      "tree": "909f9850a3e0939f35657ad5f43570189f3c2f30",
      "parents": [
        "8b931142473b17386c96e4bb301c0dc181c7e4dc"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Mar 07 17:56:35 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Mar 07 17:56:35 2014 +0900"
      },
      "message": "tux3: Drop codes for older than kernel v3.12\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "8b931142473b17386c96e4bb301c0dc181c7e4dc",
      "tree": "d6ddf269dc5aed538451d6c8626fc58444a26d4f",
      "parents": [
        "54bffed5a01f9aad6df2a0205a055f6336788e69"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:59 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:59 2014 +0900"
      },
      "message": "tux3: Fix __tux3_set_page_dirty() for kernel v3.14\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "54bffed5a01f9aad6df2a0205a055f6336788e69",
      "tree": "7344b3751db864a428ef3a164d5074bae5dadb6a",
      "parents": [
        "c4068c5bde6baac70df53147c8d3ba2b70836323"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:57 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:57 2014 +0900"
      },
      "message": "tux3: Update clone_page() for kernel kernel v3.13\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "c4068c5bde6baac70df53147c8d3ba2b70836323",
      "tree": "75bd94223bd77ed950c8e05fb610f5353ac558db",
      "parents": [
        "b1cf06042e1014d7f564f718f73ff2730964fb7c"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu Mar 06 20:09:29 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu Mar 06 20:09:29 2014 +0900"
      },
      "message": "tux3: Update __tux3_test_set_page_writeback() for kernel v3.12\n\nNow, cgroup support I/O bandwidth.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "b1cf06042e1014d7f564f718f73ff2730964fb7c",
      "tree": "7feb55f59bdb059829ac2eb9723ff1033e7f8f9a",
      "parents": [
        "ee9c0e169a4fd88ebdf627a8b2c64f26e20a3bbd"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:56 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:56 2014 +0900"
      },
      "message": "tux3: Update tux3_file_aio_write() for kernel v3.12\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "ee9c0e169a4fd88ebdf627a8b2c64f26e20a3bbd",
      "tree": "a411e331dbc107e7cd90d890f4f1dc261e64994d",
      "parents": [
        "7609609da2fc885f3c36afaf07a21cb203a40645"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Feb 23 23:18:01 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Feb 23 23:18:01 2014 +0900"
      },
      "message": "tux3: Fix truncate_pagecache() for kernel v3.12\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "7609609da2fc885f3c36afaf07a21cb203a40645",
      "tree": "65bd88aa22b7f9fc71140eb1d8544d324137c0a0",
      "parents": [
        "e622a12fb7500f7fabb44900c1d86ce172b52f92"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:55 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:55 2014 +0900"
      },
      "message": "tux3: Fix flusher for kernel v3.11\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "e622a12fb7500f7fabb44900c1d86ce172b52f92",
      "tree": "69c4e6c2d184a5406b94aac6a0e6d6219b8350c0",
      "parents": [
        "d3d10769ee3780b6366cda3c92311be542628ac0"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:54 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:54 2014 +0900"
      },
      "message": "tux3: Add optional handlers in kernel v3.11\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "d3d10769ee3780b6366cda3c92311be542628ac0",
      "tree": "2adf0b8e584fbcb86ee7ff5cc9dd69ee87035321",
      "parents": [
        "e1c8266273fb3cf1b4b04144f5ed3f117f1bfc7a"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:54 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:54 2014 +0900"
      },
      "message": "tux3: Fix newpage_add_lru() for kernel v3.11\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "e1c8266273fb3cf1b4b04144f5ed3f117f1bfc7a",
      "tree": "cff58f350aeacbbdba3825bf611c30544ae43e40",
      "parents": [
        "7055cc72a966174e3e6d08abe9626ec2b5560c29"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:53 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:53 2014 +0900"
      },
      "message": "tux3: Add dir_relax() to tux_readdir() for kernel v3.11\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "7055cc72a966174e3e6d08abe9626ec2b5560c29",
      "tree": "bc868f11f601bb69745b64f6d83d50d471f90e44",
      "parents": [
        "42bb9a3cf9b33323e3b0638849fb00ddf1c1277f"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:52 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:52 2014 +0900"
      },
      "message": "tux3: Fix tux_readdir() for kernel v3.11\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "42bb9a3cf9b33323e3b0638849fb00ddf1c1277f",
      "tree": "98f3a7cee10b483c04c0d7b7d4f240d3e9082f7d",
      "parents": [
        "297282e2163090561ef34c95a674818d994d03f4"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:52 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:52 2014 +0900"
      },
      "message": "tux3: Fix tux3_invalidatepage() for kernel v3.11\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "297282e2163090561ef34c95a674818d994d03f4",
      "tree": "a00dd0f8e014026c3bc9e3d7ec16d78b01c1b1c4",
      "parents": [
        "ae8c2c541b3c8ac9b7fefc7fd6fc9c2051392b30"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:51 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:51 2014 +0900"
      },
      "message": "tux3: Fix tux3_file_splice_write() for kernel v3.10\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "ae8c2c541b3c8ac9b7fefc7fd6fc9c2051392b30",
      "tree": "b8f62afbca2763e9cc35dcc8fb68a7570fe8f05e",
      "parents": [
        "a41a72645ffa366fba9cce5354a8933e6718a31a"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sat Mar 22 01:10:33 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sat Mar 22 01:10:33 2014 +0900"
      },
      "message": "tux3: Fix order of LOG_BNODE_FREE dirty cancel in replay\n\nIf log was following order,\n\n\tLOG_BNODE_FREE(block-A)\n\tLOG_BNODE_REDIRECT(old, block-A)\n\ndirty state cancel of LOG_BNODE_FREE must be before LOG_BNODE_REDIRECT\nreplay.\n\nBut, current code is canceling dirty state in stage2. So, regardless\nof LOG_BNODE_FREE order, LOG_BNODE_FREE cancels dirty state in\nLOG_BNODE_REDIRECT of stage1\n\nThis moves the dirty cancel to stage1 to respect order of log\nrecords. Also, LOG_BNODE_MERGE has to be fixed.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "a41a72645ffa366fba9cce5354a8933e6718a31a",
      "tree": "ff4be1a31ee93466d1a6ecf947aa8a4301fab723",
      "parents": [
        "a9e776f34fba098c79ad1533bc27b1944b5bc2f4"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Mar 02 17:42:06 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Mar 02 17:42:06 2014 +0900"
      },
      "message": "tux3: Change return valid of -\u003eleaf_sniff()\n\n-\u003eleaf_sniff() return value is confusable. So, this changes it as\n\n\t0  - valid\n\t-1 - invalid\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "a9e776f34fba098c79ad1533bc27b1944b5bc2f4",
      "tree": "e5b4c9d83dec031721c27022aa2c67cbf5df7cde",
      "parents": [
        "414ba309bdbf24623ace862bc32595a42bc03d87"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Mar 02 17:40:06 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Mar 02 17:40:06 2014 +0900"
      },
      "message": "tux3: Fix dleaf2_sniff() return value\n\nFor right now, sniff has to return for\n\n\t1 - valid\n\t0 - invaid\n\nHowever, dleaf2_sniff() returns wrong values.\n\nTherefore, dleaf-\u003ecount \u003d\u003d 0 is possible if dleaf2 was merged into\nanother dleaf2.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "414ba309bdbf24623ace862bc32595a42bc03d87",
      "tree": "4d9517c1354285b8d511142e56a3cc0421d35f11",
      "parents": [
        "b2b30e83b4942c26b502f3dfab12c78eb428a1fd"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Sun Feb 23 23:12:41 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Feb 23 23:12:41 2014 +0900"
      },
      "message": "tux3: Fix overflow case on truncate path\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "b2b30e83b4942c26b502f3dfab12c78eb428a1fd",
      "tree": "4dad0995712dcb8fa5d0c0d65ab7b2ddd0ad9654",
      "parents": [
        "0729d895b226f85568a5b086dd57599dfcdcc3f3"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 22:45:10 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 22:45:10 2014 +0900"
      },
      "message": "tux3: Fix calling bdi_destory() more than one in tux3_exit_flusher()\n\n__tux3_put_super() can be called more than one time if error happened\nin tux3_fill_super().  So, tux3_exit_flusher() have to be safe for\ncalling multiple times.\n\nBut, current tux3_exit_flusher() is not safe. To fix it, this checks\nwhether vfs_sb(sb)-\u003es_bdi is having \u0026sb-\u003ebdi (bdi_destory() sets s_bdi\nto default_backing_dev_info).\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "0729d895b226f85568a5b086dd57599dfcdcc3f3",
      "tree": "ecbf1bba1f28021b0241f7a1fdb4667c28dee52f",
      "parents": [
        "4c93ca78668d3a8098489a232613f2d87951fee3"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 22:36:31 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 22:36:31 2014 +0900"
      },
      "message": "tux3: Fix O_SYNC|O_APPEND syncing the wrong range on tux3_file_aio_write()\n\nIf O_APPEND, pos is changed from original, but tux3_file_aio_write()\nis still using original pos as baseline.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "4c93ca78668d3a8098489a232613f2d87951fee3",
      "tree": "78f415c94e02ef0a01684e256362025fb46f065b",
      "parents": [
        "984289419b59cafe0d3e46b490105947b18a7366"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:50 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:50 2014 +0900"
      },
      "message": "tux3: Remove blk_{start,finish}_plug() on tux3_file_aio_write()\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "984289419b59cafe0d3e46b490105947b18a7366",
      "tree": "b3e1ad77cf3869d8e8703af22daeac5da9886723",
      "parents": [
        "9eac49c1499f611590324fb9ce914726771ef9dd"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Feb 21 04:02:35 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Feb 21 04:02:35 2014 +0900"
      },
      "message": "tux3: Use i_size_read() in kernel\n\nIf we are not holding inode-\u003ei_mutex, we should use i_size_read().\nBecause inode-\u003ei_size is 64bits, so read can race with write on 32bits\narch.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "9eac49c1499f611590324fb9ce914726771ef9dd",
      "tree": "b0b5acd7c5471371634d08095c71ecb3c0f63ba9",
      "parents": [
        "e04c640481caaa0ce6248495e27ea2641eb23bdf"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue Feb 18 01:45:21 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue Feb 18 01:45:21 2014 +0900"
      },
      "message": "tux3: Add locking for countmap access\n\nMultiple frontend tasks need to access countmap for inode number\nlayout heuristics.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "e04c640481caaa0ce6248495e27ea2641eb23bdf",
      "tree": "e0c39f07cc3a594f8e70a9d0368c52e562a5924f",
      "parents": [
        "422ea363ead839dcbcd9533ee401d9df836d22a9"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Mon Feb 17 23:32:18 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Mon Feb 17 23:32:18 2014 +0900"
      },
      "message": "tux3: Default some tracing output to off to reduce noise in\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "422ea363ead839dcbcd9533ee401d9df836d22a9",
      "tree": "24e2776d468a40bde0778caac3e22c696c5efbfd",
      "parents": [
        "6bbb63cfa5b6a678e9538c1be092084dc42b354e"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue Feb 18 00:43:20 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue Feb 18 00:43:20 2014 +0900"
      },
      "message": "tux3: Reorder system inodes to make root dir highest\n\nThis gives root dir the same layout as other directories with\nlinked children immediately following  parent inode number\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "6bbb63cfa5b6a678e9538c1be092084dc42b354e",
      "tree": "ba253453e244b7fb95d09b7c561435205b3b53f3",
      "parents": [
        "43b8585b04a1049c1dde8cb001e6ba5fba57933e"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 04:09:26 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 04:09:26 2014 +0900"
      },
      "message": "tux3: Inode number extrapolation heuristics\n\nThe idea is to make directory order similar to inode tree order,\nso traversing a directory in physical order accesses the inode\ntable roughly in linear order.\n\nOn create, the inode number goal is chosen by extrapolating from\ndirectory entry position in the directory file. This will tend to\npreserve linear order even when a directory entry for a new inode\nis created in a position previously emptied by a delete. The\nexact correspondence is affected by name length, so that longer\nnames will create bigger gaps in the inode table. We want to\nleave some gaps in the inode table anyway, so this is unlikely to\nbe a serious problem. Name length will not affect the relative\norder of inodes.\n\nThere is some attempt to cluster non-directory inodes tightly\ntogether, using a global next inode variable, set to one more\nthan the last chosen inode number. This is used as the inode\nnumber goal, unless it is far away from the extrapolated goal,\nin which case the latter is preferred\n\nThese heuristics do not include sensitivity to congestion and do\nnot attempt to spread directories out in a young volume. Actual\nfile size and directory population may be far different from the\nassumptions used in the extrapolation. This may cause excessive\nsearching, more fragmentation and less temporal correlation of\nblock updates. These deficiencies will be addressed later.\n\nThe base for extrapolation is the parent inode. This may turn\nout to be a bad choice due to congestion in an aged volume. It\nis planned to be able to override that initial choice by a goal\nattribute.\n\nThe usage sb-\u003enextinum variable is racy and should be addressed\nbut is unlikely to cause problems because of the distance check\nabove.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "43b8585b04a1049c1dde8cb001e6ba5fba57933e",
      "tree": "beeba71215ceadf6320df8961e8791f17b11d43e",
      "parents": [
        "f81d615f293612ee9af215001455838df87a8e2e"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue Feb 18 03:20:20 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue Feb 18 03:20:20 2014 +0900"
      },
      "message": "tux3: Do not need to check for nextinum wrap\n\nSearch for inum already wraps if necessary\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "f81d615f293612ee9af215001455838df87a8e2e",
      "tree": "98f0271ee6b12234b6b515b5afbfba271a13c5ca",
      "parents": [
        "c78577d245b1584648d6757006883a48b8be498b"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Tue Feb 18 03:20:10 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue Feb 18 03:20:10 2014 +0900"
      },
      "message": "tux3: Fix page_symlink() order in __tux3_symlink()\n\nWe have to call page_symlink() after inode was initialized.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "c78577d245b1584648d6757006883a48b8be498b",
      "tree": "bbb3145b021d824265b72aeaac33eafa311ef7d4",
      "parents": [
        "6e383b6f8990200855bdba4f767a74f93fcdfe24"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Wed Feb 19 03:14:09 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:14:09 2014 +0900"
      },
      "message": "tux3: Fix error path in tux_create_dirent()\n\nWe have to delete entry if tux_assign_inum() failed.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "6e383b6f8990200855bdba4f767a74f93fcdfe24",
      "tree": "a558d04c670000ec46cb79386074a11cc117ad05",
      "parents": [
        "457f803a331c8ce86158ea0594ace9a37245096b"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Wed Feb 19 02:52:32 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 02:52:32 2014 +0900"
      },
      "message": "tux3: Fix tux_assign_inum() error path\n\nIf inode was failed to initialize, we need special care to drop the\ninode.\n\n- If nlink \u003d\u003d 0, we use deferred inode deletion\n- If inode is not hashed, the inode is not dirtied and doesn\u0027t wake up flusher\n\nTo drop uninitialized inode, this adds special code to drop carefully.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "457f803a331c8ce86158ea0594ace9a37245096b",
      "tree": "2cbe4afced1f9191dff5dcbc5b0220f4b0c2f626",
      "parents": [
        "47a19221e7dd10728412a59280605ed1cb7cf08d"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:08:37 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:08:37 2014 +0900"
      },
      "message": "tux3: tux_assign_inum takes goal as a parameter\n\nThe inum layout policy must run in a context where it has the\nparent directory and position in the directory file available,\nso do not try to do that in alloc_inum, instead just give it\nthe goal we really want. These are the same parameters and\nsemantics as tux_assign_inum, so use that name.\n\nA stack variable plays better with the multitasking frontend,\nthan a global variable, but the sb-\u003enextinum update in dir.c\nis now racy, so do something about that. The race is mostly\nharmless, it might be enough just to make sb-\u003enextinum atomic.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "47a19221e7dd10728412a59280605ed1cb7cf08d",
      "tree": "dc358add0959492831ceb8642d2467b0e6e58909",
      "parents": [
        "2cf5a1ee41b90b512210ead4b74df173cd445b0b"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 02:52:28 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 02:52:28 2014 +0900"
      },
      "message": "tux3: Remove tux_create_inode\n\nRefactoring towards choosing inode after creating directory entry.\nThese two functions have the same interface and semantics so remove one of\nthem.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "2cf5a1ee41b90b512210ead4b74df173cd445b0b",
      "tree": "eb558ebc7383b4e993ba0e8efa07bc049aee2400",
      "parents": [
        "5134138d223dc2500a22c97f1ce0697f162aa8da"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:08:26 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:08:26 2014 +0900"
      },
      "message": "tux3: Choose and assign inum after creating dirent\n\nRefactoring towards choosing inode after creating directory entry.\nIf tux_create_dirent sees an inode with TUX_INVALID_INO then it knows this\nis an inode create and it must choose the inode number. This is a slightly\nobscure way to do things, so insert a paranoia check in the create_link\ncaller, where it is not completely obvious that the inode always has a valid\ninode number.\n\nAt this point the inode choosing is done after the directory entry create, so\nwe have the opportunity to use directory entry position as part of the inode\nnumber selection heuristics.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "5134138d223dc2500a22c97f1ce0697f162aa8da",
      "tree": "2d12af951269768ed397cdc87b4ef4d8eb12dd35",
      "parents": [
        "0c34f6eb877bf1c5b5a5369b0b1dba9895022a54"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 02:52:21 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 02:52:21 2014 +0900"
      },
      "message": "tux3: Pass inode instead of inum and mode to\n\nRefactoring towards choosing inode after creating directory entry.\nInode number search will happen in tux_create_dirent, so it needs to know the\ninode. This requires updating tests to pass inodes instead of inum and mode.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "0c34f6eb877bf1c5b5a5369b0b1dba9895022a54",
      "tree": "c94cf928e2600b16acf11c01e6c755b454c2ebe1",
      "parents": [
        "706c8bf7ab11cec8a7b0666718d0c1e2d89c1b33"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Mon Feb 17 01:10:44 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Mon Feb 17 01:10:44 2014 +0900"
      },
      "message": "tux3: Remove __tux_add_dirent\n\nRefactoring towards choosing inode after creating directory entry.\nRename is a unique situation that does not need inode instantiation so clarify\nthat by calling tux_create_dirent directly. The helper then has only one\ncaller, so remove it.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "706c8bf7ab11cec8a7b0666718d0c1e2d89c1b33",
      "tree": "08c9f539a2b55524ef28042d019af66b20a3e1a4",
      "parents": [
        "ad1a6637bdd8a003d472b414ffb3f6652f4e3a6b"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Mon Feb 17 00:39:45 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Mon Feb 17 00:39:45 2014 +0900"
      },
      "message": "tux3: Factor out tux_assign_inum to assign inum separately\n\nRefactoring towards choosing inode after creating directory entry.\nExpose an operation for choosing and setting inode number suitable for\ncallers outside inode.c\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "ad1a6637bdd8a003d472b414ffb3f6652f4e3a6b",
      "tree": "01477889b087c009d75ba885cba40d3d832bfe35",
      "parents": [
        "e4de52c5f647ae0987ffbfaf0f5989d4ac77d5d5"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Feb 16 03:40:45 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sun Feb 16 03:40:45 2014 +0900"
      },
      "message": "tux3: Separate inode create from choosing inum\n\nRefactoring towards choosing inode after creating directory entry.\nStart reorganizing namei.c to expose the inode number assignment separately\nfrom inode create.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "e4de52c5f647ae0987ffbfaf0f5989d4ac77d5d5",
      "tree": "c6eb689656acd163a526f931302aee236ef476fe",
      "parents": [
        "6474f14bf188127b0c1773b06c9cdc794af87b99"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 02:46:22 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 02:46:22 2014 +0900"
      },
      "message": "tux3: No longer need inum and mode in create_dirent caller\n\nRefactoring towards choosing inode after creating directory entry.\nNo longer need to pass the target details to directory create. The parameter\nlist ends shorter by one, always nice with long parameter lists.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "6474f14bf188127b0c1773b06c9cdc794af87b99",
      "tree": "34ae5e1ac434d2be116be7a97e237465eed6d3ba",
      "parents": [
        "693b8b6f5c9e3827cc35f156bc5d5e788490b1e1"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:08:11 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:08:11 2014 +0900"
      },
      "message": "tux3: Release buffer in create_entry caller\n\nRefactoring towards choosing inode after creating directory entry.\nNow that caller has the buffer, release it there instead of the low level\ndirectory entry create.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "693b8b6f5c9e3827cc35f156bc5d5e788490b1e1",
      "tree": "55adc702025bbe4cd2ec40267d4bd441cbcf9394",
      "parents": [
        "378a1334c70c5d97c628ca712e38d030a0200e9d"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 02:51:21 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 02:51:21 2014 +0900"
      },
      "message": "tux3: Move declarations from xattr.c to tux3.h where they\n\nRefactoring towards choosing inode after creating directory entry.\nXattr.c carried declarations that need to be in headers shared by the actual\ndefinition otherwise bad things will happen.\n\nAnd use i_size_write() for dir-\u003ei_size.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "378a1334c70c5d97c628ca712e38d030a0200e9d",
      "tree": "b60e476074c0449a002a664ad582828d220c26e4",
      "parents": [
        "9abef90accfbb5f3d4fe0f0671bdb50cbe27794b"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sat Feb 15 23:30:23 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sat Feb 15 23:30:23 2014 +0900"
      },
      "message": "tux3: Pass create_entry buffer back to caller\n\nRefactoring towards choosing inode after creating directory entry.\nCaller needs needs the dirent buffer pinned to update it after choosing inum.\nXattr handling is also using the dirent ops, just keep that usage compatible.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "9abef90accfbb5f3d4fe0f0671bdb50cbe27794b",
      "tree": "26b74a1302fde69f80822ce413de147c314be010",
      "parents": [
        "8628329fc123969e50228385abdaf3d8e90ada91"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sat Feb 15 23:14:14 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sat Feb 15 23:14:14 2014 +0900"
      },
      "message": "tux3: Release dirent block in create_entry caller\n\nRefactoring towards choosing inode after creating directory entry.\nLift buffer dirty and release up one level from helper to callers.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "8628329fc123969e50228385abdaf3d8e90ada91",
      "tree": "563cf1535cdc35d1e0d0d7dbd90ffa358e6d6560",
      "parents": [
        "b079cf19e4b2d4fc3add9f15d525c1e6f4cae74f"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sat Feb 15 23:05:40 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Sat Feb 15 23:05:40 2014 +0900"
      },
      "message": "tux3: Pass inode instead of mapping\n\nBase work for adding allocation heuristics.\nPass inode instead of mapping because it lets kernel and user space use the\nsame allocation code. Makes user/buffer.c buffer emulation less standalone,\nbut there are already intrusions of inodes. Moves the declaration into tux3.h\nand out of buffer.h, making the buffer system less modular but there is\nalready filesystem specific code in it so it is going that way anyway.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "b079cf19e4b2d4fc3add9f15d525c1e6f4cae74f",
      "tree": "c0bb01d1cd24715d6040154e28b48a2c0799b321",
      "parents": [
        "5134038eeeb76f3bdc353c9e56424c103c76a03b"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Mon Feb 17 22:42:35 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Mon Feb 17 22:42:35 2014 +0900"
      },
      "message": "tux3: Fix error path in create_internal_inode()\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "5134038eeeb76f3bdc353c9e56424c103c76a03b",
      "tree": "177683e1a9759cd9656e78793284e02b2896a49e",
      "parents": [
        "27cbf04af7deb83e32ec22d39a5e0a152d8b2143"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:53 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:53 2014 +0900"
      },
      "message": "tux3: Replace buffers_entry macro by an inline\n\nAs an inline we get more sensible error messages and more type safety.\nWe should fix more of these, but this one caused actual difficulty and\ntherefore got fixed first.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "27cbf04af7deb83e32ec22d39a5e0a152d8b2143",
      "tree": "26c79634c236cce8bdcd08090fe569855b680e5e",
      "parents": [
        "b1c5cedb7a92f6ea7cfc9fc5c0d1b35c162d7cec"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:52 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:52 2014 +0900"
      },
      "message": "tux3: Make the buffer trace format more consistent\n\nOutput the buffer address in the same format for a read as for other buffer\noperations. This allows easier search through trace logs for events affecting\na given buffer.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "b1c5cedb7a92f6ea7cfc9fc5c0d1b35c162d7cec",
      "tree": "da65a72c96a993e9b1be6cbcbc817d8e7464b22d",
      "parents": [
        "59793dda73a2cea289c372ffabd16cfe6163b8aa"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:51 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:51 2014 +0900"
      },
      "message": "tux3: Rewrite balloc_find to use group counts\n\nballoc_find now works according to the following algorithm:\n\n  Scan entire volume exactly once. Start at current goal, continue to end\n  of group, then continue scanning a group at a time, wrapping around to\n  volume base if necessary. Skip any groups with less than some threshold\n  of free blocks, depending on original request size. The first and last\n  partial groups are scanned regardless of threshold in the first pass\n  and never in the second pass. The second pass scans groups skipped in\n  the first pass that are not completely full.\n\nThis allows skipping through full or nearly full volume regions rapidly,\nusing the group count statistics. This also attempts to optimize against\nfragmentation by allocating larger requests in allocation groups with more\nfree space. Except for first and last regions when wrapping around entire\nvolume, scanning is one full group at a time. Optionally, this allows\nenforcing the rule that physical extents do not cross group boundaries, which\nwe allow for the time being.\n\nGuarantees that each block is scanned exactly one, to avoid double allocates.\nBefore the next call to balloc_find, balloc_use should be called to update\nthe bitmap table, which is also necessary to avoid double allocation.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "59793dda73a2cea289c372ffabd16cfe6163b8aa",
      "tree": "6040a6c3c60a7b90d1440c40359a9a03b24176f1",
      "parents": [
        "af9c70382bf8e3b42bcf4da7912ad08d27e3857e"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:51 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:51 2014 +0900"
      },
      "message": "tux3: Fix bitmap_modify issues\n\nFixes bug where block count was always zero for group count update. Also\naccounts segments that cross group boundaries correctly.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "af9c70382bf8e3b42bcf4da7912ad08d27e3857e",
      "tree": "cb0f7aff8348925fd2f4d6036b1c3f4d271d50a7",
      "parents": [
        "a70ba0b40a3938a7dd962f36afa122f8fb84a786"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:50 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:50 2014 +0900"
      },
      "message": "tux3: Improve the bitmap dumper to ignore block boundaries\n\nOutput a more compact format and fix some bugs. Add compile-time settable\noption to output either free regions or used regions.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "a70ba0b40a3938a7dd962f36afa122f8fb84a786",
      "tree": "74962943edaf5b741f7301b0ca1c0915d2a1dd3f",
      "parents": [
        "18d5bc21bb104c99e8ecdd57153663238dbe8869"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:49 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:49 2014 +0900"
      },
      "message": "tux3: Group count update operation using media format\n\nGroup count update operation using media format, working in block buffers.\n\nPin the most recently accessed group count table block buffer in cache to\navoid repeated blockread (should do the same for the bitmap table).\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "18d5bc21bb104c99e8ecdd57153663238dbe8869",
      "tree": "5e2290259fbf78f0f45f2e47b9e2d63995f90216",
      "parents": [
        "1e78fd478ab812419cd4e61ad24d390124599532"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:48 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Feb 19 03:51:48 2014 +0900"
      },
      "message": "tux3: Introduce a new system inode to hold a table of allocation group counts.\n\nConsistency semantics are the same as bitmap: update on unify and handle\npossible recursive update.\n\nSigned-off-by: Daniel Phillips \u003cd.phillips@partner.samsung.com\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "1e78fd478ab812419cd4e61ad24d390124599532",
      "tree": "a787523770c9af2f16b9c90b40e1cc5d4386a05f",
      "parents": [
        "a8d57f9f3fd6c96750e96d10691f18cd4af16b80"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Jan 31 02:52:43 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Jan 31 02:52:43 2014 +0900"
      },
      "message": "tux3: bitmap-modify-consolidate\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "a8d57f9f3fd6c96750e96d10691f18cd4af16b80",
      "tree": "69706634d930b030ff06b2073f212a76451f633d",
      "parents": [
        "653c6ae9b2abb3382c129cae80948571fcc4f49f"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Tue Jan 28 12:59:38 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Tue Jan 28 12:59:38 2014 +0900"
      },
      "message": "tux3: Fix missing to dirty delta buffer if unify buffer is still dirty on same page\n\nIf unify buffer is still dirty on same page with target delta buffer,\ntux3_mark_buffer_atomic() doesn\u0027t dirty volmap inode.  Because the\npage is still dirtied for unify buffer, so tux3_mark_buffer_atomic()\nassumes inode is already dirty (but, actually, inode can be cleaned by\nprevious delta flush. So, flusher thinks inode doesn\u0027t have dirty buffers).\n\nTo fix this, this patch dirty the inode blindly before flushing\nvolmap. With this, flusher checks dirty buffers for delta always.\n\nFIXME: better fix? We might be better to remove \"if (flag \u0026 I_DIRTY)\"\ncheck for internal inode to force to check dirty buffer list.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "653c6ae9b2abb3382c129cae80948571fcc4f49f",
      "tree": "6753470873ffbb3c9b57a28368c0f7fa6a632009",
      "parents": [
        "665264559b78f252cef8d658446ab064b6f26aaa"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Fri Jan 24 11:57:37 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Jan 24 11:57:37 2014 +0900"
      },
      "message": "tux3: Use balloc_find()/balloc_use() for dleaf2 extent allocation\n\nThis replaces balloc() and bfree() to cancel block allocation when it\ndidn\u0027t fit into dleaf space, by balloc_find()/balloc_use().\n\nWith this, we only need to modify bitmap bits for really use.\n\nNote: we would want to cache the unused area in seg[] found by\nballoc_find(). Those unused area very likely to be used after made\nspace in dleaf.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "665264559b78f252cef8d658446ab064b6f26aaa",
      "tree": "eb6e5cd46118ff38848af6b44d6d5adb70381253",
      "parents": [
        "883a696dd21045bc94c9807957e55311faaf148d"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu Jan 23 01:08:29 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu Jan 23 01:08:29 2014 +0900"
      },
      "message": "tux3: Use multiple segments allocation in tux3_logmap_io()\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "883a696dd21045bc94c9807957e55311faaf148d",
      "tree": "9cbd823440af82ef1cdc6c3e368fdc85a9040d40",
      "parents": [
        "50ade99554a9a89ea2e37c7c63ad10a21e1acfa0"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Thu Jan 23 04:07:32 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Thu Jan 23 04:07:32 2014 +0900"
      },
      "message": "tux3: Use bfree_segs() to free multiple segments at once\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "50ade99554a9a89ea2e37c7c63ad10a21e1acfa0",
      "tree": "de1f75f856829a77e80c590e9c8b5d91792bfa31",
      "parents": [
        "f3b1992d6b453a42a124a9e820d63d644fd8d63f"
      ],
      "author": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Jan 24 11:56:20 2014 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Fri Jan 24 11:56:20 2014 +0900"
      },
      "message": "tux3: Refactoring balloc stuff\n\nCurrent balloc is not supporting multiple segments allocation at\nonce. So, this adds ability for it.\n\nWith this, we would be able to allocate more better block placement,\nand even possibly have chance to optimize code itself.\n\nAlso, this separates balloc to 2 function:\n\n    - find unused bits\n    - modify bitmap\n\nWith this separation, we can allocate fewer than found unused bits.\nThis is needed for extent allocation when extent is not fit to leaf.\n\nSigned-off-by: Daniel Phillips \u003cdaniel@tux3.org\u003e\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "f3b1992d6b453a42a124a9e820d63d644fd8d63f",
      "tree": "b858961436b505882c7b8237efc51135c0f85727",
      "parents": [
        "99887d424554eacd1ec361b75d5926af36e362ca"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Wed Dec 04 20:34:34 2013 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Dec 04 20:34:34 2013 +0900"
      },
      "message": "tux3: Rewrite overwrite mode by btree_write()\n\nNew overwrite mode is handled by dleaf2_pre_write(). So, we don\u0027t need\nto care overwrite mode in map_region2() anymore.\n\nTo implement, this adds \"stop_at_hole\" to __dleaf2_read(). If\n\"stop_at_hole\" \u003d\u003d true, __dleaf2_read() stops after read hole. With\nthis, we can get seg[] filled by order of non-hole range \u003d\u003e hole range.\n\nBy using \"stop_at_hole\", we implement overwrite mode by following new\nstrategy,\n\n\t1) read seg[] (after hole) by __dleaf2_read() in dleaf2_pre_write()\n\t2) pass hole range to dleaf2_write()\n\nHole range can be handled by same way with rewrite mode. So, after\ndleaf2_pre_write(), we adjust the key range to include only hole range.\n\nWith this, dleaf2_write() doesn\u0027t need to care about overwrite mode\nalmost all.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "99887d424554eacd1ec361b75d5926af36e362ca",
      "tree": "53b65ba464cbc6940da9f79c38245cf0d1e1f137",
      "parents": [
        "9cf6cfea131d51be289cc7819c3893727270c2f9"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Wed Dec 04 20:34:33 2013 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Dec 04 20:34:33 2013 +0900"
      },
      "message": "tux3: Prepare to implement overwrite mode\n\nThis removes side effect to rq-\u003ekey from dleaf2_read(). With this\nmodify, we can read extents without side effect by __dleaf2_read().\n\n__dleaf2_read() is going to be used for overwrite mode.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    },
    {
      "commit": "9cf6cfea131d51be289cc7819c3893727270c2f9",
      "tree": "9c40da96308973f82b60092f38723dafed50baf7",
      "parents": [
        "aa006a45ae4f54631ed99c50307a312c3845b513"
      ],
      "author": {
        "name": "OGAWA Hirofumi",
        "email": "hirofumi@mail.parknet.co.jp",
        "time": "Wed Dec 04 20:34:31 2013 +0900"
      },
      "committer": {
        "name": "Daniel Phillips",
        "email": "daniel@tux3.org",
        "time": "Wed Dec 04 20:34:31 2013 +0900"
      },
      "message": "tux3: Add -\u003eleaf_pre_write() callback to btree_write()\n\nFor overwrite mode, we don\u0027t want to dirty leaf if all extents are\nexists already.\n\nBut, current btree_write() dirty leaf unconditionally. So, this adds\n-\u003eleaf_pre_write() callback before dirty leaf.\n\nWith this, leaf operations can control whether leaf is dirtied or not.\n\nSigned-off-by: OGAWA Hirofumi \u003chirofumi@mail.parknet.co.jp\u003e\n"
    }
  ],
  "next": "aa006a45ae4f54631ed99c50307a312c3845b513"
}
