)]}'
{
  "log": [
    {
      "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"
    }
  ]
}
