)]}'
{
  "log": [
    {
      "commit": "bc13d347574fc0a8a666bc0f4cc2b635d202e372",
      "tree": "47eb9a764d3689ddd860d96f6cd80cf26a84bcc2",
      "parents": [
        "19bd341f6a6c6b314bcac55bbd906bfd3603fe9e"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:44:14 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:48 2009 -0700"
      },
      "message": "ocfs2: Create reflinked file in orphan dir.\n\nreflink is a very complicated process, so it can\u0027t be integrated\ninto one transaction. So if the system panic in the operation, we\nmay leave a unfinished inode in the destication directory.\n\nSo we will try to create an inode in orphan_dir first, reflink it\nto the src file and then move it to the destication file in the end.\nIn that way we won\u0027t be afraid of any corruption during the reflink.\n\nThis patch adds 2 functions for orphan_dir operation:\n1. Create a new inode in orphand dir.\n2. Move an inode to a target dir.\n\nNote:\nfsck.ocfs2 should work for us to remove the unfinished file in the\norphan_dir.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n\n"
    },
    {
      "commit": "19bd341f6a6c6b314bcac55bbd906bfd3603fe9e",
      "tree": "2eefd82e6ae2495b4d3288dc452763eea8d2fb37",
      "parents": [
        "c18b812d127a971901180188b918a7cd98ccd4d6"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:44:10 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:47 2009 -0700"
      },
      "message": "ocfs2: Use proper parameter for some inode operation.\n\nIn order to make the original function more suitable for reflink,\nwe modify the following inode operations. Both are tiny.\n\n1. ocfs2_mknod_locked only use dentry for mlog, so move it to\n   the caller so that reflink can use it without dentry.\n2. ocfs2_prepare_orphan_dir only want inode to get its ip_blkno.\n   So use ip_blkno instead.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "c18b812d127a971901180188b918a7cd98ccd4d6",
      "tree": "3f2d0a7b1fada7aaade612d14dcaa7229a4e06c9",
      "parents": [
        "7540c1a77b26bc2f9d86a0bfbe6597b05ec5f93d"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:44:07 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:46 2009 -0700"
      },
      "message": "ocfs2: Make transaction extend more efficient.\n\nIn ocfs2_extend_rotate_transaction, op_credits is the orignal\ncredits in the handle and we only want to extend the credits\nfor the rotation, but the old solution always double it. It\nis harmless for some minor operations, but for actions like\nreflink we may rotate tree many times and cause the credits\nincrease dramatically. So this patch try to only increase\nthe desired credits.\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": "ce9c5a54c0f06b0efb4db8720a0616cc6aa0e5b2",
      "tree": "617a8f4eb0d30c71691f5e786417a32c1c95cecb",
      "parents": [
        "2999d12f4d5529b282ce201b21444590c3f9f723"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:43:59 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:45 2009 -0700"
      },
      "message": "ocfs2: Modify removing xattr process for refcount.\n\nThe old xattr value remove is quite simple, it just erase the\ntree and free the clusters. But as we have added refcount support,\nThe process is a little complicated.\n\nWe have to lock the refcount tree at the beginning, what\u0027s more,\nwe may split the refcount tree in some cases, so meta/credits are\nneeded.\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": "a7fe7a3a1ab5dac8d81e531c060f51e12010133b",
      "tree": "9eb5a21cc29e6913d3f591cdab37f59fbfa562d2",
      "parents": [
        "8b2c0dba5159570af5721d40490f6c529d721500"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:43:52 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:44 2009 -0700"
      },
      "message": "ocfs2: Create an xattr indexed block if needed.\n\nWith reflink, there is a need that we create a new xattr indexed\nblock from the very beginning. So add a new parameter for\nocfs2_create_xattr_block.\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": "47bca4950bc40fb54e9d41cbbc8b06cd653d2ae2",
      "tree": "17d36e5b9f330cda55b6ee8ff9a0293bd080040e",
      "parents": [
        "5aea1f0ef4024ba28213c10181e1b16ec678c82d"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:43:42 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:43 2009 -0700"
      },
      "message": "ocfs2: Abstract ocfs2 xattr tree extend rec iteration process.\n\nCurrently we have ocfs2_iterate_xattr_buckets which can receive\na para and a callback to iterate a series of bucket. It is good.\nBut actually the 2 callers ocfs2_xattr_tree_list_index_block and\nocfs2_delete_xattr_index_block are almost the same. The only\ndifference is that the latter need to handle the extent record\nalso. So add a new function named ocfs2_iterate_xattr_index_block.\nIt can be given func callback which are used for exten record.\nSo now we only have one iteration function for the xattr index\nblock. Ane what\u0027s more, it is useful for our future reflink\noperations.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "5aea1f0ef4024ba28213c10181e1b16ec678c82d",
      "tree": "ca28a8214cf9a8761fbac6b5e8aef84aa22fff54",
      "parents": [
        "fd68a894fc9641f816d9cffa58e853ba91cbc1a1"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:43:24 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:42 2009 -0700"
      },
      "message": "ocfs2: Abstract the creation of xattr block.\n\nIn xattr reflink, we also need to create xattr block, so\nabstract the process out.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "fd68a894fc9641f816d9cffa58e853ba91cbc1a1",
      "tree": "3af84546b32c54aba009f23681fd30c28df7240b",
      "parents": [
        "492a8a33e1cb966fa0b5756c5fc11d30c8f8848e"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:43:21 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:41 2009 -0700"
      },
      "message": "ocfs2: Remove inode from ocfs2_xattr_bucket_get_name_value.\n\nIn ocfs2_xattr_bucket_get_name_value, actually we only use\nsuper_block. So use it.\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": "1061f9c1c9f81ed88b5d268a95d8e3ace80da63a",
      "tree": "de43d1c1122ade36f079f0381712bc0f06556ac5",
      "parents": [
        "a9063ab9a3827483007124bdb6f9877f0ab4c3f5"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:41:57 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:39 2009 -0700"
      },
      "message": "ocfs2: Return extent flags for xattr value tree.\n\nWith the new refcount tree, xattr value can also be refcounted\namong multiple files. So return the appropriate extent flags\nso that CoW can used it later.\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": "293b2f70b4a16a1ca91efd28ef3d6634262c6887",
      "tree": "4a85078faae7c529fa313d4964e0d6ad0905a612",
      "parents": [
        "6ae23c5555176c5b23480c9c578ff27437085ba5"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 25 08:02:48 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:37 2009 -0700"
      },
      "message": "ocfs2: Integrate CoW in file write.\n\nWhen we use mmap, we CoW the refcountd clusters in\nocfs2_write_begin_nolock. While for normal file\nio(including directio), we do CoW in\nocfs2_prepare_inode_for_write.\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": "e2e9f6082b5ff099978774d5c0148e062344c2f9",
      "tree": "1da7dc993c77ca08cb83aba8f21e0da9fd055044",
      "parents": [
        "fe924415957e60471536762172d127e85519ef78"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:22:34 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:32 2009 -0700"
      },
      "message": "ocfs2: move tree path functions to alloc.h.\n\nNow fs/ocfs2/alloc.c has more than 7000 lines. It contains our\nbasic b-tree operation. Although we have already make our b-tree\noperation generic, the basic structrue ocfs2_path which is used\nto iterate one b-tree branch is still static and limited to only\nused in alloc.c. As refcount tree need them and I don\u0027t want to\nadd any more b-tree unrelated code to alloc.c, export them out.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e \n"
    },
    {
      "commit": "fe924415957e60471536762172d127e85519ef78",
      "tree": "c26f47180bbc14fda78dae0cb3d40287d6dafd18",
      "parents": [
        "555936bfcb1af26c6919d6cedb83710bb03d4322"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:22:25 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:31 2009 -0700"
      },
      "message": "ocfs2: Add refcount b-tree as a new extent tree.\n\nAdd refcount b-tree as a new extent tree so that it can\nuse the b-tree to store and maniuplate ocfs2_refcount_rec.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "555936bfcb1af26c6919d6cedb83710bb03d4322",
      "tree": "8d63ff0c4a0ff9587cb84dcd8ca9333c94d34ff8",
      "parents": [
        "853a3a1439b18d5a70ada2cb3fcd468e70b7d095"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:22:21 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:31 2009 -0700"
      },
      "message": "ocfs2: Abstract extent split process.\n\nocfs2_mark_extent_written actually does the following things:\n1. check the parameters.\n2. initialize the left_path and split_rec.\n3. call __ocfs2_mark_extent_written. it will do:\n   1) check the flags of unwritten\n   2) do the real split work.\nThe whole process is packed tightly somehow. So this patch\nwill abstract 2 different functions so that future b-tree\noperation can work with it.\n\n1. __ocfs2_split_extent will accept path and split_rec and do\n  the real split work.\n2. ocfs2_change_extent_flag will accept a new flag and initialize\n   path and split_rec.\n\nSo now ocfs2_mark_extent_written will do:\n1. check the parameters.\n2. call ocfs2_change_extent_flag.\n   1) initalize the left_path and split_rec.\n   2) check whether the new flags conflict with the old one.\n   3) call __ocfs2_split_extent to do the split.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "853a3a1439b18d5a70ada2cb3fcd468e70b7d095",
      "tree": "96f4a2f3ca4380a6d0feb6f1b8af038bb62946c5",
      "parents": [
        "8bf396de984e68491569b49770e4fd7aca40ba65"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:22:18 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:30 2009 -0700"
      },
      "message": "ocfs2: Wrap ocfs2_extent_contig in ocfs2_extent_tree.\n\nAdd a new operation eo_ocfs2_extent_contig int the extent tree\u0027s\noperations vector. So that with the new refcount tree, We want\nthis so that refcount trees can always return CONTIG_NONE and\nprevent extent merging.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n\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": "8dec98edfe9684ce00b580a09dde3dcd21ee785b",
      "tree": "3002e990974163a09ea6d427d7cf775aaca7acca",
      "parents": [
        "a433848132d8cdfb8173745b922ddb919de11527"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:19:58 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:28 2009 -0700"
      },
      "message": "ocfs2: Add new refcount tree lock resource in dlmglue.\n\nrefcount tree lock resource is used to protect refcount\ntree read/write among multiple nodes.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "a433848132d8cdfb8173745b922ddb919de11527",
      "tree": "b12db738743e4eb4a7222996300fa468b1dc39e5",
      "parents": [
        "f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:19:29 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:27 2009 -0700"
      },
      "message": "ocfs2: Abstract caching info checkpoint.\n\nIn meta downconvert, we need to checkpoint the metadata in an inode.\nFor refcount tree, we also need it. So abstract the process out.\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"
    },
    {
      "commit": "93c97087a646429f4dc0d73298d64674ddd5cde8",
      "tree": "d6c58b32b031a0e23f86e1574e688585fcc26455",
      "parents": [
        "721f69c404c51a5d1dc93fddb48ee936e8e23770"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:19:20 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:26 2009 -0700"
      },
      "message": "ocfs2: Add metaecc for ocfs2_refcount_block.\n\nAdd metaecc and journal trigger for ocfs2_refcount_block.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "721f69c404c51a5d1dc93fddb48ee936e8e23770",
      "tree": "10aed3ec236cb7cb677f380d08710c3786d22dcd",
      "parents": [
        "5e404e9ed1b05cafb044bd46792e50197df805ed"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Aug 18 11:17:49 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Sep 22 20:09:25 2009 -0700"
      },
      "message": "ocfs2: Define refcount tree structure.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "5e404e9ed1b05cafb044bd46792e50197df805ed",
      "tree": "e3146e03f8a0fc12307db0cbea900728a36ffaac",
      "parents": [
        "a1cf076ba93f9fdf3eb4195f9f43d1e7cb7550f2"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 03:54:22 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:13 2009 -0700"
      },
      "message": "ocfs2: Pass ocfs2_caching_info into ocfs_init_*_extent_tree().\n\nWith this commit, extent tree operations are divorced from inodes and\nrely on ocfs2_caching_info.  Phew!\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "a1cf076ba93f9fdf3eb4195f9f43d1e7cb7550f2",
      "tree": "27fbf5b5b5b87e3d427d9deee06ec882370d1d1a",
      "parents": [
        "f3868d0fa2e20d923087a8296fda47b0afe7f9ba"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 03:45:49 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:12 2009 -0700"
      },
      "message": "ocfs2: __ocfs2_mark_extent_written() doesn\u0027t need struct inode.\n\nWe only allow unwritten extents on data, so the toplevel\nocfs2_mark_extent_written() can use an inode all it wants.  But the\nsubfunction isn\u0027t even using the inode argument.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "f3868d0fa2e20d923087a8296fda47b0afe7f9ba",
      "tree": "d9a97217cd42d379cfa5b82a866071e3d1428a23",
      "parents": [
        "d231129f44e7ead14f5f496e664ff1e3883a7b25"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Feb 17 19:46:04 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:11 2009 -0700"
      },
      "message": "ocfs2: Teach ocfs2_replace_extent_rec() to use an extent_tree.\n\nDon\u0027t use a struct inode anymore.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "d231129f44e7ead14f5f496e664ff1e3883a7b25",
      "tree": "b7e94ee43d2a3c53e1d93df24208ab734256c007",
      "parents": [
        "dbdcf6a48a40e6c9d7081393d793c4f1c5bb4fcf"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 03:43:22 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:11 2009 -0700"
      },
      "message": "ocfs2: ocfs2_split_and_insert() no longer needs struct inode.\n\nIt already has an extent_tree.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "dbdcf6a48a40e6c9d7081393d793c4f1c5bb4fcf",
      "tree": "d50b179dbbe1a62ea98a0b65ecf33c9a86d906b0",
      "parents": [
        "cbee7e1a6a1a2a3d6eda1f76ffc38a3ed3eeb6cc"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 03:41:26 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:10 2009 -0700"
      },
      "message": "ocfs2: ocfs2_remove_extent() no longer needs struct inode.\n\nOne more generic btree function that is isolated from struct inode.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "cbee7e1a6a1a2a3d6eda1f76ffc38a3ed3eeb6cc",
      "tree": "438ac4917675c27ecd3dce694ae3affd7ebf6c91",
      "parents": [
        "cc79d8c19e9d39446525a1026f1a21761f5d3cd2"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 03:34:15 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:09 2009 -0700"
      },
      "message": "ocfs2: ocfs2_add_clusters_in_btree() no longer needs struct inode.\n\nOne more function that doesn\u0027t need a struct inode to pass to its\nchildren.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "cc79d8c19e9d39446525a1026f1a21761f5d3cd2",
      "tree": "3c9788c2e5ef0c51734dad8186ecd83bf4dd6584",
      "parents": [
        "92ba470c44c1404ff18ca0f4ecce1e5b116bb933"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 03:24:43 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:09 2009 -0700"
      },
      "message": "ocfs2: ocfs2_insert_extent() no longer needs struct inode.\n\nOne more function down, no inode in the entire insert-extent chain.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "92ba470c44c1404ff18ca0f4ecce1e5b116bb933",
      "tree": "76e29703dfc37acb9ad3d129936ae4d1ddfee258",
      "parents": [
        "627961b77e68b725851cb227db10084bf15f6920"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 03:18:34 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:08 2009 -0700"
      },
      "message": "ocfs2: Make extent map insertion an extent_tree_operation.\n\nocfs2_insert_extent() wants to insert a record into the extent map if\nit\u0027s an inode data extent.  But since many btrees can call that\nfunction, let\u0027s make it an op on ocfs2_extent_tree.  Other tree types\ncan leave it empty.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "627961b77e68b725851cb227db10084bf15f6920",
      "tree": "2569de1a07782a3d65161b018e90335d844112f0",
      "parents": [
        "1ef61b33148a6b32b6d28383cd72ceeddfc7054d"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 03:14:38 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:08 2009 -0700"
      },
      "message": "ocfs2: ocfs2_figure_insert_type() no longer needs struct inode.\n\nIt\u0027s not using it, so remove it from the parameter list.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "1ef61b33148a6b32b6d28383cd72ceeddfc7054d",
      "tree": "8e0c3e6131fc72847f37f1ac963b7ba7efe9be3c",
      "parents": [
        "a29702914ad36443d83b5250b3bfa1bf91e6b239"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 03:12:33 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:07 2009 -0700"
      },
      "message": "ocfs2: Remove inode from ocfs2_figure_extent_contig().\n\nIt already has an ocfs2_extent_tree and doesn\u0027t need the inode.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "a29702914ad36443d83b5250b3bfa1bf91e6b239",
      "tree": "74937c792f6ff893dd108497119895127a16f053",
      "parents": [
        "b4a176515c715f0c6db1759a39cd9c4175e5a23a"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 03:09:54 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:07 2009 -0700"
      },
      "message": "ocfs2: Swap inode for extent_tree in ocfs2_figure_merge_contig_type().\n\nWe don\u0027t want struct inode in generic btree operations.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "b4a176515c715f0c6db1759a39cd9c4175e5a23a",
      "tree": "e929ed1a0acb1c16755d8584f11e186cf35bc1b4",
      "parents": [
        "3505bec01829a8f690259517add55c7941a4d3d5"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 03:07:09 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:05 2009 -0700"
      },
      "message": "ocfs2: ocfs2_extent_contig() only requires the superblock.\n\nDon\u0027t pass the inode in.  We don\u0027t want it around for generic btree\noperations.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "3505bec01829a8f690259517add55c7941a4d3d5",
      "tree": "981a67f2b16e1aaa03339e9920252b1e6ba173c8",
      "parents": [
        "c38e52bb1c0187186bd3c4a2b318ffe69cd2fdf8"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 02:57:58 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:05 2009 -0700"
      },
      "message": "ocfs2: ocfs2_do_insert_extent() and ocfs2_insert_path() no longer need an inode.\n\nThey aren\u0027t using it, so remove it from their parameter lists.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "c38e52bb1c0187186bd3c4a2b318ffe69cd2fdf8",
      "tree": "16f8c548f3797822e1a2da68b902ef1a5f8fa8b3",
      "parents": [
        "d562862314a7b131a630f7b912490312387542fb"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 02:56:23 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:05 2009 -0700"
      },
      "message": "ocfs2: Give ocfs2_split_record() an extent_tree instead of an inode.\n\nAnother on the way to generic btree functions.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "d562862314a7b131a630f7b912490312387542fb",
      "tree": "1ddad8ba544ac712ac1f889729a19511aaefdf22",
      "parents": [
        "4c911eefca316f580f174940cd67d561b4b7e6e8"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 02:54:36 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:04 2009 -0700"
      },
      "message": "ocfs2: ocfs2_insert_at_leaf() doesn\u0027t need struct inode.\n\nGive it an ocfs2_extent_tree and it is happy.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "4c911eefca316f580f174940cd67d561b4b7e6e8",
      "tree": "785ae90d5e2f0fe71c37aa39027c7144abab3d0c",
      "parents": [
        "043beebb6c467a07ccd7aa666095f87fade1c28e"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 02:50:12 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:03 2009 -0700"
      },
      "message": "ocfs2: Make truncating the extent map an extent_tree_operation.\n\nocfs2_remove_extent() wants to truncate the extent map if it\u0027s\ntruncating an inode data extent.  But since many btrees can call that\nfunction, let\u0027s make it an op on ocfs2_extent_tree.  Other tree types\ncan leave it empty.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "043beebb6c467a07ccd7aa666095f87fade1c28e",
      "tree": "6e62d3e03ff20a633bd213420bc67ec2cb25b0bb",
      "parents": [
        "d401dc12fcced123909eba10334fb5d78866d1a9"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 02:42:30 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:03 2009 -0700"
      },
      "message": "ocfs2: ocfs2_truncate_rec() doesn\u0027t need struct inode.\n\nIt\u0027s not using it anymore.  Remove it from the parameter list.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "d401dc12fcced123909eba10334fb5d78866d1a9",
      "tree": "fb0c3042753937d64eeb3d4b60a9dd4ff6ee8150",
      "parents": [
        "c495dd24ac00654f99540f533185e1fcc9534009"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 02:24:10 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:02 2009 -0700"
      },
      "message": "ocfs2: ocfs2_grow_branch() and ocfs2_append_rec_to_path() lose struct inode.\n\nocfs2_grow_branch() not really using it other than to pass it to the\nsubfunctions ocfs2_shift_tree_depth(), ocfs2_find_branch_target(), and\nocfs2_add_branch().  The first two weren\u0027t it either, so they drop the\nargument.  ocfs2_add_branch() only passed it to\nocfs2_adjust_rightmost_branch(), which drops the inode argument and uses\nthe ocfs2_extent_tree as well.\n\nocfs2_append_rec_to_path() can be take an ocfs2_extent_tree instead of\nthe inode.  The function ocfs2_adjust_rightmost_records() goes along for\nthe ride.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "c495dd24ac00654f99540f533185e1fcc9534009",
      "tree": "2c9837964f002e76011ee06f83b8bcee74a78c23",
      "parents": [
        "4fe82c312a7d975a9d0f591dc9180c1197ee4270"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 02:19:11 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:02 2009 -0700"
      },
      "message": "ocfs2: ocfs2_try_to_merge_extent() doesn\u0027t need struct inode.\n\nIt\u0027s not using it, so remove it from the parameter list.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "4fe82c312a7d975a9d0f591dc9180c1197ee4270",
      "tree": "53ca5d0aeeeb92768ee993ec69324b3b6767f09f",
      "parents": [
        "70f18c08b476e315c8ee17ea34b55ea1957e7e7d"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 02:16:08 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:01 2009 -0700"
      },
      "message": "ocfs2: ocfs2_merge_rec_left/right() no longer need struct inode.\n\nDrop it from the parameters - they already have ocfs2_extent_list.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "70f18c08b476e315c8ee17ea34b55ea1957e7e7d",
      "tree": "e53645ea3a3ff2e3d45a31c0f963815f3cfa7fb9",
      "parents": [
        "e46f74dc357947e2aed9bdd63cf335c5fd23810b"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 13 02:09:31 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:08:00 2009 -0700"
      },
      "message": "ocfs2: ocfs2_rotate_tree_left() no longer needs struct inode.\n\nIt already gets ocfs2_extent_tree, so we can just use that.  This chains\nto the same modification for ocfs2_remove_rightmost_path() and\nocfs2_rotate_rightmost_leaf_left().\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "e46f74dc357947e2aed9bdd63cf335c5fd23810b",
      "tree": "2223c4659223d10415a72760a80981e4f784a235",
      "parents": [
        "1e2dd63fe0b6e99b81904a61090db801978b9520"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 19:47:43 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:59 2009 -0700"
      },
      "message": "ocfs2: __ocfs2_rotate_tree_left() doesn\u0027t need struct inode.\n\nIt already has struct ocfs2_extent_tree, which has the caching info.  So\nwe don\u0027t need to pass it struct inode.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "1e2dd63fe0b6e99b81904a61090db801978b9520",
      "tree": "af22705466dda6be2e18d8a23a267e97ea57147b",
      "parents": [
        "09106bae05c3350e8d0ef0ede90b1c3da4bda2f8"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 19:45:28 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:59 2009 -0700"
      },
      "message": "ocfs2: ocfs2_rotate_subtree_left() doesn\u0027t need struct inode.\n\nIt already has struct ocfs2_extent_tree, which has the caching info.  So\nwe don\u0027t need to pass it struct inode.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "09106bae05c3350e8d0ef0ede90b1c3da4bda2f8",
      "tree": "73e216e39897e9519b0e30843cddbd20074fcdca",
      "parents": [
        "1bbf0b8d606645c7596ee641acfbf042765c9719"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 19:43:57 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:58 2009 -0700"
      },
      "message": "ocfs2: ocfs2_update_edge_lengths() doesn\u0027t need struct inode.\n\nPass in the extent tree, which is all we need.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "1bbf0b8d606645c7596ee641acfbf042765c9719",
      "tree": "7d0f4fd611b4617ed52ed6dad7332334381dbe0e",
      "parents": [
        "6136ca5f5f9fd38da399e9ff9380f537c1b3b901"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 19:42:08 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:58 2009 -0700"
      },
      "message": "ocfs2: ocfs2_rotate_tree_right() doesn\u0027t need struct inode.\n\nWe don\u0027t need struct inode in ocfs2_rotate_tree_right() anymore.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "6136ca5f5f9fd38da399e9ff9380f537c1b3b901",
      "tree": "e2927c3b6084a7ea16f872a61011cbcf505f570c",
      "parents": [
        "7dc028056750328e74ca807041c822068384fe16"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 19:32:43 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:57 2009 -0700"
      },
      "message": "ocfs2: Drop struct inode from ocfs2_extent_tree_operations.\n\nWe can get to the inode from the caching information.  Other parent\ntypes don\u0027t need it.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "7dc028056750328e74ca807041c822068384fe16",
      "tree": "507d64e5d1136afea9ad54b9011fea4dfbe8b15f",
      "parents": [
        "5c601aba8c5d9d5f944cf02b59e3288dd72ae6cf"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 19:20:13 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:55 2009 -0700"
      },
      "message": "ocfs2: Pass ocfs2_extent_tree to ocfs2_get_subtree_root()\n\nGet rid of the inode argument.  Use extent_tree instead.  This means a\nfew more functions have to pass an extent_tree around.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "5c601aba8c5d9d5f944cf02b59e3288dd72ae6cf",
      "tree": "7b2a8f2daecfa433a6fa73a7cfecd594fe87dfaf",
      "parents": [
        "4619c73e7c9bd10bac6b60925fa28d5a2eeaf6ed"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 19:10:13 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:55 2009 -0700"
      },
      "message": "ocfs2: Get inode out of ocfs2_rotate_subtree_root_right().\n\nPass the ocfs2_extent_list down through ocfs2_rotate_tree_right() and\nget rid of struct inode in ocfs2_rotate_subtree_root_right().\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "4619c73e7c9bd10bac6b60925fa28d5a2eeaf6ed",
      "tree": "1e280a72eac74615bd298574d747ca543051b766",
      "parents": [
        "6641b0ce3274d979338cb67b2f562189dcbc1c28"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 19:02:36 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:54 2009 -0700"
      },
      "message": "ocfs2: ocfs2_complete_edge_insert() doesn\u0027t need struct inode at all.\n\nCompletely unused argument.  Get rid of it.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "6641b0ce3274d979338cb67b2f562189dcbc1c28",
      "tree": "840466924b7c88fe6959eb4373708198c507f554",
      "parents": [
        "42a5a7a9a5abf9a566b91c51137921957b9a14e4"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 18:57:52 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:54 2009 -0700"
      },
      "message": "ocfs2: Pass ocfs2_extent_tree to ocfs2_unlink_path()\n\nocfs2_unlink_path() doesn\u0027t need struct inode, so let\u0027s pass it struct\nocfs2_extent_tree.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "42a5a7a9a5abf9a566b91c51137921957b9a14e4",
      "tree": "ec676255875d1290ac994f73e3a4dc09fb705b48",
      "parents": [
        "facdb77f54f09a33baf6b649496f5dd1d7922a7e"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 18:49:19 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:53 2009 -0700"
      },
      "message": "ocfs2: ocfs2_create_new_meta_bhs() doesn\u0027t need struct inode.\n\nPass struct ocfs2_extent_tree into ocfs2_create_new_meta_bhs().  It no\nlonger needs struct inode or ocfs2_super.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "facdb77f54f09a33baf6b649496f5dd1d7922a7e",
      "tree": "676de8877773ae38b8379bc3d50073c0710e2d8c",
      "parents": [
        "3d03a305ded8057155bd3c801e64ffef9f534827"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 18:08:48 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:53 2009 -0700"
      },
      "message": "ocfs2: ocfs2_find_path() only needs the caching info\n\nocfs2_find_path and ocfs2_find_leaf() walk our btrees, reading extent\nblocks.  They need struct ocfs2_caching_info for that, but not struct\ninode.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "3d03a305ded8057155bd3c801e64ffef9f534827",
      "tree": "4f220711f42c1abbd80a9fe8c2b6ee47e846a587",
      "parents": [
        "d9a0a1f83bf083b55b3c1f16efddecc31abace61"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 17:49:26 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:52 2009 -0700"
      },
      "message": "ocfs2: Pass ocfs2_caching_info to ocfs2_read_extent_block().\n\nextent blocks belong to btrees on more than just inodes, so we want to\npass the ocfs2_caching_info structure directly to\nocfs2_read_extent_block().  A number of places in alloc.c can now drop\nstruct inode from their argument list.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "d9a0a1f83bf083b55b3c1f16efddecc31abace61",
      "tree": "7e75311f678fb943f2a0b14c91a0877fd7813efe",
      "parents": [
        "0cf2f7632b1789b811ab20b611c4156e6de2b055"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 17:32:34 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:51 2009 -0700"
      },
      "message": "ocfs2: Store the ocfs2_caching_info on ocfs2_extent_tree.\n\nWhat do we cache?  Metadata blocks.  What are most of our non-inode metadata\nblocks?  Extent blocks for our btrees.  struct ocfs2_extent_tree is the\nmain structure for managing those.  So let\u0027s store the associated\nocfs2_caching_info there.\n\nThis means that ocfs2_et_root_journal_access() doesn\u0027t need struct inode\nanymore, and any place that has an et can refer to et-\u003eet_ci instead of\nINODE_CACHE(inode).\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "0cf2f7632b1789b811ab20b611c4156e6de2b055",
      "tree": "34f7cf3584e4fa2bc187d4b75ce052cb98739b0e",
      "parents": [
        "292dd27ec76b96cebcef576f330ab121f59ccf05"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 16:41:25 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:50 2009 -0700"
      },
      "message": "ocfs2: Pass struct ocfs2_caching_info to the journal functions.\n\nThe next step in divorcing metadata I/O management from struct inode is\nto pass struct ocfs2_caching_info to the journal functions.  Thus the\njournal locks a metadata cache with the cache io_lock function.  It also\ncan compare ci_last_trans and ci_created_trans directly.\n\nThis is a large patch because of all the places we change\nocfs2_journal_access..(handle, inode, ...) to\nocfs2_journal_access..(handle, INODE_CACHE(inode), ...).\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "292dd27ec76b96cebcef576f330ab121f59ccf05",
      "tree": "d98f4d359f610e7dad53eb5b68fdb1517a043fb3",
      "parents": [
        "66fb345ddd2d343e36692da0ff66126d7a99dc1b"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 15:41:59 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:49 2009 -0700"
      },
      "message": "ocfs2: move ip_created_trans to struct ocfs2_caching_info\n\nSimilar ip_last_trans, ip_created_trans tracks the creation of a journal\nmanaged inode.  This specifically tracks what transaction created the\ninode.  This is so the code can know if the inode has ever been written\nto disk.\n\nThis behavior is desirable for any journal managed object.  We move it\nto struct ocfs2_caching_info as ci_created_trans so that any object\nusing ocfs2_caching_info can rely on this behavior.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "66fb345ddd2d343e36692da0ff66126d7a99dc1b",
      "tree": "7e53f68bbf4c910cd81be7e39378d9552bbce4c3",
      "parents": [
        "8cb471e8f82506937fe5e2e9fb0bf90f6b1f1170"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Feb 12 15:24:40 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:49 2009 -0700"
      },
      "message": "ocfs2: move ip_last_trans to struct ocfs2_caching_info\n\nWe have the read side of metadata caching isolated to struct\nocfs2_caching_info, now we need the write side.  This means the journal\nfunctions.  The journal only does a couple of things with struct inode.\n\nThis change moves the ip_last_trans field onto struct\nocfs2_caching_info as ci_last_trans.  This field tells the journal\nwhether a pending journal flush is required.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "8cb471e8f82506937fe5e2e9fb0bf90f6b1f1170",
      "tree": "e275a8f5db101a9990ba44931cfd116123112b11",
      "parents": [
        "6e5a3d7538ad4e46a976862f593faf65750e37cc"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Feb 10 20:00:41 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:48 2009 -0700"
      },
      "message": "ocfs2: Take the inode out of the metadata read/write paths.\n\nWe are really passing the inode into the ocfs2_read/write_blocks()\nfunctions to get at the metadata cache.  This commit passes the cache\ndirectly into the metadata block functions, divorcing them from the\ninode.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "6e5a3d7538ad4e46a976862f593faf65750e37cc",
      "tree": "e87ce6d69bdbcce23eed0a195a7f80a59c01d3d9",
      "parents": [
        "47460d65a483529b3bc2bf6ccf461ad45f94df83"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Feb 10 19:00:37 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:48 2009 -0700"
      },
      "message": "ocfs2: Change metadata caching locks to an operations structure.\n\nWe don\u0027t really want to cart around too many new fields on the\nocfs2_caching_info structure.  So let\u0027s wrap all our access of the\nparent object in a set of operations.  One pointer on caching_info, and\nmore flexibility to boot.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "47460d65a483529b3bc2bf6ccf461ad45f94df83",
      "tree": "0727cae9477749e5f2596e86253a210e79c96a83",
      "parents": [
        "8379e7c46cc48f51197dd663fc6676f47f2a1e71"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Feb 10 16:05:07 2009 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 16:07:47 2009 -0700"
      },
      "message": "ocfs2: Make the ocfs2_caching_info structure self-contained.\n\nWe want to use the ocfs2_caching_info structure in places that are not\ninodes.  To do that, it can no longer rely on referencing the inode\ndirectly.\n\nThis patch moves the flags to ocfs2_caching_info-\u003eci_flags, stores\npointers to the parent\u0027s locks on the ocfs2_caching_info, and renames\nthe constants and flags to reflect its independant state.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "8379e7c46cc48f51197dd663fc6676f47f2a1e71",
      "tree": "ee6ae04dd7014bfe311ea0f48a0aea734a96c2ed",
      "parents": [
        "a1b08e75dff3dc18a88444803753e667bb1d126e"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Fri Sep 04 11:12:01 2009 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 04 14:28:31 2009 -0700"
      },
      "message": "ocfs2: ocfs2_write_begin_nolock() should handle len\u003d0\n\nBug introduced by mainline commit e7432675f8ca868a4af365759a8d4c3779a3d922\nThe bug causes ocfs2_write_begin_nolock() to oops when len\u003d0.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "a1b08e75dff3dc18a88444803753e667bb1d126e",
      "tree": "b782aaa5e2775c693bb711647e9e2b2331003fb4",
      "parents": [
        "c795b33ba171e41563ab7e25105c0cd4edd81cd7"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Aug 27 14:46:56 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Aug 27 18:10:54 2009 -0700"
      },
      "message": "ocfs2: invalidate dentry if its dentry_lock isn\u0027t initialized.\n\nIn commit a5a0a630922a2f6a774b6dac19f70cb5abd86bb0, when\nocfs2_attch_dentry_lock fails, we call an extra iput and reset\ndentry-\u003ed_fsdata to NULL. This resolve a bug, but it isn\u0027t\ncompleted and the dentry is still there. When we want to use\nit again, ocfs2_dentry_revalidate doesn\u0027t catch it and return\ntrue. That make future ocfs2_dentry_lock panic out.\nOne bug is http://oss.oracle.com/bugzilla/show_bug.cgi?id\u003d1162.\n\nThe resolution is to add a check for dentry-\u003ed_fsdata in\nrevalidate process and return false if dentry-\u003ed_fsdata is NULL,\nso that a new ocfs2_lookup will be called again.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "c795b33ba171e41563ab7e25105c0cd4edd81cd7",
      "tree": "e845674493883656d44b825e5ff70256d5af6356",
      "parents": [
        "a8b88d3d49623ac701b5dc996cbd61219c793c7c"
      ],
      "author": {
        "name": "Goldwyn Rodrigues",
        "email": "rgoldwyn@gmail.com",
        "time": "Thu Aug 20 13:43:19 2009 -0500"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Aug 20 18:42:34 2009 -0700"
      },
      "message": "ocfs2/dlm: Wait on lockres instead of erroring cancel requests\n\nIn case a downconvert is queued, and a flock receives a signal,\nBUG_ON(lockres-\u003el_action !\u003d OCFS2_AST_INVALID) is triggered\nbecause a lock cancel triggers a dlmunlock while an AST is\nscheduled.\n\nTo avoid this, allow a LKM_CANCEL to pass through, and let it\nwait on __dlm_wait_on_lockres().\n\nSigned-off-by: Goldwyn Rodrigues \u003crgoldwyn@suse.de\u003e\nAcked-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "a8b88d3d49623ac701b5dc996cbd61219c793c7c",
      "tree": "3eae2cbcb6e61b1af9902ff1ad7a8780d3c02b63",
      "parents": [
        "5fd131893793567c361ae64cbeb28a2a753bbe35"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Aug 20 18:26:52 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Aug 20 16:41:53 2009 -0700"
      },
      "message": "ocfs2: Add missing lock name\n\nThere is missing name for NFSSync cluster lock. This makes lockdep unhappy\nbecause we end up passing NULL to lockdep when initializing lock key. Fix it.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "5fd131893793567c361ae64cbeb28a2a753bbe35",
      "tree": "962a79225308d855ee7b1d27e5c49864af78e108",
      "parents": [
        "60e2ec48665b8495360ca4a6004c5cd52beb2bc1"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Jul 30 17:01:53 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Aug 17 14:32:24 2009 -0700"
      },
      "message": "ocfs2: Don\u0027t oops in ocfs2_kill_sb on a failed mount\n\nIf we fail to mount the filesystem, we have to be careful not to dereference\nuninitialized structures in ocfs2_kill_sb.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "60e2ec48665b8495360ca4a6004c5cd52beb2bc1",
      "tree": "dbd938e337b3191bbe16336cb414b9d55c5fdc81",
      "parents": [
        "ada508274b8698a33cb0e5bd037db0f9dc781795"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Wed Aug 12 14:42:47 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Aug 17 12:50:35 2009 -0700"
      },
      "message": "ocfs2: release the buffer head in ocfs2_do_truncate.\n\nIn ocfs2_do_truncate, we forget to release last_eb_bh which\nwill cause memleak. So call brelse in the end.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "ada508274b8698a33cb0e5bd037db0f9dc781795",
      "tree": "43788f6393117159d75897bb75496c0ddb6c4e1b",
      "parents": [
        "b409d7a0ab46fe530efe52734984b4ed5d46c3eb"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Aug 03 18:24:21 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Aug 17 12:50:12 2009 -0700"
      },
      "message": "ocfs2: Handle quota file corruption more gracefully\n\nocfs2_read_virt_blocks() does BUG when we try to read a block from a file\nbeyond its end. Since this can happen due to filesystem corruption, it\nis not really an appropriate answer. Make ocfs2_read_quota_block() check\nthe condition and handle it by calling ocfs2_error() and returning EIO.\n\n[ Modified to print ip_blkno in the error - Joel ]\n\nReported-by: Tristan Ye \u003ctristan.ye@oracle.com\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "b409d7a0ab46fe530efe52734984b4ed5d46c3eb",
      "tree": "f9f7861ff8b943ee905dc16a8290cac757df391e",
      "parents": [
        "8a57a9dda760ea7845390f1cd36f3eb2a49391d8"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Aug 06 23:29:34 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Aug 10 12:20:22 2009 -0700"
      },
      "message": "ocfs2: Fix possible deadlock when extending quota file\n\nIn OCFS2, allocator locks rank above transaction start. Thus we\ncannot extend quota file from inside a transaction less we could\ndeadlock.\n\nWe solve the problem by starting transaction not already in\nocfs2_acquire_dquot() but only in ocfs2_local_read_dquot() and\nocfs2_global_read_dquot() and we allocate blocks to quota files before starting\nthe transaction.  In case we crash, quota files will just have a few blocks\nmore but that\u0027s no problem since we just use them next time we extend the\nquota file.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "8a57a9dda760ea7845390f1cd36f3eb2a49391d8",
      "tree": "67c6566851787cd5836e763d63b069144743e4da",
      "parents": [
        "e7432675f8ca868a4af365759a8d4c3779a3d922"
      ],
      "author": {
        "name": "Roel Kluin",
        "email": "roel.kluin@gmail.com",
        "time": "Thu Aug 06 16:07:50 2009 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Aug 07 13:16:50 2009 -0700"
      },
      "message": "ocfs2: keep index within status_map[]\n\nDo not exceed array status_map[]\n\nSigned-off-by: Roel Kluin \u003croel.kluin@gmail.com\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "e7432675f8ca868a4af365759a8d4c3779a3d922",
      "tree": "238d57e12fae632c9baeca98ddec701b3391ff29",
      "parents": [
        "ab57a40827d99e2d8e59066a56b93bf6c844c916"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Aug 06 16:12:58 2009 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Aug 07 13:16:23 2009 -0700"
      },
      "message": "ocfs2: Initialize the cluster we\u0027re writing to in a non-sparse extend\n\nIn a non-sparse extend, we correctly allocate (and zero) the clusters between\nthe old_i_size and pos, but we don\u0027t zero the portions of the cluster we\u0027re\nwriting to outside of pos\u003c-\u003elen.\n\nIt handles clustersize \u003e pagesize and blocksize \u003c pagesize.\n\n[Cleaned up by Joel Becker.]\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "ab57a40827d99e2d8e59066a56b93bf6c844c916",
      "tree": "eed0b61db8addf2aac7113dd78d187ddf1a47959",
      "parents": [
        "e9956fae7dbce6ac770e7a00436c496ddbbd3215"
      ],
      "author": {
        "name": "Goldwyn Rodrigues",
        "email": "rgoldwyn@gmail.com",
        "time": "Fri Jul 31 14:28:02 2009 -0500"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Jul 31 13:43:44 2009 -0700"
      },
      "message": "ocfs2: Remove redundant BUG_ON in __dlm_queue_ast()\n\nWe BUG_ON() the same thing twice.\n\nSigned-off-by: Goldwyn Rodrigues \u003crgoldwyn@suse.de\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "e9956fae7dbce6ac770e7a00436c496ddbbd3215",
      "tree": "e1b1cd0c59a598ec671e563a732f6935133a1520",
      "parents": [
        "0584974a77796581eb3a64b6c5005edac4a95128"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Jul 30 16:07:10 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 30 11:06:06 2009 -0700"
      },
      "message": "ocfs2/quota: Release lock for error in ocfs2_quota_write.\n\nocfs2_quota_write needs to release the lock if it fails to\nread quota block. So use \"goto out\" instead of \"return err\".\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "0584974a77796581eb3a64b6c5005edac4a95128",
      "tree": "8ae9e0fb7fa73bcdd1efefe0ecf82da1b55ba66e",
      "parents": [
        "4539f1df25bcd0fdf0d8a5e2c92de6bece83c7a0"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Jul 22 13:17:21 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 23 10:59:31 2009 -0700"
      },
      "message": "ocfs2: Define credit counts for quota operations\n\nNumbers of needed credits for some quota operations were written\nas raw numbers. Create appropriate defines instead.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "4539f1df25bcd0fdf0d8a5e2c92de6bece83c7a0",
      "tree": "fb3a2429f8759816fd15877ec0c0ab3c567dbb51",
      "parents": [
        "1c1d9793ff6720531c0125a28d321f283716e32f"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Jul 22 13:17:20 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 23 10:59:27 2009 -0700"
      },
      "message": "ocfs2: Remove syncjiff field from quota info\n\nsyncjiff is just a converted value of syncms. Some places which\nare updating syncms forgot to update syncjiff as well. Since the\nconversion is just a simple division / multiplication and it does\nnot happen frequently, just remove the syncjiff field to avoid\nforgotten conversions.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "1c1d9793ff6720531c0125a28d321f283716e32f",
      "tree": "64316a07d5c0b434c852b3fdc8e4c9e42a363730",
      "parents": [
        "7669f54c55df225cbb2db939a6c9f111445ffc1c"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Jul 22 13:17:19 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 23 10:59:24 2009 -0700"
      },
      "message": "ocfs2: Fix initialization of blockcheck stats\n\nWe just set blockcheck stats to zeros but we should also\nproperly initialize the spinlock there.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "7669f54c55df225cbb2db939a6c9f111445ffc1c",
      "tree": "f19010d2ecedfac169ab447fe02b3d7bedba1801",
      "parents": [
        "0e7f387bf386c99e8ee322649fe4fc23b9cccc6c"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Jul 22 13:17:18 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 23 10:59:17 2009 -0700"
      },
      "message": "ocfs2: Zero out padding of on disk dquot structure\n\nPadding fields of on-disk dquot structure were not zeroed. Zero them\nso that it\u0027s easier to use them later.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "0e7f387bf386c99e8ee322649fe4fc23b9cccc6c",
      "tree": "9e970c95fe96be086e4741fb02560e1afe433103",
      "parents": [
        "4b3fa1904c0d192461ebba692e4940a334b74353"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Jul 22 13:17:17 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 23 10:59:11 2009 -0700"
      },
      "message": "ocfs2: Initialize blocks allocated to local quota file\n\nWhen we extend local quota file, we should initialize data\nin newly allocated block. Firstly because on recovery we could\nparse bogus data, secondly so that block checksums are properly\ncomputed.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "4b3fa1904c0d192461ebba692e4940a334b74353",
      "tree": "f95a515b92fed5072b82b4848f469214d8a9d90f",
      "parents": [
        "b57ac2c43e66cb4aa76c9d2d0e9e0e04f19cc5a6"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Jul 22 13:17:16 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 23 10:59:05 2009 -0700"
      },
      "message": "ocfs2: Mark buffer uptodate before calling ocfs2_journal_access_dq()\n\nIn a code path extending local quota files we marked new header\nbuffer uptodate only after calling ocfs2_journal_access_dq() which\ntriggers a bug. Fix it and also call ocfs2 variant of the function\nmarking buffer uptodate.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "b57ac2c43e66cb4aa76c9d2d0e9e0e04f19cc5a6",
      "tree": "e377a53fe3aab4034c6f24fd439eb4f3bed51745",
      "parents": [
        "82e12644cf5227dab15201fbcaf0ca6330ebd70f"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Jul 22 13:17:15 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 23 10:58:59 2009 -0700"
      },
      "message": "ocfs2: Make global quota files blocksize aligned\n\nChange i_size of global quota files so that it always remains aligned to block\nsize. This is mainly because the end of quota block may contain checksum (if\nchecksumming is enabled) and it\u0027s a bit awkward for it to be \"outside\" of quota\nfile (and it makes life harder for ocfs2-tools).\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "82e12644cf5227dab15201fbcaf0ca6330ebd70f",
      "tree": "11485e6192c3e5f0e6c2aa95c2deeb8130b61cc1",
      "parents": [
        "f7b1aa69be138ad9d7d3f31fa56f4c9407f56b6a"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Thu Jul 23 08:12:58 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 23 10:58:46 2009 -0700"
      },
      "message": "ocfs2: Use ocfs2_rec_clusters in ocfs2_adjust_adjacent_records.\n\nIn ocfs2_adjust_adjacent_records, we will adjust adjacent records\naccording to the extent_list in the lower level. But actually\nthe lower level tree will either be a leaf or a branch. If we only\nuse ocfs2_is_empty_extent we will meet with some problem if the lower\ntree is a branch (tree_depth \u003e 1). So use !ocfs2_rec_clusters instead.\nAnd actually only the leaf record can have holes. So add a BUG_ON\nfor non-leaf branch.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "f7b1aa69be138ad9d7d3f31fa56f4c9407f56b6a",
      "tree": "3d3ca30071d9d92ff3ad5c6d522ea6c05efb3885",
      "parents": [
        "3c5e10683e684ef45614c9071847e48f633d9806"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Jul 20 12:12:36 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Jul 21 15:47:55 2009 -0700"
      },
      "message": "ocfs2: Fix deadlock on umount\n\nIn commit ea455f8ab68338ba69f5d3362b342c115bea8e13, we moved the dentry lock\nput process into ocfs2_wq. This causes problems during umount because ocfs2_wq\ncan drop references to inodes while they are being invalidated by\ninvalidate_inodes() causing all sorts of nasty things (invalidate_inodes()\nending in an infinite loop, \"Busy inodes after umount\" messages etc.).\n\nWe fix the problem by stopping ocfs2_wq from doing any further releasing of\ninode references on the superblock being unmounted, wait until it finishes\nthe current round of releasing and finally cleaning up all the references in\ndentry_lock_list from ocfs2_put_super().\n\nThe issue was tracked down by Tao Ma \u003ctao.ma@oracle.com\u003e.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "3c5e10683e684ef45614c9071847e48f633d9806",
      "tree": "2861ea95385422c50afc818dd6bb2d2c6cb9d46a",
      "parents": [
        "1f4cea3790bf44137192f441ee84af256e3bf809"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Tue Jul 21 15:42:05 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Jul 21 14:41:54 2009 -0700"
      },
      "message": "ocfs2: Add extra credits and access the modified bh in update_edge_lengths.\n\nIn normal tree rotation left process, we will never touch the tree\nbranch above subtree_index and ocfs2_extend_rotate_transaction doesn\u0027t\nreserve the credits for them either.\n\nBut when we want to delete the rightmost extent block, we have to update\nthe rightmost records for all the rightmost branch(See\nocfs2_update_edge_lengths), so we have to allocate extra credits for them.\nWhat\u0027s more, we have to access them also.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "1f4cea3790bf44137192f441ee84af256e3bf809",
      "tree": "64c83d47e0ea24f14b0237d9d63426e7e5af9227",
      "parents": [
        "cbfa9639aea5007313b75ec43b689d5f9e0c037d"
      ],
      "author": {
        "name": "Wengang Wang",
        "email": "wen.gang.wang@oracle.com",
        "time": "Mon Jul 13 11:38:58 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Jul 20 17:36:07 2009 -0700"
      },
      "message": "ocfs2: Fail ocfs2_get_block() immediately when a block needs allocation\n\nocfs2_get_block() does no allocation.  Hole filling for writes should\nhave happened farther up in the call chain.  We detect this case and\nprint an error, but we then continue with the function.  We should be\nexiting immediately.\n\nSigned-off-by: Wengang Wang \u003cwen.gang.wang@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    }
  ],
  "next": "cbfa9639aea5007313b75ec43b689d5f9e0c037d"
}
