)]}'
{
  "log": [
    {
      "commit": "28748b325dc2d730ccc312830a91c4ae0c0d9379",
      "tree": "755255c8ee2facfa7f8ad4268dc198350d166089",
      "parents": [
        "e1bf4cc620fd143766ddfcee3b004a1d1bb34fd0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Apr 13 12:28:21 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Apr 13 12:31:41 2012 -0400"
      },
      "message": "ocfs2: -\u003erl_count endianness breakage\n\nle16, not le32...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e1bf4cc620fd143766ddfcee3b004a1d1bb34fd0",
      "tree": "d8c8d430d1fb9f87d998ee32b921180d272807c1",
      "parents": [
        "3a251f04fe97c3d335b745c98e4b377e3c3899f2"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Apr 13 12:27:11 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Apr 13 12:31:38 2012 -0400"
      },
      "message": "ocfs: -\u003erl_used breakage on big-endian\n\nit\u0027s le16, not le32 or le64...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3a251f04fe97c3d335b745c98e4b377e3c3899f2",
      "tree": "b5835ebf3639fe4e8bc9d71abbb36891080e777e",
      "parents": [
        "6ed3cf2cdfce4c9f1d73171bd3f27d9cb77b734e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Apr 13 12:22:00 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Apr 13 12:31:37 2012 -0400"
      },
      "message": "ocfs2: -\u003el_next_free_req breakage on big-endian\n\nIt\u0027s le16, not le32...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "dae6ad8f37529963ae7df52baaccf056b38f210e",
      "tree": "1bfc6f766601e744c2c2c064b97cdefdcca4ad5c",
      "parents": [
        "49084c3bb2055c401f3493c13edae14d49128ca0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 26 11:50:15 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:44:05 2011 -0400"
      },
      "message": "new helpers: kern_path_create/user_path_create\n\ncombination of kern_path_parent() and lookup_create().  Does *not*\nexpose struct nameidata to caller.  Syscalls converted to that...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3e19a25e0591a6248f3ddd2c08566666607d827d",
      "tree": "cd01e54a18f4f91e1ae14fccdbc564ee7ce1b09b",
      "parents": [
        "d24a10b9f8ed548981696cd36e2b4f16e6f360b1"
      ],
      "author": {
        "name": "Tristan Ye",
        "email": "tristan.ye@oracle.com",
        "time": "Tue May 24 16:21:20 2011 +0800"
      },
      "committer": {
        "name": "Tristan Ye",
        "email": "tristan.ye@oracle.com",
        "time": "Wed May 25 15:17:08 2011 +0800"
      },
      "message": "Ocfs2/refcounttree: Publicize couple of funcs from refcounttree.c\n\nThe original goal of commonizing these funcs is to benefit defraging/extent_moving\ncodes in the future,  based on the fact that reflink and defragmentation having\nthe same Copy-On-Wrtie mechanism.\n\nSigned-off-by: Tristan Ye \u003ctristan.ye@oracle.com\u003e\n"
    },
    {
      "commit": "07f9479a40cc778bc1462ada11f95b01360ae4ff",
      "tree": "0676cf38df3844004bb3ebfd99dfa67a4a8998f5",
      "parents": [
        "9d5e6bdb3013acfb311ab407eeca0b6a6a3dedbf",
        "cd2e49e90f1cae7726c9a2c54488d881d7f1cd1c"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Apr 26 10:22:15 2011 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Apr 26 10:22:59 2011 +0200"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n\nFast-forwarded to current state of Linus\u0027 tree as there are patches to be\napplied for files that didn\u0027t exist on the old branch.\n"
    },
    {
      "commit": "6eab04a87677a37cf15b52e2b4b4fd57917102ad",
      "tree": "dc92e25473e7e5c9183312d7feeeaeabb2157baf",
      "parents": [
        "9f0af69b2dd34d2c21817d599db7bdb3c972a759"
      ],
      "author": {
        "name": "Justin P. Mattock",
        "email": "justinmattock@gmail.com",
        "time": "Fri Apr 08 19:49:08 2011 -0700"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Sun Apr 10 17:01:05 2011 +0200"
      },
      "message": "treewide: remove extra semicolons\n\nSigned-off-by: Justin P. Mattock \u003cjustinmattock@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "03e4970c10151c5fb25ddd7e9a142d63c6a8d058",
      "tree": "393447b9d0a6ebc64689d6e793e80ad549b97e35",
      "parents": [
        "1788c208aab15f9d9d1d24cff0d0c64b5c73bbee",
        "272b62c1f0f6f742046e45b50b6fec98860208a0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 28 13:03:31 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 28 13:03:31 2011 -0700"
      },
      "message": "Merge branch \u0027upstream-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2\n\n* \u0027upstream-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2: (39 commits)\n  Treat writes as new when holes span across page boundaries\n  fs,ocfs2: Move o2net_get_func_run_time under CONFIG_OCFS2_FS_STATS.\n  ocfs2/dlm: Move kmalloc() outside the spinlock\n  ocfs2: Make the left masklogs compat.\n  ocfs2: Remove masklog ML_AIO.\n  ocfs2: Remove masklog ML_UPTODATE.\n  ocfs2: Remove masklog ML_BH_IO.\n  ocfs2: Remove masklog ML_JOURNAL.\n  ocfs2: Remove masklog ML_EXPORT.\n  ocfs2: Remove masklog ML_DCACHE.\n  ocfs2: Remove masklog ML_NAMEI.\n  ocfs2: Remove mlog(0) from fs/ocfs2/dir.c\n  ocfs2: remove NAMEI from symlink.c\n  ocfs2: Remove masklog ML_QUOTA.\n  ocfs2: Remove mlog(0) from quota_local.c.\n  ocfs2: Remove masklog ML_RESERVATIONS.\n  ocfs2: Remove masklog ML_XATTR.\n  ocfs2: Remove masklog ML_SUPER.\n  ocfs2: Remove mlog(0) from fs/ocfs2/heartbeat.c\n  ocfs2: Remove mlog(0) from fs/ocfs2/slot_map.c\n  ...\n\nFix up trivial conflict in fs/ocfs2/super.c\n"
    },
    {
      "commit": "0f6e0e8448a16d8d22119ce91d8dd24b44865b51",
      "tree": "7c295c02db035fc6a0b867465911a2bc9dc6b1ef",
      "parents": [
        "0d2ecee2bdb2a19d04bc5cefac0f86e790f1aad4",
        "a002951c97ff8da49938c982a4c236bf2fafdc9f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 09:15:43 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 09:15:43 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6: (33 commits)\n  AppArmor: kill unused macros in lsm.c\n  AppArmor: cleanup generated files correctly\n  KEYS: Add an iovec version of KEYCTL_INSTANTIATE\n  KEYS: Add a new keyctl op to reject a key with a specified error code\n  KEYS: Add a key type op to permit the key description to be vetted\n  KEYS: Add an RCU payload dereference macro\n  AppArmor: Cleanup make file to remove cruft and make it easier to read\n  SELinux: implement the new sb_remount LSM hook\n  LSM: Pass -o remount options to the LSM\n  SELinux: Compute SID for the newly created socket\n  SELinux: Socket retains creator role and MLS attribute\n  SELinux: Auto-generate security_is_socket_class\n  TOMOYO: Fix memory leak upon file open.\n  Revert \"selinux: simplify ioctl checking\"\n  selinux: drop unused packet flow permissions\n  selinux: Fix packet forwarding checks on postrouting\n  selinux: Fix wrong checks for selinux_policycap_netpeer\n  selinux: Fix check for xfrm selinux context algorithm\n  ima: remove unnecessary call to ima_must_measure\n  IMA: remove IMA imbalance checking\n  ...\n"
    },
    {
      "commit": "c9c6cac0c2bdbda42e7b804838648d0bc60ddb13",
      "tree": "c2d9b41eb24026d6769175e9ba3c17c8093b6aad",
      "parents": [
        "15a9155fe3e8215c02b80df51ec2cac7c0d726ad"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Feb 16 15:15:47 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Mar 14 09:15:23 2011 -0400"
      },
      "message": "kill path_lookup()\n\nall remaining callers pass LOOKUP_PARENT to it, so\nflags argument can die; renamed to kern_path_parent()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "fe3fa43039d47ee4e22caf460b79b62a14937f79",
      "tree": "9eab8d00f1227b9fe0959f32a62d892ed35803ba",
      "parents": [
        "ee009e4a0d4555ed522a631bae9896399674f064",
        "026eb167ae77244458fa4b4b9fc171209c079ba7"
      ],
      "author": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Tue Mar 08 11:38:10 2011 +1100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Tue Mar 08 11:38:10 2011 +1100"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.infradead.org/users/eparis/selinux into next\n"
    },
    {
      "commit": "198aac2838731691ca67e15fd8a56f65307d3677",
      "tree": "87d94f9ab6c82ca3a6379d789f29acf5c8c4f9f4",
      "parents": [
        "81bad69749623062fae2f94e2d98dd43d95a36f4"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Tue Feb 22 08:20:04 2011 +0800"
      },
      "committer": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Tue Feb 22 08:20:04 2011 +0800"
      },
      "message": "ocfs2: Remove masklog ML_REFCOUNT.\n\nChange all the \"mlog(0,\" in fs/ocfs2/refcounttree.c to trace events.\nAnd finally remove masklog ML_REFCOUNT.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\n"
    },
    {
      "commit": "acf3bb007e5636ef4c17505affb0974175108553",
      "tree": "5e5c44104bcc865184c8472af85151271dbc03bd",
      "parents": [
        "705773a6656bba66f2a80a44ddaacf9620df8a59"
      ],
      "author": {
        "name": "Tristan Ye",
        "email": "tristan.ye@oracle.com",
        "time": "Fri Jan 21 18:20:18 2011 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "jlbec@evilplan.org",
        "time": "Sun Feb 20 02:36:12 2011 -0800"
      },
      "message": "Ocfs2/refcounttree: Fix a bug for refcounttree to writeback clusters in a right number.\n\nCurrent refcounttree codes actually didn\u0027t writeback the new pages out in\nwrite-back mode, due to a bug of always passing a ZERO number of clusters\nto \u0027ocfs2_cow_sync_writeback\u0027, the patch tries to pass a proper one in.\n\nSigned-off-by: Tristan Ye \u003ctristan.ye@oracle.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Joel Becker \u003cjlbec@evilplan.org\u003e\n"
    },
    {
      "commit": "2a7dba391e5628ad665ce84ef9a6648da541ebab",
      "tree": "ba0722bd74d2c883dbda7ff721850bab411cac04",
      "parents": [
        "821404434f3324bf23f545050ff64055a149766e"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Feb 01 11:05:39 2011 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Tue Feb 01 11:12:29 2011 -0500"
      },
      "message": "fs/vfs/security: pass last path component to LSM on inode creation\n\nSELinux would like to implement a new labeling behavior of newly created\ninodes.  We currently label new inodes based on the parent and the creating\nprocess.  This new behavior would also take into account the name of the\nnew object when deciding the new label.  This is not the (supposed) full path,\njust the last component of the path.\n\nThis is very useful because creating /etc/shadow is different than creating\n/etc/passwd but the kernel hooks are unable to differentiate these\noperations.  We currently require that userspace realize it is doing some\ndifficult operation like that and than userspace jumps through SELinux hoops\nto get things set up correctly.  This patch does not implement new\nbehavior, that is obviously contained in a seperate SELinux patch, but it\ndoes pass the needed name down to the correct LSM hook.  If no such name\nexists it is fine to pass NULL.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\n"
    },
    {
      "commit": "fc3718918f13ad72827d62d36ea0f5fb55090644",
      "tree": "4f9551256e02d08be37bab137f3d94182a67504c",
      "parents": [
        "7bdb0d18bfd381cc5491eb95973ec5604b356c7e",
        "d4396eafe402b710a8535137b3bf2abe6c059a15"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Oct 15 13:03:09 2010 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Oct 15 13:03:09 2010 -0700"
      },
      "message": "Merge branch \u0027globalheartbeat-2\u0027 of git://oss.oracle.com/git/smushran/linux-2.6 into ocfs2-merge-window\n\nConflicts:\n\tfs/ocfs2/ocfs2.h\n"
    },
    {
      "commit": "07eaac9438b13ec0b863111698b91ccec8f3b8d4",
      "tree": "23236db1624fb57bff6c78186f3b62b48d342e21",
      "parents": [
        "5e64b0d9e86ffff8b299556341d85319117539e9"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Sep 07 13:30:06 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 10 09:19:06 2010 -0700"
      },
      "message": "ocfs2: Fix lockdep warning in reflink.\n\nThis patch change mutex_lock to a new subclass and\nadd a new inode lock subclass for the target inode\nwhich caused this lockdep warning.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n[ INFO: possible recursive locking detected ]\n2.6.35+ #5\n---------------------------------------------\nreflink/11086 is trying to acquire lock:\n (Meta){+++++.}, at: [\u003cffffffffa06f9d65\u003e] ocfs2_reflink_ioctl+0x898/0x1229 [ocfs2]\n\nbut task is already holding lock:\n (Meta){+++++.}, at: [\u003cffffffffa06f9aa0\u003e] ocfs2_reflink_ioctl+0x5d3/0x1229 [ocfs2]\n\nother info that might help us debug this:\n6 locks held by reflink/11086:\n #0:  (\u0026sb-\u003es_type-\u003ei_mutex_key#15/1){+.+.+.}, at: [\u003cffffffff820e09ec\u003e] lookup_create+0x26/0x97\n #1:  (\u0026sb-\u003es_type-\u003ei_mutex_key#15){+.+.+.}, at: [\u003cffffffffa06f99a0\u003e] ocfs2_reflink_ioctl+0x4d3/0x1229 [ocfs2]\n #2:  (Meta){+++++.}, at: [\u003cffffffffa06f9aa0\u003e] ocfs2_reflink_ioctl+0x5d3/0x1229 [ocfs2]\n #3:  (\u0026oi-\u003eip_xattr_sem){+.+.+.}, at: [\u003cffffffffa06f9b58\u003e] ocfs2_reflink_ioctl+0x68b/0x1229 [ocfs2]\n #4:  (\u0026oi-\u003eip_alloc_sem){+.+.+.}, at: [\u003cffffffffa06f9b67\u003e] ocfs2_reflink_ioctl+0x69a/0x1229 [ocfs2]\n #5:  (\u0026sb-\u003es_type-\u003ei_mutex_key#15/2){+.+...}, at: [\u003cffffffffa06f9d4f\u003e] ocfs2_reflink_ioctl+0x882/0x1229 [ocfs2]\n\nstack backtrace:\nPid: 11086, comm: reflink Not tainted 2.6.35+ #5\nCall Trace:\n [\u003cffffffff82063dd9\u003e] validate_chain+0x56e/0xd68\n [\u003cffffffff82062275\u003e] ? mark_held_locks+0x49/0x69\n [\u003cffffffff82064d6d\u003e] __lock_acquire+0x79a/0x7f1\n [\u003cffffffff82065a81\u003e] lock_acquire+0xc6/0xed\n [\u003cffffffffa06f9d65\u003e] ? ocfs2_reflink_ioctl+0x898/0x1229 [ocfs2]\n [\u003cffffffffa06c9ade\u003e] __ocfs2_cluster_lock+0x975/0xa0d [ocfs2]\n [\u003cffffffffa06f9d65\u003e] ? ocfs2_reflink_ioctl+0x898/0x1229 [ocfs2]\n [\u003cffffffffa06e107b\u003e] ? ocfs2_wait_for_recovery+0x15/0x8a [ocfs2]\n [\u003cffffffffa06cb6ea\u003e] ocfs2_inode_lock_full_nested+0x1ac/0xdc5 [ocfs2]\n [\u003cffffffffa06f9d65\u003e] ? ocfs2_reflink_ioctl+0x898/0x1229 [ocfs2]\n [\u003cffffffff820623a0\u003e] ? trace_hardirqs_on_caller+0x10b/0x12f\n [\u003cffffffff82060193\u003e] ? debug_mutex_free_waiter+0x4f/0x53\n [\u003cffffffffa06f9d65\u003e] ocfs2_reflink_ioctl+0x898/0x1229 [ocfs2]\n [\u003cffffffffa06ce24a\u003e] ? ocfs2_file_lock_res_init+0x66/0x78 [ocfs2]\n [\u003cffffffff820bb2d2\u003e] ? might_fault+0x40/0x8d\n [\u003cffffffffa06df9f6\u003e] ocfs2_ioctl+0x61a/0x656 [ocfs2]\n [\u003cffffffff820ee5d3\u003e] ? mntput_no_expire+0x1d/0xb0\n [\u003cffffffff820e07b3\u003e] ? path_put+0x2c/0x31\n [\u003cffffffff820e53ac\u003e] vfs_ioctl+0x2a/0x9d\n [\u003cffffffff820e5903\u003e] do_vfs_ioctl+0x45d/0x4ae\n [\u003cffffffff8233a7f6\u003e] ? _raw_spin_unlock+0x26/0x2a\n [\u003cffffffff8200299c\u003e] ? sysret_check+0x27/0x62\n [\u003cffffffff820e59ab\u003e] sys_ioctl+0x57/0x7a\n [\u003cffffffff8200296b\u003e] system_call_fastpath+0x16/0x1b\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "729963a1ff8d069d05dab6a024bfd59805ac622c",
      "tree": "5489aae570960d1908d738913ea581cc1689fbbb",
      "parents": [
        "17ae521158d6fe89cfdd00a9990aa40d02e81391",
        "6ea4843f53282465f2bdbe5eedde7d8c3081dfdf"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 10 08:41:04 2010 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 10 08:41:04 2010 -0700"
      },
      "message": "Merge branch \u0027cow_readahead\u0027 of git://oss.oracle.com/git/tma/linux-2.6 into merge-2\n"
    },
    {
      "commit": "9b4c0ff32ccd87ab52d4c5bd0a0536febce11370",
      "tree": "b9e77d2798eac9051353b29f22e9315d9d9e13b5",
      "parents": [
        "b2b6ebf5f740e015b2155343958f067e594323ea"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Tue Aug 24 14:28:03 2010 +0200"
      },
      "committer": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Wed Sep 08 14:25:57 2010 +0800"
      },
      "message": "ocfs2: Fix deadlock when allocating page\n\nWe cannot call grab_cache_page() when holding filesystem locks or with\na transaction started as grab_cache_page() calls page allocation with\nGFP_KERNEL flag and thus page reclaim can recurse back into the filesystem\ncausing deadlocks or various assertion failures. We have to use\nfind_or_create_page() instead and pass it GFP_NOFS as we do with other\nallocations.\n\nAcked-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "6ea4843f53282465f2bdbe5eedde7d8c3081dfdf",
      "tree": "60786d137b206cabb5731e3b2903cb5d9d902ab9",
      "parents": [
        "7b61cf54a2445ad21df9dd44f0c8bb90154ddea8"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Aug 12 10:31:34 2010 +0800"
      },
      "committer": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Aug 12 10:40:05 2010 +0800"
      },
      "message": "ocfs2: Add readhead during CoW.\n\nIn CoW, when we meet with a readahead page, we know\nit is time to move the readahead window. So carry\nout a new readahead.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "7b61cf54a2445ad21df9dd44f0c8bb90154ddea8",
      "tree": "d170c7e635f3c7a1c74551065e9c51ab8b8f24b8",
      "parents": [
        "155027121fe52f9b4f25e9d156c22f2f5012e5fe"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Jun 17 14:14:36 2010 +0800"
      },
      "committer": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Aug 12 10:40:01 2010 +0800"
      },
      "message": "ocfs2: Add readahead support for CoW.\n\nAdd a new function ocfs2_readahead_for_cow so that\nwe start readahead before we start our CoW.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "155027121fe52f9b4f25e9d156c22f2f5012e5fe",
      "tree": "74067d52b685ab314173e74cc85a43a5d9e20c7d",
      "parents": [
        "b890823635e022467b924e3d9da8c5166a4e349c"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Aug 12 10:36:38 2010 +0800"
      },
      "committer": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Aug 12 10:39:57 2010 +0800"
      },
      "message": "ocfs2: Add struct file to ocfs2_refcount_cow.\n\nAdd a new parameter \u0027struct file *\u0027 to ocfs2_refcount_cow\nso that we can add readahead support later.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "8a2e70c40ff58f82dde67770e6623ca45f0cb0c8",
      "tree": "ce05111dbb00fae81d0c0b7726ddac5c0117ec34",
      "parents": [
        "7beaf243787f85a2ef9213ccf13ab4a243283fde"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Jul 22 13:56:45 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Sat Aug 07 10:44:49 2010 -0700"
      },
      "message": "ocfs2: Count more refcount records in file system fragmentation.\n\nThe refcount record calculation in ocfs2_calc_refcount_meta_credits\nis too optimistic that we can always allocate contiguous clusters\nand handle an already existed refcount rec as a whole. Actually\nbecause of file system fragmentation, we may have the chance to split\na refcount record into 3 parts during the transaction. So consider\nthe worst case in record calculation.\n\nCc: stable@kernel.org\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "f5e27b6ddfbafdd9c9c2f06bbf28af12581409bc",
      "tree": "b55eb9842a3ee2cfebb6a24ab2ee4ffbd597daee",
      "parents": [
        "e372357ba55ae89307af15cd680467d8f0db4f01"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Wed Jul 14 11:19:32 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 15 10:54:28 2010 -0700"
      },
      "message": "ocfs2: Don\u0027t duplicate pages past i_size during CoW.\n\nDuring CoW, the pages after i_size don\u0027t contain valid data, so there\u0027s\nno need to read and duplicate them.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "5693486bad2bc2ac585a2c24f7e2f3964b478df9",
      "tree": "03d61d72c1b73bbf0b049bf0328f8e0c69f35a43",
      "parents": [
        "a4bfb4cf11fd2211b788af59dc8a8b4394bca227"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 01 15:13:31 2010 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 08 13:25:35 2010 -0700"
      },
      "message": "ocfs2: Zero the tail cluster when extending past i_size.\n\nocfs2\u0027s allocation unit is the cluster.  This can be larger than a block\nor even a memory page.  This means that a file may have many blocks in\nits last extent that are beyond the block containing i_size.  There also\nmay be more unwritten extents after that.\n\nWhen ocfs2 grows a file, it zeros the entire cluster in order to ensure\nfuture i_size growth will see cleared blocks.  Unfortunately,\nblock_write_full_page() drops the pages past i_size.  This means that\nocfs2 is actually leaking garbage data into the tail end of that last\ncluster.  This is a bug.\n\nWe adjust ocfs2_write_begin_nolock() and ocfs2_extend_file() to detect\nwhen a write or truncate is past i_size.  They will use\nocfs2_zero_extend() to ensure the data is properly zeroed.\n\nOlder versions of ocfs2_zero_extend() simply zeroed every block between\ni_size and the zeroing position.  This presumes three things:\n\n1) There is allocation for all of these blocks.\n2) The extents are not unwritten.\n3) The extents are not refcounted.\n\n(1) and (2) hold true for non-sparse filesystems, which used to be the\nonly users of ocfs2_zero_extend().  (3) is another bug.\n\nSince we\u0027re now using ocfs2_zero_extend() for sparse filesystems as\nwell, we teach ocfs2_zero_extend() to check every extent between\ni_size and the zeroing position.  If the extent is unwritten, it is\nignored.  If it is refcounted, it is CoWed.  Then it is zeroed.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCc: stable@kernel.org\n"
    },
    {
      "commit": "03e62303cf56e87337115f14842321043df2b4bb",
      "tree": "3024495955beccddbae347d99613bcdd33801ee4",
      "parents": [
        "33cf23b0a535475aead57707cb9f4fe135a93544",
        "18d3a98f3c1b0e27ce026afa4d1ef042f2903726"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 21 07:20:17 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 21 07:20:17 2010 -0700"
      },
      "message": "Merge branch \u0027upstream-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2\n\n* \u0027upstream-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2: (47 commits)\n  ocfs2: Silence a gcc warning.\n  ocfs2: Don\u0027t retry xattr set in case value extension fails.\n  ocfs2:dlm: avoid dlm-\u003east_lock lockres-\u003espinlock dependency break\n  ocfs2: Reset xattr value size after xa_cleanup_value_truncate().\n  fs/ocfs2/dlm: Use kstrdup\n  fs/ocfs2/dlm: Drop memory allocation cast\n  Ocfs2: Optimize punching-hole code.\n  Ocfs2: Make ocfs2_find_cpos_for_left_leaf() public.\n  Ocfs2: Fix hole punching to correctly do CoW during cluster zeroing.\n  Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead.\n  ocfs2: Block signals for mkdir/link/symlink/O_CREAT.\n  ocfs2: Wrap signal blocking in void functions.\n  ocfs2/dlm: Increase o2dlm lockres hash size\n  ocfs2: Make ocfs2_extend_trans() really extend.\n  ocfs2/trivial: Code cleanup for allocation reservation.\n  ocfs2: make ocfs2_adjust_resv_from_alloc simple.\n  ocfs2: Make nointr a default mount option\n  ocfs2/dlm: Make o2dlm domain join/leave messages KERN_NOTICE\n  o2net: log socket state changes\n  ocfs2: print node # when tcp fails\n  ...\n"
    },
    {
      "commit": "41841b0bcea8af7f3bff8b2a23d542b94d9c1bb1",
      "tree": "89eddf2dffadbbd13939f94eb8cd904a26279390",
      "parents": [
        "316ce2ba8e74a7bb9153b9f93adc883cb1ceb9fd",
        "1a934c3e57594588c373aea858e4593cdfcba4f4"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue May 18 16:40:42 2010 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue May 18 16:40:42 2010 -0700"
      },
      "message": "Merge branch \u0027discontig-bg\u0027 of git://oss.oracle.com/git/tma/linux-2.6 into ocfs2-merge-window\n"
    },
    {
      "commit": "78f94673d7faf01677f374f4ebbf324ff1a0aa6e",
      "tree": "1bd394469f12b5e148835365295d1df413c04a0c",
      "parents": [
        "547ba7c8efe43c2cabb38782e23572a6179dd1c1"
      ],
      "author": {
        "name": "Tristan Ye",
        "email": "tristan.ye@oracle.com",
        "time": "Tue May 11 17:54:42 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue May 18 12:25:10 2010 -0700"
      },
      "message": "Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead.\n\nTruncate is just a special case of punching holes(from new i_size to\nend), we therefore could take advantage of the existing\nocfs2_remove_btree_range() to reduce the comlexity and redundancy in\nalloc.c.  The goal here is to make truncate more generic and\nstraightforward.\n\nSeveral functions only used by ocfs2_commit_truncate() will smiply be\nremoved.\n\nocfs2_remove_btree_range() was originally used by the hole punching\ncode, which didn\u0027t take refcount trees into account (definitely a bug).\nWe therefore need to change that func a bit to handle refcount trees.\nIt must take the refcount lock, calculate and reserve blocks for\nrefcount tree changes, and decrease refcounts at the end.  We replace \nocfs2_lock_allocators() here by adding a new func\nocfs2_reserve_blocks_for_rec_trunc() which accepts some extra blocks to\nreserve.  This will not hurt any other code using\nocfs2_remove_btree_range() (such as dir truncate and hole punching).\n\nI merged the following steps into one patch since they may be\nlogically doing one thing, though I know it looks a little bit fat\nto review.\n\n1). Remove redundant code used by ocfs2_commit_truncate(), since we\u0027re\n    moving to ocfs2_remove_btree_range anyway.\n\n2). Add a new func ocfs2_reserve_blocks_for_rec_trunc() for purpose of\n    accepting some extra blocks to reserve.\n\n3). Change ocfs2_prepare_refcount_change_for_del() a bit to fit our\n    needs.  It\u0027s safe to do this since it\u0027s only being called by\n    truncate.\n\n4). Change ocfs2_remove_btree_range() a bit to take refcount case into\n    account.\n\n5). Finally, we change ocfs2_commit_truncate() to call\n    ocfs2_remove_btree_range() in a proper way.\n\nThe patch has been tested normally for sanity check, stress tests\nwith heavier workload will be expected.\n\nBased on this patch, fixing the punching holes bug will be fairly easy.\n\nSigned-off-by: Tristan Ye \u003ctristan.ye@oracle.com\u003e\nAcked-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "c901fb00731e307c2c6e8c7d5eee005df5835f9d",
      "tree": "4c68bf68590d04d1045ae5d66a9ae158c56019fa",
      "parents": [
        "3e4218df3176657be72ad2fa199779be6c11fe4f"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Apr 26 14:34:57 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed May 05 18:18:09 2010 -0700"
      },
      "message": "ocfs2: Make ocfs2_extend_trans() really extend.\n\nIn ocfs2, we use ocfs2_extend_trans() to extend a journal handle\u0027s\nblocks. But if jbd2_journal_extend() fails, it will only restart\nwith the the new number of blocks.  This tends to be awkward since\nin most cases we want additional reserved blocks. It makes our code\nharder to mantain since the caller can\u0027t be sure all the original\nblocks will not be accessed and dirtied again.  There are 15 callers\nof ocfs2_extend_trans() in fs/ocfs2, and 12 of them have to add\nh_buffer_credits before they call ocfs2_extend_trans().  This makes\nocfs2_extend_trans() really extend atop the original block count.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "ec20cec7a351584ca6c70ead012e73d61f9a8e04",
      "tree": "39af308ae07ab168313bb50ced1bb1ae7ef7e6a3",
      "parents": [
        "b4414eea0e7b9c134262c801a87e338bf675962c"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Mar 19 14:13:52 2010 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed May 05 18:17:29 2010 -0700"
      },
      "message": "ocfs2: Make ocfs2_journal_dirty() void.\n\njbd[2]_journal_dirty_metadata() only returns 0.  It\u0027s been returning 0\nsince before the kernel moved to git.  There is no point in checking\nthis error.\n\nocfs2_journal_dirty() has been faithfully returning the status since the\nbeginning.  All over ocfs2, we have blocks of code checking this can\u0027t\nfail status.  In the past few years, we\u0027ve tried to avoid adding these\nchecks, because they are pointless.  But anyone who looks at our code\nassumes they are needed.\n\nFinally, ocfs2_journal_dirty() is made a void function.  All error\nchecking is removed from other files.  We\u0027ll BUG_ON() the status of\njbd2_journal_dirty_metadata() just in case they change it someday.  They\nwon\u0027t.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "f9221fd80343285514568da6c5dbda0f87109de8",
      "tree": "3a2f0077ebea9d094bdeedb319c97cb591d51c51",
      "parents": [
        "a36d515c7a2dfacebcf41729f6812dbc424ebcf0",
        "a9743fcdc0eb43d028b71267438076e1b0112ba0"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Apr 30 13:37:29 2010 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Apr 30 13:37:29 2010 -0700"
      },
      "message": "Merge branch \u0027skip_delete_inode\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2-mark into ocfs2-fixes\n"
    },
    {
      "commit": "c21a534e2f24968cf74976a4e721ac194db30ded",
      "tree": "ed095a19d91fa586912366aeb4c91852f131fa97",
      "parents": [
        "0350cb078f5035716ebdad4ad4709d02fe466a8a"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Wed Apr 21 14:05:55 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Apr 23 14:43:22 2010 -0700"
      },
      "message": "ocfs2: Update VFS inode\u0027s id info after reflink.\n\nIn reflink we update the id info on the disk but forgot to update\nthe corresponding information in the VFS inode.  Update them\naccordingly when we want to preserve the attributes.\n\nReported-by: Jeff Liu \u003cjeff.liu@oracle.com\u003e\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "74380c479ad83addeff8a172ab95f59557b5b0c3",
      "tree": "49b94f3ff48cd2ca6b53977a5e3070380ccecd6b",
      "parents": [
        "af2bf0d86019e0b0306965321096f8380b7ca830"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Mar 22 14:20:18 2010 +0800"
      },
      "committer": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Mar 22 14:20:18 2010 +0800"
      },
      "message": "ocfs2: Free block to the right block group.\n\nIn case the block we are going to free is allocated from\na discontiguous block group, we have to use suballoc_loc\nto be the right group.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "2b6cb576aa80611f1f6a3c88708d1e68a8d97985",
      "tree": "a984f09104970133379e4d370b9f01e7f85c6f9b",
      "parents": [
        "ba2066351b630f0205ebf725f5c81a2a07a77cd7"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Mar 26 10:09:15 2010 +0800"
      },
      "committer": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Fri Mar 26 10:09:15 2010 +0800"
      },
      "message": "ocfs2: Set suballoc_loc on allocated metadata.\n\nGet the suballoc_loc from ocfs2_claim_new_inode() or\nocfs2_claim_metadata().  Store it on the appropriate field of the block\nwe just allocated.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "1ed9b777f77929ae961d6f9cdf828a07200ba71c",
      "tree": "a0bb6c9e9be1f5d3d46d6cdac0a4397303e22795",
      "parents": [
        "13e434cf0cacd2f03a7f4cd077e3e995ef5ef710"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu May 06 13:59:06 2010 +0800"
      },
      "committer": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu May 06 13:59:06 2010 +0800"
      },
      "message": "ocfs2: ocfs2_claim_*() don\u0027t need an ocfs2_super argument.\n\nThey all take an ocfs2_alloc_context, which has the allocation inode.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "6527f8f848ec84b9daf1cb07601266126b8507ab",
      "tree": "fd7bbdfb3a63921e78f22480f60b5bc037e37d16",
      "parents": [
        "78c37eb0d5e6a9727b12ea0f1821795ffaa66cfe"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Wed Mar 10 09:56:52 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Mar 17 12:28:00 2010 -0700"
      },
      "message": "ocfs2: Update i_blocks in reflink operations.\n\nIn reflink, we need to upate i_blocks for the target inode.\n\nReported-by: Jie Liu \u003cjeff.liu@oracle.com\u003e\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "e213e26ab3988c516c06eba4dcd030ac052f6dc9",
      "tree": "6e26fbdbb842b387697d73daf6e70cf718269a77",
      "parents": [
        "c812a51d11bbe983f4c24e32b59b265705ddd3c2",
        "efd8f0e6f6c1faa041f228d7113bd3a9db802d49"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 13:20:53 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 05 13:20:53 2010 -0800"
      },
      "message": "Merge branch \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6\n\n* \u0027for_linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6: (33 commits)\n  quota: stop using QUOTA_OK / NO_QUOTA\n  dquot: cleanup dquot initialize routine\n  dquot: move dquot initialization responsibility into the filesystem\n  dquot: cleanup dquot drop routine\n  dquot: move dquot drop responsibility into the filesystem\n  dquot: cleanup dquot transfer routine\n  dquot: move dquot transfer responsibility into the filesystem\n  dquot: cleanup inode allocation / freeing routines\n  dquot: cleanup space allocation / freeing routines\n  ext3: add writepage sanity checks\n  ext3: Truncate allocated blocks if direct IO write fails to update i_size\n  quota: Properly invalidate caches even for filesystems with blocksize \u003c pagesize\n  quota: generalize quota transfer interface\n  quota: sb_quota state flags cleanup\n  jbd: Delay discarding buffers in journal_unmap_buffer\n  ext3: quota_write cross block boundary behaviour\n  quota: drop permission checks from xfs_fs_set_xstate/xfs_fs_set_xquota\n  quota: split out compat_sys_quotactl support from quota.c\n  quota: split out netlink notification support from quota.c\n  quota: remove invalid optimization from quota_sync_all\n  ...\n\nFixed trivial conflicts in fs/namei.c and fs/ufs/inode.c\n"
    },
    {
      "commit": "871a293155a24554e153538d36e3a80fa169aefb",
      "tree": "7e38f5a2f9e87f63cbc4bc1077a4bb49dde441b0",
      "parents": [
        "907f4554e2521cb28b0009d17167760650a9561c"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@infradead.org",
        "time": "Wed Mar 03 09:05:07 2010 -0500"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri Mar 05 00:20:30 2010 +0100"
      },
      "message": "dquot: cleanup dquot initialize routine\n\nGet rid of the initialize dquot operation - it is now always called from\nthe filesystem and if a filesystem really needs it\u0027s own (which none\ncurrently does) it can just call into it\u0027s own routine directly.\n\nRename the now static low-level dquot_initialize helper to __dquot_initialize\nand vfs_dq_init to dquot_initialize to have a consistent namespace.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "b89c54282db0c8634a2d2dc200f196d571750ce5",
      "tree": "fbb34a01b3f0b2f4af6aae9ede9f3f21ef2a378d",
      "parents": [
        "a5f28ae4df291d81d9d23066f88c55ca45e388d3"
      ],
      "author": {
        "name": "Tiger Yang",
        "email": "tiger.yang@oracle.com",
        "time": "Mon Jan 25 14:11:06 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 26 15:41:07 2010 -0800"
      },
      "message": "ocfs2: add extent block stealing for ocfs2 v5\n\nThis patch add extent block (metadata) stealing mechanism for\nextent allocation. This mechanism is same as the inode stealing.\nif no room in slot specific extent_alloc, we will try to\nallocate extent block from the next slot.\n\nSigned-off-by: Tiger Yang \u003ctiger.yang@oracle.com\u003e\nAcked-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "0a1ea437d87af830786605813972e8e277992917",
      "tree": "e3b176e8d592e30aa9bd981ba58e1d625fc16f27",
      "parents": [
        "d622b89a2f58613a9c1407b22b02aecdd2187a7c"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Feb 01 17:05:33 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Feb 02 18:15:35 2010 -0800"
      },
      "message": "ocfs2: Only bug out when page size is larger than cluster size.\n\nIn CoW, we have to make sure that the page is already written\nout to the disk. So we have a BUG_ON(PageDirty(page)).\n\nIn ppc platform we have pagesize\u003d64K, so if the cs\u003d4K, if the\nfile have fragmented clusters, we will map the page many times.\nSee this file as an example.\nTree Depth: 0   Count: 19   Next Free Rec: 14\n\t## Offset        Clusters       Block#          Flags\n\t0  0             4              2164864         0x2 Refcounted\n\t1  4             2              9302792         0x2 Refcounted\n...\n\nWe have to replace the extent recs one by one, so the page with index 0\nwill be mapped and dirtied twice.\n\nI\u0027d like to leave the BUG_ON there while adding a check so that in\ncase we meet with an error in other platforms, we can find it easily.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "d622b89a2f58613a9c1407b22b02aecdd2187a7c",
      "tree": "4987446f5308b324e74dd4bcc0da7c15f728d019",
      "parents": [
        "26636bf6b2010aa84c54d577231e017ba71493d0"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Sat Jan 30 23:32:19 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Feb 02 18:14:20 2010 -0800"
      },
      "message": "ocfs2: Fix memory overflow in cow_by_page.\n\nIn ocfs2_duplicate_clusters_by_page, we calculate map_end\nby shifting page_index. But actually in case we meet with\na large offset(say in a i686 box, poff_t is only 32 bits\nand page_index\u003d2056240), we will overflow. So change the\ntype of page_index to loff_t.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "849254e9bba985e281526b57c02562c7a49a2fcf",
      "tree": "a061f4de1c7b2836185e9d5bd4d7871c79692ca4",
      "parents": [
        "6f40334694dce047d43c6f2cce255b596da6de50",
        "10cf1a02f444fdcd50be47cce3fa8bf08251dd9c"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 23 13:33:07 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Dec 23 13:33:07 2009 -0800"
      },
      "message": "Merge branch \u0027upstream-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2\n\n* \u0027upstream-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2:\n  ocfs2: Set i_nlink properly during reflink.\n  ocfs2: Add reflinked file\u0027s inode to inode hash eariler.\n  ocfs2: refcounttree.c cleanup.\n  ocfs2: Find proper end cpos for a leaf refcount block.\n"
    },
    {
      "commit": "d014d043869cdc591f3a33243d3481fa4479c2d0",
      "tree": "63626829498e647ba058a1ce06419fe7e4d5f97d",
      "parents": [
        "6ec22f9b037fc0c2e00ddb7023fad279c365324d",
        "6070d81eb5f2d4943223c96e7609a53cdc984364"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Dec 07 18:36:35 2009 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Dec 07 18:36:35 2009 +0100"
      },
      "message": "Merge branch \u0027for-next\u0027 into for-linus\n\nConflicts:\n\n\tkernel/irq/chip.c\n"
    },
    {
      "commit": "af901ca181d92aac3a7dc265144a9081a86d8f39",
      "tree": "380054af22521144fbe1364c3bcd55ad24c9bde4",
      "parents": [
        "972b94ffb90ea6d20c589d9a47215df103388ddd"
      ],
      "author": {
        "name": "André Goddard Rosa",
        "email": "andre.goddard@gmail.com",
        "time": "Sat Nov 14 13:09:05 2009 -0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Dec 04 15:39:55 2009 +0100"
      },
      "message": "tree-wide: fix assorted typos all over the place\n\nThat is \"success\", \"unknown\", \"through\", \"performance\", \"[re|un]mapping\"\n, \"access\", \"default\", \"reasonable\", \"[con]currently\", \"temperature\"\n, \"channel\", \"[un]used\", \"application\", \"example\",\"hierarchy\", \"therefore\"\n, \"[over|under]flow\", \"contiguous\", \"threshold\", \"enough\" and others.\n\nSigned-off-by: André Goddard Rosa \u003candre.goddard@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "12d4cec988a8a20927a9795dbf2c6d9ef2f85baa",
      "tree": "107665edf195e6cade0a395d1cfc38d72c45a7b2",
      "parents": [
        "38a04e432768ec0b016f3c687b4de31ac111ae59"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Nov 30 15:08:40 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Dec 02 16:15:01 2009 -0800"
      },
      "message": "ocfs2: refcounttree.c cleanup.\n\nsparse check finds some endian problem and some other minor issues.\nThere is an obsolete function which should be removed.\nSo this patch resolve all these.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "38a04e432768ec0b016f3c687b4de31ac111ae59",
      "tree": "a71a01561d6a654b8daf12c51e2e909f82950573",
      "parents": [
        "56f3f55cf9b604b924353ab6fcdac5fee5637ae3"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Nov 30 14:32:19 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Dec 02 16:14:57 2009 -0800"
      },
      "message": "ocfs2: Find proper end cpos for a leaf refcount block.\n\nocfs2 refcount tree is stored as an extent tree while\nthe leaf ocfs2_refcount_rec points to a refcount block.\n\nThe following step can trip a kernel panic.\nmkfs.ocfs2 -b 512 -C 1M --fs-features\u003drefcount $DEVICE\nmount -t ocfs2 $DEVICE $MNT_DIR\nFILE_NAME\u003d$RANDOM\nFILE_NAME_1\u003d$RANDOM\nFILE_REF\u003d\"${FILE_NAME}_ref\"\nFILE_REF_1\u003d\"${FILE_NAME}_ref_1\"\nfor((i\u003d0;i\u003c305;i++))\ndo\n# /mnt/1048576 is a file with 1048576 sizes.\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME_1\ndone\nfor((i\u003d0;i\u003c3;i++))\ndo\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME\ndone\n\nfor((i\u003d0;i\u003c2;i++))\ndo\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME_1\ndone\n\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME\n\nfor((i\u003d0;i\u003c11;i++))\ndo\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME_1\ndone\nreflink $MNT_DIR/$FILE_NAME $MNT_DIR/$FILE_REF\n# write_f is a program which will write some bytes to a file at offset.\n# write_f -f file_name -l offset -w write_bytes.\n./write_f -f $MNT_DIR/$FILE_REF -l $[310*1048576] -w 4096\n./write_f -f $MNT_DIR/$FILE_REF -l $[306*1048576] -w 4096\n./write_f -f $MNT_DIR/$FILE_REF -l $[311*1048576] -w 4096\n./write_f -f $MNT_DIR/$FILE_NAME -l $[310*1048576] -w 4096\n./write_f -f $MNT_DIR/$FILE_NAME -l $[311*1048576] -w 4096\nreflink $MNT_DIR/$FILE_NAME $MNT_DIR/$FILE_REF_1\n./write_f -f $MNT_DIR/$FILE_NAME -l $[311*1048576] -w 4096\n#kernel panic here.\n\nThe reason is that if the ocfs2_extent_rec is the last record\nin a leaf extent block, the old solution fails to find the\nsuitable end cpos. So this patch try to walk through the b-tree,\nfind the next sub root and get the c_pos the next sub-tree starts\nfrom.\n\nbtw, I have runned tristan\u0027s test case against the patched kernel\nfor several days and this type of kernel panic never happens again.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "2f48d593b6ceb7bb63d34124ceba77d33be298cf",
      "tree": "87c77763eefb395dc25010ce989d4d704615225d",
      "parents": [
        "87f4b1bb98696e6cf84f57df7de41f28c2a7dbeb"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Oct 15 11:10:49 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Oct 28 22:48:23 2009 -0700"
      },
      "message": "ocfs2: duplicate inline data properly during reflink.\n\nThe old reflink fails to handle inodes with inline data and will oops\nif it encounters them.  This patch copies inline data to the new inode.\nExtended attributes may still be refcounted.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nTested-by: Tristan Ye \u003ctristan.ye@oracle.com\u003e\n"
    },
    {
      "commit": "87f4b1bb98696e6cf84f57df7de41f28c2a7dbeb",
      "tree": "edfc70e8681ee3ff98d5a7eb181edf4554deb0f4",
      "parents": [
        "fb5cbe9efd741b16e72133613747f76490bbecd3"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Oct 15 11:10:48 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Oct 28 22:44:19 2009 -0700"
      },
      "message": "ocfs2: Move ocfs2_complete_reflink to the right place.\n\nAs its name ocfs2_complete_reflink indicates, it should\nbe called after all the work for reflink is done, so\nit really should be called after we reflink xattr\nsuccessfully.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nTested-by: Tristan Ye \u003ctristan.ye@oracle.com\u003e\n"
    },
    {
      "commit": "bd50873dc725a9fa72592ecc986c58805e823051",
      "tree": "8d2d4d514f73b6425bf0bf5bd1806949b84a2489",
      "parents": [
        "64871b8d62570fabec3b0959d494f8e0b87f5c4b"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Sep 21 11:25:14 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:51 2009 -0700"
      },
      "message": "ocfs2: Add ioctl for reflink.\n\nThe ioctl will take 3 parameters: old_path, new_path and\npreserve and call vfs_reflink. It is useful when we backport\nreflink features to old kernels.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "09bf27a000209e9e8c9c048b4c50f6bb0dd857bb",
      "tree": "605522b8c41d70d26705dfe4cc9149b6a10724a6",
      "parents": [
        "0fe9b66c65f3ff227da45381afe7612f91e32740"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Sep 21 10:38:17 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:49 2009 -0700"
      },
      "message": "ocfs2: Implement ocfs2_reflink.\n\nImplement ocfs2_reflink.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "0fe9b66c65f3ff227da45381afe7612f91e32740",
      "tree": "14d95c15065419825adb4f0f0a26a5416a64259e",
      "parents": [
        "bc13d347574fc0a8a666bc0f4cc2b635d202e372"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:47:56 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:49 2009 -0700"
      },
      "message": "ocfs2: Add preserve to reflink.\n\nreflink has 2 options for the destination file:\n1. snapshot: reflink will attempt to preserve ownership, permissions,\n   and all other security state in order to create a full snapshot.\n2. new file: it will acquire the data extent sharing but will see the\n   file\u0027s security state and attributes initialized as a new file.\n\nSo add the option to ocfs2.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "7540c1a77b26bc2f9d86a0bfbe6597b05ec5f93d",
      "tree": "4b0414f74d265cfe496d5e5f39c6c6d240f6e713",
      "parents": [
        "ce9c5a54c0f06b0efb4db8720a0616cc6aa0e5b2"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:44:03 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:46 2009 -0700"
      },
      "message": "ocfs2: Don\u0027t merge in 1st refcount ops of reflink.\n\nActually the whole reflink will touch refcount tree 2 times:\n1. It will add the clusters in the extent record to the tree if it\n   isn\u0027t refcounted before.\n2. It will add 1 refcount to these clusters when it add these\n   extent records to the tree.\n\nSo actually we shouldn\u0027t do merge in the 1st operation since the 2nd\none will soon be called and we may have to split it again. Do a merge\nfirst and split soon is a waste of time. So we only merge in the 2nd\nround. This is done by adding a new internal __ocfs2_increase_refcount\nand call it with \"not-merge\" for 1st refcount operation in reflink.\n\nThis also has a side-effect that we don\u0027t need to worry too much about\nthe metadata allocation in the 2nd round since it will only merge and\nno split will happen for those records.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "2999d12f4d5529b282ce201b21444590c3f9f723",
      "tree": "9500f897753a59cf47e66af2cb7fd56c05ec8c1c",
      "parents": [
        "a7fe7a3a1ab5dac8d81e531c060f51e12010133b"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:43:55 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:45 2009 -0700"
      },
      "message": "ocfs2: Add reflink support for xattr.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "8b2c0dba5159570af5721d40490f6c529d721500",
      "tree": "faca76fab3c9a65ba8e7be3aa93d02e4ff53f0cf",
      "parents": [
        "0129241e2b3b90ff83a8c774353e5612d84bd493"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:43:49 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:44 2009 -0700"
      },
      "message": "ocfs2: Call refcount tree remove process properly.\n\nNow with xattr refcount support, we need to check whether\nwe have xattr refcounted before we remove the refcount tree.\n\nNow the mechanism is:\n1) Check whether i_clusters \u003d\u003d 0, if no, exit.\n2) check whether we have i_xattr_loc in dinode. if yes, exit.\n2) Check whether we have inline xattr stored outside, if yes, exit.\n4) Remove the tree.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "0129241e2b3b90ff83a8c774353e5612d84bd493",
      "tree": "eec03f874cbdbc4c9eab4900f2de89fd1747a5ee",
      "parents": [
        "47bca4950bc40fb54e9d41cbbc8b06cd653d2ae2"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Sep 21 13:04:19 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:43 2009 -0700"
      },
      "message": "ocfs2: Attach xattr clusters to refcount tree.\n\nIn ocfs2, when xattr\u0027s value is larger than OCFS2_XATTR_INLINE_SIZE,\nit will be kept outside of the blocks we store xattr entry. And they\nare stored in a b-tree also. So this patch try to attach all these\nclusters to refcount tree also.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "492a8a33e1cb966fa0b5756c5fc11d30c8f8848e",
      "tree": "eacf691b07c8fa3e81c11ff1d6b8773c2dbb9e77",
      "parents": [
        "913580b4cd445c4fb25d7cf167911a8cf6bdb1eb"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:43:17 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:41 2009 -0700"
      },
      "message": "ocfs2: Add CoW support for xattr.\n\nIn order to make 2 transcation(xattr and cow) independent with each other,\nwe CoW the whole xattr out in case we are setting them.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "913580b4cd445c4fb25d7cf167911a8cf6bdb1eb",
      "tree": "24ad6cb14d27f101863035029eb8cea0ee8ed361",
      "parents": [
        "1061f9c1c9f81ed88b5d268a95d8e3ace80da63a"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Aug 24 14:31:03 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:40 2009 -0700"
      },
      "message": "ocfs2: Abstract duplicate clusters process in CoW.\n\nWe currently use pagecache to duplicate clusters in CoW,\nbut it isn\u0027t suitable for xattr case. So abstract it out\nso that the caller can decide which method it use.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "a9063ab9a3827483007124bdb6f9877f0ab4c3f5",
      "tree": "78afcc391daf9d66df5bf34b207aa8e9c53ca7d6",
      "parents": [
        "110a045aca62f6f564e3b68f89af2a3a5a6ecff2"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:40:59 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:39 2009 -0700"
      },
      "message": "ocfs2: handle file attributes issue for reflink.\n\nA reflink creates a snapshot of a file, that means the attributes\nmust be identical except for three exceptions - nlink, ino, and ctime.\n\nAs for time changes, Here is a brief description:\n\n1. Source file:\n   1) atime: Ignore. Let the lazy atime code handle that.\n   2) mtime: don\u0027t touch.\n   3) ctime: If we change the tree (adding REFCOUNTED to at least one\n             extent), update it.\n2. Destination file:\n   1) atime: ignore.\n   2) mtime: we want it to appear identical to the source.\n   3) ctime: update.\n\nThe idea here is that an ls -l will show the same time for the\nsrc and target - it shows mtime.  Backup software like rsync and tar\nwill treat the new file correctly too.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "110a045aca62f6f564e3b68f89af2a3a5a6ecff2",
      "tree": "d7c2df9a59e527eb14add4daf1c0107e486715f4",
      "parents": [
        "37f8a2bfaa8364dd3644cccee8824bb8f5e409a5"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Sat Aug 22 23:54:27 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:38 2009 -0700"
      },
      "message": "ocfs2: Add normal functions for reflink a normal file\u0027s extents.\n\n2 major functions are added in this patch.\n\nocfs2_attach_refcount_tree will create a new refcount tree to the\nold file if it doesn\u0027t have one and insert all the extent records\nto the tree if they are not refcounted.\n\nocfs2_create_reflink_node will:\n1. set the refcount tree to the new file.\n2. call ocfs2_duplicate_extent_list which will iterate all the\n   extents for the old file, insert it to the new file and increase\n   the corresponding referennce count.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "37f8a2bfaa8364dd3644cccee8824bb8f5e409a5",
      "tree": "ab3083179c621c3e8d0be3980aaed96528f90599",
      "parents": [
        "293b2f70b4a16a1ca91efd28ef3d6634262c6887"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Wed Aug 26 09:47:28 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:38 2009 -0700"
      },
      "message": "ocfs2: CoW a reflinked cluster when it is truncated.\n\nWhen we truncate a file to a specific size which resides in a reflinked\ncluster, we need to CoW it since ocfs2_zero_range_for_truncate will\nzero the space after the size(just another type of write).\n\nSo we add a \"max_cpos\" in ocfs2_refcount_cow so that it will stop when\nit hit the max cluster offset.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "6ae23c5555176c5b23480c9c578ff27437085ba5",
      "tree": "4afb1c33e850fa751c6136d65a041f70fe146fe8",
      "parents": [
        "6f70fa519976a379d72781d927cf8e5f5b05ec86"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:30:55 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:36 2009 -0700"
      },
      "message": "ocfs2: CoW refcount tree improvement.\n\nDuring CoW, if the old extent record is refcounted, we allocate\nsom new clusters and do CoW. Actually we can have some improvement\nhere. If the old extent has refcount\u003d1, that means now it is only\nused by this file. So we don\u0027t need to allocate new clusters, just\nremove the refcounted flag and it is OK. We also have to remove\nit from the refcount tree while not deleting it.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "6f70fa519976a379d72781d927cf8e5f5b05ec86",
      "tree": "563cdeb116f2016c3c4b7a627a51f0a85eec1566",
      "parents": [
        "bcbbb24a6a5c5b3e7b8e5284e0bfa23f45c32377"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 25 08:05:12 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:36 2009 -0700"
      },
      "message": "ocfs2: Add CoW support.\n\nThis patch try CoW support for a refcounted record.\n\nthe whole process will be:\n1. Calculate how many clusters we need to CoW and where we start.\n   Extents that are not completely encompassed by the write will\n   be broken on 1MB boundaries.\n2. Do CoW for the clusters with the help of page cache.\n3. Change the b-tree structure with the new allocated clusters.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "bcbbb24a6a5c5b3e7b8e5284e0bfa23f45c32377",
      "tree": "e45a6cfd75cd8005fdf280c2f5f57c09186249dd",
      "parents": [
        "1aa75fea64bc26bda9be9b1b20ae253d7a481877"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:29:12 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:35 2009 -0700"
      },
      "message": "ocfs2: Decrement refcount when truncating refcounted extents.\n\nAdd \u0027Decrement refcount for delete\u0027 in to the normal truncate\nprocess. So for a refcounted extent record, call refcount rec\ndecrementation instead of cluster free.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "1aa75fea64bc26bda9be9b1b20ae253d7a481877",
      "tree": "5da0c235f1323b9771e44a18a5452c83c0969547",
      "parents": [
        "1823cb0b9fe5e6d48017ee3f92428f69c0235d87"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:28:39 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:34 2009 -0700"
      },
      "message": "ocfs2: Add functions for extents refcounted.\n\nAdd function ocfs2_mark_extent_refcounted which can mark\nan extent refcounted.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "1823cb0b9fe5e6d48017ee3f92428f69c0235d87",
      "tree": "461e5d6cc255c400acac69dd968fae935a9c073f",
      "parents": [
        "e73a819db9c2d6c4065b7cab7374709b6939e8f1"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:24:49 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:33 2009 -0700"
      },
      "message": "ocfs2: Add support of decrementing refcount for delete.\n\n    Given a physical cpos and length, decrement the refcount\nin the tree. If the refcount for any portion of the extent goes\nto zero, that portion is queued for freeing.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "e73a819db9c2d6c4065b7cab7374709b6939e8f1",
      "tree": "40968bc5b37d3b55e382267683c9612d4697f036",
      "parents": [
        "e2e9f6082b5ff099978774d5c0148e062344c2f9"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 11 14:33:14 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:33 2009 -0700"
      },
      "message": "ocfs2: Add support for incrementing refcount in the tree.\n\n    Given a physical cpos and length, increment the refcount\nin the tree. If the extent has not been seen before, a refcount\nrecord is created for it. Refcount records may be merged or\nsplit by this operation.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "8bf396de984e68491569b49770e4fd7aca40ba65",
      "tree": "1c755fa7af20e14722378df729201e6f8497fadb",
      "parents": [
        "374a263e790c4de85844283c098810a92985f623"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Aug 24 11:12:02 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:30 2009 -0700"
      },
      "message": "ocfs2: Basic tree root operation.\n\nAdd basic refcount tree root operation.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "374a263e790c4de85844283c098810a92985f623",
      "tree": "a72b1f072b973723ea1cf7def27608717cf1c033",
      "parents": [
        "c732eb16bf07f9bfb7fa72b6868462471273bdbd"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Aug 24 11:13:37 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:29 2009 -0700"
      },
      "message": "ocfs2: Add refcount tree lock mechanism.\n\nImplement locking around struct ocfs2_refcount_tree.  This protects\nall read/write operations on refcount trees.  ocfs2_refcount_tree\nhas its own lock and its own caching_info, protecting buffers among\nmultiple nodes.\n\nUser must call ocfs2_lock_refcount_tree before his operation on\nthe tree and unlock it after that.\n\nocfs2_refcount_trees are referenced by the block number of the\nrefcount tree root block, So we create an rb-tree on the ocfs2_super\nto look them up.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n\n"
    },
    {
      "commit": "c732eb16bf07f9bfb7fa72b6868462471273bdbd",
      "tree": "8e6cfce9d9d5ca1d5dcd1d52ca1e291a3928c6fe",
      "parents": [
        "8dec98edfe9684ce00b580a09dde3dcd21ee785b"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:21:00 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:28 2009 -0700"
      },
      "message": "ocfs2: Add caching info for refcount tree.\n\nrefcount tree should use its own caching info so that when\nwe downconvert the refcount tree lock, we can drop all the\ncached buffer head.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4",
      "tree": "23aabcc02bc4437c975626012248a7fad3a307de",
      "parents": [
        "93c97087a646429f4dc0d73298d64674ddd5cde8"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:19:26 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:26 2009 -0700"
      },
      "message": "ocfs2: Add ocfs2_read_refcount_block.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    }
  ]
}
