)]}'
{
  "log": [
    {
      "commit": "41841b0bcea8af7f3bff8b2a23d542b94d9c1bb1",
      "tree": "89eddf2dffadbbd13939f94eb8cd904a26279390",
      "parents": [
        "316ce2ba8e74a7bb9153b9f93adc883cb1ceb9fd",
        "1a934c3e57594588c373aea858e4593cdfcba4f4"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue May 18 16:40:42 2010 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue May 18 16:40:42 2010 -0700"
      },
      "message": "Merge branch \u0027discontig-bg\u0027 of git://oss.oracle.com/git/tma/linux-2.6 into ocfs2-merge-window\n"
    },
    {
      "commit": "ee149a7c6cbaee0e3a1a7d9e9f92711228ef5236",
      "tree": "eb91fa9c12d9d44a3a314f75c5acd4ce1b7328a5",
      "parents": [
        "e8aec068ecb1957630816cfa2c150c6b3ddd1790"
      ],
      "author": {
        "name": "Tristan Ye",
        "email": "tristan.ye@oracle.com",
        "time": "Tue May 11 17:54:44 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue May 18 12:28:13 2010 -0700"
      },
      "message": "Ocfs2: Make ocfs2_find_cpos_for_left_leaf() public.\n\nThe original idea to pull ocfs2_find_cpos_for_left_leaf() out of\nalloc.c is to benefit punching-holes optimization patch, it however,\ncan also be referred by other funcs in the future who want to do the\nsame job.\n\nSigned-off-by: Tristan Ye \u003ctristan.ye@oracle.com\u003e\nAcked-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "78f94673d7faf01677f374f4ebbf324ff1a0aa6e",
      "tree": "1bd394469f12b5e148835365295d1df413c04a0c",
      "parents": [
        "547ba7c8efe43c2cabb38782e23572a6179dd1c1"
      ],
      "author": {
        "name": "Tristan Ye",
        "email": "tristan.ye@oracle.com",
        "time": "Tue May 11 17:54:42 2010 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue May 18 12:25:10 2010 -0700"
      },
      "message": "Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead.\n\nTruncate is just a special case of punching holes(from new i_size to\nend), we therefore could take advantage of the existing\nocfs2_remove_btree_range() to reduce the comlexity and redundancy in\nalloc.c.  The goal here is to make truncate more generic and\nstraightforward.\n\nSeveral functions only used by ocfs2_commit_truncate() will smiply be\nremoved.\n\nocfs2_remove_btree_range() was originally used by the hole punching\ncode, which didn\u0027t take refcount trees into account (definitely a bug).\nWe therefore need to change that func a bit to handle refcount trees.\nIt must take the refcount lock, calculate and reserve blocks for\nrefcount tree changes, and decrease refcounts at the end.  We replace \nocfs2_lock_allocators() here by adding a new func\nocfs2_reserve_blocks_for_rec_trunc() which accepts some extra blocks to\nreserve.  This will not hurt any other code using\nocfs2_remove_btree_range() (such as dir truncate and hole punching).\n\nI merged the following steps into one patch since they may be\nlogically doing one thing, though I know it looks a little bit fat\nto review.\n\n1). Remove redundant code used by ocfs2_commit_truncate(), since we\u0027re\n    moving to ocfs2_remove_btree_range anyway.\n\n2). Add a new func ocfs2_reserve_blocks_for_rec_trunc() for purpose of\n    accepting some extra blocks to reserve.\n\n3). Change ocfs2_prepare_refcount_change_for_del() a bit to fit our\n    needs.  It\u0027s safe to do this since it\u0027s only being called by\n    truncate.\n\n4). Change ocfs2_remove_btree_range() a bit to take refcount case into\n    account.\n\n5). Finally, we change ocfs2_commit_truncate() to call\n    ocfs2_remove_btree_range() in a proper way.\n\nThe patch has been tested normally for sanity check, stress tests\nwith heavier workload will be expected.\n\nBased on this patch, fixing the punching holes bug will be fairly easy.\n\nSigned-off-by: Tristan Ye \u003ctristan.ye@oracle.com\u003e\nAcked-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "74380c479ad83addeff8a172ab95f59557b5b0c3",
      "tree": "49b94f3ff48cd2ca6b53977a5e3070380ccecd6b",
      "parents": [
        "af2bf0d86019e0b0306965321096f8380b7ca830"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Mar 22 14:20:18 2010 +0800"
      },
      "committer": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Mar 22 14:20:18 2010 +0800"
      },
      "message": "ocfs2: Free block to the right block group.\n\nIn case the block we are going to free is allocated from\na discontiguous block group, we have to use suballoc_loc\nto be the right group.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\n"
    },
    {
      "commit": "38a04e432768ec0b016f3c687b4de31ac111ae59",
      "tree": "a71a01561d6a654b8daf12c51e2e909f82950573",
      "parents": [
        "56f3f55cf9b604b924353ab6fcdac5fee5637ae3"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Nov 30 14:32:19 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Dec 02 16:14:57 2009 -0800"
      },
      "message": "ocfs2: Find proper end cpos for a leaf refcount block.\n\nocfs2 refcount tree is stored as an extent tree while\nthe leaf ocfs2_refcount_rec points to a refcount block.\n\nThe following step can trip a kernel panic.\nmkfs.ocfs2 -b 512 -C 1M --fs-features\u003drefcount $DEVICE\nmount -t ocfs2 $DEVICE $MNT_DIR\nFILE_NAME\u003d$RANDOM\nFILE_NAME_1\u003d$RANDOM\nFILE_REF\u003d\"${FILE_NAME}_ref\"\nFILE_REF_1\u003d\"${FILE_NAME}_ref_1\"\nfor((i\u003d0;i\u003c305;i++))\ndo\n# /mnt/1048576 is a file with 1048576 sizes.\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME_1\ndone\nfor((i\u003d0;i\u003c3;i++))\ndo\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME\ndone\n\nfor((i\u003d0;i\u003c2;i++))\ndo\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME_1\ndone\n\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME\n\nfor((i\u003d0;i\u003c11;i++))\ndo\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME\ncat /mnt/1048576 \u003e\u003e $MNT_DIR/$FILE_NAME_1\ndone\nreflink $MNT_DIR/$FILE_NAME $MNT_DIR/$FILE_REF\n# write_f is a program which will write some bytes to a file at offset.\n# write_f -f file_name -l offset -w write_bytes.\n./write_f -f $MNT_DIR/$FILE_REF -l $[310*1048576] -w 4096\n./write_f -f $MNT_DIR/$FILE_REF -l $[306*1048576] -w 4096\n./write_f -f $MNT_DIR/$FILE_REF -l $[311*1048576] -w 4096\n./write_f -f $MNT_DIR/$FILE_NAME -l $[310*1048576] -w 4096\n./write_f -f $MNT_DIR/$FILE_NAME -l $[311*1048576] -w 4096\nreflink $MNT_DIR/$FILE_NAME $MNT_DIR/$FILE_REF_1\n./write_f -f $MNT_DIR/$FILE_NAME -l $[311*1048576] -w 4096\n#kernel panic here.\n\nThe reason is that if the ocfs2_extent_rec is the last record\nin a leaf extent block, the old solution fails to find the\nsuitable end cpos. So this patch try to walk through the b-tree,\nfind the next sub root and get the c_pos the next sub-tree starts\nfrom.\n\nbtw, I have runned tristan\u0027s test case against the patched kernel\nfor several days and this type of kernel panic never happens again.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "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": "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": "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": "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": "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": "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": "9b7895efac906d66d19856194e1ba61f37e231a4",
      "tree": "1ee6d2630cf3617251638170dcaceef41ddda8ec",
      "parents": [
        "4a12ca3a00a244e1fd1e673d151ea38b71e11d55"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Wed Nov 12 16:27:44 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:15 2009 -0700"
      },
      "message": "ocfs2: Add a name indexed b-tree to directory inodes\n\nThis patch makes use of Ocfs2\u0027s flexible btree code to add an additional\ntree to directory inodes. The new tree stores an array of small,\nfixed-length records in each leaf block. Each record stores a hash value,\nand pointer to a block in the traditional (unindexed) directory tree where a\ndirent with the given name hash resides. Lookup exclusively uses this tree\nto find dirents, thus providing us with constant time name lookups.\n\nSome of the hashing code was copied from ext3. Unfortunately, it has lots of\nunfixed checkpatch errors. I left that as-is so that tracking changes would\nbe easier.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "2a50a743bdaab104155bd9e988d2ba3bb4177263",
      "tree": "a330bfffe09dfca4340075bd9c44f632a3284469",
      "parents": [
        "4d0e214ee83185fcaa2cb97cd026d32bdc5c994a"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Dec 09 14:24:33 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jan 05 08:40:32 2009 -0800"
      },
      "message": "ocfs2: Create ocfs2_xattr_value_buf.\n\nWhen an ocfs2 extended attribute is large enough to require its own\nallocation tree, we root it with an ocfs2_xattr_value_root.  However,\nthese roots can be a part of inodes, xattr blocks, or xattr buckets.\nThus, they need a different journal access function for each container.\n\nWe wrap the bh, its journal access function, and the value root (xv) in\na structure called ocfs2_xattr_valu_buf.  This is a package that can\nbe passed around.  In this first pass, we simply pass it to the\nextent tree code.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "13723d00e374c2a6d6ccb5af6de965e89c3e1b01",
      "tree": "70dcd8f3d188bf2f62e4bf4b44a0662d8cd527ca",
      "parents": [
        "ffdd7a54631f07918b75e324d86713a08c11ec06"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Oct 17 19:25:01 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jan 05 08:40:32 2009 -0800"
      },
      "message": "ocfs2: Use metadata-specific ocfs2_journal_access_*() functions.\n\nThe per-metadata-type ocfs2_journal_access_*() functions hook up jbd2\ncommit triggers and allow us to compute metadata ecc right before the\nbuffers are written out.  This commit provides ecc for inodes, extent\nblocks, group descriptors, and quota blocks.  It is not safe to use\nextened attributes and metaecc at the same time yet.\n\nThe ocfs2_extent_tree and ocfs2_path abstractions in alloc.c both hide\nthe type of block at their root.  Before, it didn\u0027t matter, but now the\nroot block must use the appropriate ocfs2_journal_access_*() function.\nTo keep this abstract, the structures now have a pointer to the matching\njournal_access function and a wrapper call to call it.\n\nA few places use naked ocfs2_write_block() calls instead of adding the\nblocks to the journal.  We make sure to calculate their checksum and ecc\nbefore the write.\n\nSince we pass around the journal_access functions.  Let\u0027s typedef them\nin ocfs2.h.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "5e96581a377fc6bd76e9b112da9aeb8a7ae8bf22",
      "tree": "ce2e1d8819b6020567828ca9021438c0824aa8d4",
      "parents": [
        "4203530613280281868b3ca36c817530bca3825c"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Nov 13 14:49:16 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jan 05 08:36:53 2009 -0800"
      },
      "message": "ocfs2: Wrap extent block reads in a dedicated function.\n\nWe weren\u0027t consistently checking extent blocks after we read them.\nMost places checked the signature, but none checked h_blkno or\nh_fs_signature.  Create a toplevel ocfs2_read_extent_block() that does\nthe read and the validation.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "fecc01126d7a244b7e9b563c80663ffdca35343b",
      "tree": "dbc9144a0f4b6e6997928b2fa2ddeb483f8fd2d7",
      "parents": [
        "85db90e77806d48a19fda77dabe8897d369a1710"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Wed Nov 12 15:16:38 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jan 05 08:34:19 2009 -0800"
      },
      "message": "ocfs2: turn __ocfs2_remove_inode_range() into ocfs2_remove_btree_range()\n\nThis patch genericizes the high level handling of extent removal.\nocfs2_remove_btree_range() is nearly identical to\n__ocfs2_remove_inode_range(), except that extent tree operations have been\nused where necessary. We update ocfs2_remove_inode_range() to use the\ngeneric helper. Now extent tree based structures have an easy way to\ntruncate ranges.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "78f30c314a74b9dc5d7368d96fe4be883d9a3a04",
      "tree": "07904e23f2d2c1287869daecc9f27052b71d67a5",
      "parents": [
        "c73f60f900ddf73ec4ea2a143829ab97242c4e8c"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Wed Nov 12 08:27:00 2008 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jan 05 08:34:19 2009 -0800"
      },
      "message": "ocfs2/xattr: Reserve meta/data at the beginning of ocfs2_xattr_set.\n\nIn ocfs2 xattr set, we reserve metadata and clusters in any place\nthey are needed. It is time-consuming and ineffective, so this\npatch try to reserve metadata and clusters at the beginning of\nocfs2_xattr_set.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "2891d290aa6eee0821f7e4ad0b1c4ae4d964b0f1",
      "tree": "2f06b8d3afcf1986d0f041319a8ec08395acdf83",
      "parents": [
        "976331d8789d4d84a11b45b87c520ade83715343"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Wed Nov 12 08:26:58 2008 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jan 05 08:34:18 2009 -0800"
      },
      "message": "ocfs2: Add clusters free in dealloc_ctxt.\n\nNow in ocfs2 xattr set, the whole process are divided into many small\nparts and they are wrapped into diffrent transactions and it make the\nset doesn\u0027t look like a real transaction. So we want to integrate it\ninto a real one.\n\nIn some cases we will allocate some clusters and free some in just one\ntransaction. e.g, one xattr is larger than inline size, so it and its\nvalue root is stored within the inode while the value is outside in a\ncluster. Then we try to update it with a smaller value(larger than the\nsize of root but smaller than inline size), we may need to free the\noutside cluster while allocate a new bucket(one cluster) since now the\ninode may be full. The old solution will lock the global_bitmap(if the\nlocal alloc failed in stress test) and then the truncate log. This will\ncause a ABBA lock with truncate log flush.\n\nThis patch add the clusters free in dealloc_ctxt, so that we can record\nthe free clusters during the transaction and then free it after we\nrelease the global_bitmap in xattr set.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "8d6220d6a74a33552cf877bcea25503d7f6a59e6",
      "tree": "2c3f662c55ab4a0a22989c06edf0d027387bfbed",
      "parents": [
        "1625f8ac151743e452ec062c2989669c508ffa48"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Aug 22 12:46:09 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 16:57:05 2008 -0700"
      },
      "message": "ocfs2: Change ocfs2_get_*_extent_tree() to ocfs2_init_*_extent_tree()\n\nThe original get/put_extent_tree() functions held a reference on\net_root_bh.  However, every single caller already has a safe reference,\nmaking the get/put cycle irrelevant.\n\nWe change ocfs2_get_*_extent_tree() to ocfs2_init_*_extent_tree().  It\nno longer gets a reference on et_root_bh.  ocfs2_put_extent_tree() is\nremoved.  Callers now have a simpler init+use pattern.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "f99b9b7ccf6a691f653cec45f36bfdd1e94769c7",
      "tree": "1c6ff6ea1fa1bb86b70f1fd78dd725b559c729e4",
      "parents": [
        "1e61ee79e2a96f62c007486677319814ce621c3c"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Aug 20 19:36:33 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 16:57:05 2008 -0700"
      },
      "message": "ocfs2: Make ocfs2_extent_tree the first-class representation of a tree.\n\nWe now have three different kinds of extent trees in ocfs2: inode data\n(dinode), extended attributes (xattr_tree), and extended attribute\nvalues (xattr_value).  There is a nice abstraction for them,\nocfs2_extent_tree, but it is hidden in alloc.c.  All the calling\nfunctions have to pick amongst a varied API and pass in type bits and\noften extraneous pointers.\n\nA better way is to make ocfs2_extent_tree a first-class object.\nEveryone converts their object to an ocfs2_extent_tree() via the\nocfs2_get_*_extent_tree() calls, then uses the ocfs2_extent_tree for all\ntree calls to alloc.c.\n\nThis simplifies a lot of callers, making for readability.  It also\nprovides an easy way to add additional extent tree types, as they only\nneed to be defined in alloc.c with a ocfs2_get_\u003cnew\u003e_extent_tree()\nfunction.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "1a09f556e5415a29cdddaf9a6ebf474194161cf3",
      "tree": "902dc5cc4719ffce151c610b3441baa3511aa50e",
      "parents": [
        "943cced39ee45ed2db25efd25eee8ba49cf2dfc4"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Aug 20 17:44:24 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 16:57:05 2008 -0700"
      },
      "message": "ocfs2: Create specific get_extent_tree functions.\n\nA caller knows what kind of extent tree they have.  There\u0027s no reason\nthey have to call ocfs2_get_extent_tree() with a NULL when they could\njust as easily call a specific function to their type of extent tree.\n\nIntroduce ocfs2_dinode_get_extent_tree(),\nocfs2_xattr_tree_get_extent_tree(), and\nocfs2_xattr_value_get_extent_tree().  They only take the necessary\narguments, calling into the underlying __ocfs2_get_extent_tree() to do\nthe real work.\n\n__ocfs2_get_extent_tree() is the old ocfs2_get_extent_tree(), but\nwithout needing any switch-by-type logic.\n\nocfs2_get_extent_tree() is now a wrapper around the specific calls.  It\nexists because a couple alloc.c functions can take et_type.  This will\ngo later.\n\nAnother benefit is that ocfs2_xattr_value_get_extent_tree() can take a\nstruct ocfs2_xattr_value_root* instead of void*.  This gives us\ntypechecking where we didn\u0027t have it before.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "ca12b7c48942d21b2e7890b820db9d578bc291cd",
      "tree": "e051e6ceb77a05db7dd1d749d7f3f1682c69196c",
      "parents": [
        "589dc2602f2a1b7fa5e59b90f548af189f128d77"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Aug 18 17:38:52 2008 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 16:57:03 2008 -0700"
      },
      "message": "ocfs2: Optionally limit extent size in ocfs2_insert_extent()\n\nIn xattr bucket, we want to limit the maximum size of a btree leaf,\notherwise we\u0027ll lose the benefits of hashing because we\u0027ll have to search\nlarge leaves.\n\nSo add a new field in ocfs2_extent_tree which indicates the maximum leaf cluster\nsize we want so that we can prevent ocfs2_insert_extent() from merging the leaf\nrecord even if it is contiguous with an adjacent record.\n\nOther btree types are not affected by this change.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "ba492615f0d32d0210b02c14b24512b4372b13d6",
      "tree": "65275171ba8543a497037c5a159701a06277af4b",
      "parents": [
        "cf1d6c763fbcb115263114302485ad17e7933d87"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Aug 18 17:38:49 2008 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 16:57:02 2008 -0700"
      },
      "message": "ocfs2: Add xattr index tree operations\n\nWhen necessary, an ocfs2_xattr_block will embed an ocfs2_extent_list to\nstore large numbers of EAs. This patch adds a new type in\nocfs2_extent_tree_type and adds the implementation so that we can re-use the\nb-tree code to handle the storage of many EAs.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "f56654c435c06f2b2bd5751889b1a08a3add7d6c",
      "tree": "b186d68aedc5dda7afe435f5a68c03937ae382ff",
      "parents": [
        "ac11c827192272eabb68b8f4cf844066461d9690"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Aug 18 17:38:48 2008 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 16:57:01 2008 -0700"
      },
      "message": "ocfs2: Add extent tree operation for xattr value btrees\n\nAdd some thin wrappers around ocfs2_insert_extent() for each of the 3\ndifferent btree types, ocfs2_inode_insert_extent(),\nocfs2_xattr_value_insert_extent() and ocfs2_xattr_tree_insert_extent(). The\nlast is for the xattr index btree, which will be used in a followup patch.\n\nAll the old callers in file.c etc will call ocfs2_dinode_insert_extent(),\nwhile the other two handle the xattr issue. And the init of extent tree are\nhandled by these functions.\n\nWhen storing xattr value which is too large, we will allocate some clusters\nfor it and here ocfs2_extent_list and ocfs2_extent_rec will also be used. In\norder to re-use the b-tree operation code, a new parameter named \"private\"\nis added into ocfs2_extent_tree and it is used to indicate the root of\nocfs2_exent_list. The reason is that we can\u0027t deduce the root from the\nbuffer_head now. It may be in an inode, an ocfs2_xattr_block or even worse,\nin any place in an ocfs2_xattr_bucket.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "0eb8d47e69a2211a36643b180f1843ef45f6017d",
      "tree": "745a063238cbcf6af84644bd51d4bfcd592e06a1",
      "parents": [
        "e7d4cb6bc19658646357eeff134645cd9bc3479f"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Aug 18 17:38:45 2008 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 13:57:59 2008 -0700"
      },
      "message": "ocfs2: Make high level btree extend code generic\n\nFactor out the non-inode specifics of ocfs2_do_extend_allocation() into a more generic\nfunction, ocfs2_do_cluster_allocation(). ocfs2_do_extend_allocation calls\nocfs2_do_cluster_allocation() now, but the latter can be used for other\nbtree types as well.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "e7d4cb6bc19658646357eeff134645cd9bc3479f",
      "tree": "4e24321e5c28fb90dffa1f396972fddb3c458e58",
      "parents": [
        "811f933df1e55615fd0bb4818f31e3868a8e6e23"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Aug 18 17:38:44 2008 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 13:57:58 2008 -0700"
      },
      "message": "ocfs2: Abstract ocfs2_extent_tree in b-tree operations.\n\nIn the old extent tree operation, we take the hypothesis that we\nare using the ocfs2_extent_list in ocfs2_dinode as the tree root.\nAs xattr will also use ocfs2_extent_list to store large value\nfor a xattr entry, we refactor the tree operation so that xattr\ncan use it directly.\n\nThe refactoring includes 4 steps:\n1. Abstract set/get of last_eb_blk and update_clusters since they may\n   be stored in different location for dinode and xattr.\n2. Add a new structure named ocfs2_extent_tree to indicate the\n   extent tree the operation will work on.\n3. Remove all the use of fe_bh and di, use root_bh and root_el in\n   extent tree instead. So now all the fe_bh is replaced with\n   et-\u003eroot_bh, el with root_el accordingly.\n4. Make ocfs2_lock_allocators generic. Now it is limited to be only used\n   in file extend allocation. But the whole function is useful when we want\n   to store large EAs.\n\nNote: This patch doesn\u0027t touch ocfs2_commit_truncate() since it is not used\nfor anything other than truncate inode data btrees.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "811f933df1e55615fd0bb4818f31e3868a8e6e23",
      "tree": "53335e59bdff02d7ddb3a2ec15d36239fe50003d",
      "parents": [
        "231b87d10920e024efaf0f9e86e1bab7bced1620"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Aug 18 17:38:43 2008 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 13:57:58 2008 -0700"
      },
      "message": "ocfs2: Use ocfs2_extent_list instead of ocfs2_dinode.\n\nocfs2_extend_meta_needed(), ocfs2_calc_extend_credits() and\nocfs2_reserve_new_metadata() are all useful for extent tree operations. But\nthey are all limited to an inode btree because they use a struct\nocfs2_dinode parameter. Change their parameter to struct ocfs2_extent_list\n(the part of an ocfs2_dinode they actually use) so that the xattr btree code\ncan use these functions.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "231b87d10920e024efaf0f9e86e1bab7bced1620",
      "tree": "00283dfb9e4a7054576be8a073635dc51bdc4e22",
      "parents": [
        "9a8ff578fb430a8816dfbc73c77e5e09c6d9c343"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "tao.ma@oracle.com",
        "time": "Mon Aug 18 17:38:42 2008 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 13:57:58 2008 -0700"
      },
      "message": "ocfs2: Modify ocfs2_num_free_extents for future xattr usage.\n\nocfs2_num_free_extents() is used to find the number of free extent records\nin an inode btree. Hence, it takes an \"ocfs2_dinode\" parameter. We want to\nuse this for extended attribute trees in the future, so genericize the\ninterface the take a buffer head. A future patch will allow that buffer_head\nto contain any structure rooting an ocfs2 btree.\n\nSigned-off-by: Tao Ma \u003ctao.ma@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "00dc417fa3e763345b34ccb6034d72de76eea0a1",
      "tree": "c50da655dbd6747499f4516280f323b90214af62",
      "parents": [
        "c4b929b85bdb64afacbbf6453b1f2bf7e14c9e89"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Oct 03 17:32:11 2008 -0400"
      },
      "committer": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Fri Oct 03 17:32:11 2008 -0400"
      },
      "message": "ocfs2: fiemap support\n\nPlug ocfs2 into -\u003efiemap. Some portions of ocfs2_get_clusters() had to be\nrefactored so that the extent cache can be skipped in favor of going\ndirectly to the on-disk records. This makes it easier for us to determine\nwhich extent is the last one in the btree. Also, I\u0027m not sure we want to be\ncaching fiemap lookups anyway as they\u0027re not directly related to data\nread/write.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: ocfs2-devel@oss.oracle.com\nCc: linux-fsdevel@vger.kernel.org\n"
    },
    {
      "commit": "5b6a3a2b4a5f071d170f8122038dd647a84810a8",
      "tree": "dd50e12c6670f950889e24401d0bcee900bbba2a",
      "parents": [
        "23193e513d1cd69411469f028d56fd175d4a6b07"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Sep 13 16:33:54 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Oct 12 11:54:41 2007 -0700"
      },
      "message": "ocfs2: Write support for directories with inline data\n\nCreate all new directories with OCFS2_INLINE_DATA_FL and the inline data\nbytes formatted as an empty directory. Inode size field reflects the actual\namount of inline data available, which makes searching for dirent space\nvery similar to the regular directory search.\n\nInline-data directories are automatically pushed out to extents on any\ninsert request which is too large for the available space.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\nReviewed-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "1afc32b952335f665327a1a9001ba1b44bb76fd9",
      "tree": "c914afd0ef5d32b426c3cf65820de7599e570656",
      "parents": [
        "6798d35a31c413bbb3f83bbaa844bd2598168ccc"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Sep 07 14:46:51 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Oct 12 11:54:40 2007 -0700"
      },
      "message": "ocfs2: Write support for inline data\n\nThis fixes up write, truncate, mmap, and RESVSP/UNRESVP to understand inline\ninode data.\n\nFor the most part, the changes to the core write code can be relied on to do\nthe heavy lifting. Any code calling ocfs2_write_begin (including shared\nwriteable mmap) can count on it doing the right thing with respect to\ngrowing inline data to an extent tree.\n\nSize reducing truncates, including UNRESVP can simply zero that portion of\nthe inode block being removed. Size increasing truncatesm, including RESVP\nhave to be a little bit smarter and grow the inode to an extent tree if\nnecessary.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\nReviewed-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "063c4561f52a74de686fe0ff2f96f4f54c9fecd2",
      "tree": "73a202c316df70bdfafa489d70e2863c5c5ea33a",
      "parents": [
        "35edec1d52c075975991471d624b33b9336226f2"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jul 03 13:34:11 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jul 10 17:32:08 2007 -0700"
      },
      "message": "ocfs2: support for removing file regions\n\nProvide an internal interface for the removal of arbitrary file regions.\n\nocfs2_remove_inode_range() takes a byte range within a file and will remove\nexisting extents within that range. Partial clusters will be zeroed so that\nany read from within the region will return zeros.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "35edec1d52c075975991471d624b33b9336226f2",
      "tree": "4fc59b9d60826b8eb44bc5c1e558a15bea171193",
      "parents": [
        "d0c7d7082ee1ec4f95ee57bf86ed39d1a27c4037"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Jul 06 14:41:18 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jul 10 17:32:07 2007 -0700"
      },
      "message": "ocfs2: update truncate handling of partial clusters\n\nThe partial cluster zeroing code used during truncate usually assumes that\nthe rightmost byte in the range to be zeroed lies on a cluster boundary.\nThis makes sense for truncate, but punching holes might require zeroing on\nnon-aligned rightmost boundaries.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "2ae99a60374f360ba07037ebbf33d19b89ac43a6",
      "tree": "ce83db2022a28deb8c402fca7c08cf924ee8e608",
      "parents": [
        "b27b7cbcf12a1bfff1ed68a73ddd7d11edc20daf"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Mar 09 16:43:28 2007 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jul 10 17:32:04 2007 -0700"
      },
      "message": "ocfs2: Support creation of unwritten extents\n\nThis can now be trivially supported with re-use of our existing extend code.\n\nocfs2_allocate_unwritten_extents() takes a start offset and a byte length\nand iterates over the inode, adding extents (marked as unwritten) until len\nis reached. Existing extents are skipped over.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "328d5752e1259dfb29b7e65f6c2d145fddbaa750",
      "tree": "08198271a0382cafcc4c0de2fc1efcf35cb400af",
      "parents": [
        "c3afcbb34426a9291e4c038540129053a72c3cd8"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Mon Jun 18 10:48:04 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jul 10 17:32:00 2007 -0700"
      },
      "message": "ocfs2: btree changes for unwritten extents\n\nWrites to a region marked as unwritten might result in a record split or\nmerge. We can support splits by making minor changes to the existing insert\ncode. Merges require left rotations which mostly re-use right rotation\nsupport functions.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "59a5e416d1ab543a5248a2b34d83202c4d55d132",
      "tree": "3e97ce48774d26e8a927edd839dd54a7d68f8c7d",
      "parents": [
        "2b604351bc99b4e4504758cbac369b660b71de0b"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Jun 22 15:52:36 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jul 10 17:31:55 2007 -0700"
      },
      "message": "ocfs2: plug truncate into cached dealloc routines\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "2b604351bc99b4e4504758cbac369b660b71de0b",
      "tree": "293fa51f1ae9d19db0d09c721cc8433303cc8974",
      "parents": [
        "bce997682fe3121516f5a20cf7bad2e6029ba018"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Jun 22 15:45:27 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jul 10 17:31:54 2007 -0700"
      },
      "message": "ocfs2: simplify deallocation locking\n\nDeallocation of suballocator blocks, most notably extent blocks, might\ninvolve multiple suballocator inodes.\n\nThe locking for this can get extremely complicated, especially when the\nsuballocator inodes to delete from aren\u0027t known until deep within an\nunrelated codepath.\n\nImplement a simple scheme for recording the blocks to be unlinked so that\nthe actual deallocation can be done in a context which won\u0027t deadlock.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "e48edee2d8eab812f31f0ff62c6ba635ca2e1e21",
      "tree": "6afb9fe59a06ce621cb11d570e432e7d739376ff",
      "parents": [
        "6af67d8205cf65fbaaa743edc7ebb46e486e34ff"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Mar 07 16:46:57 2007 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Apr 26 15:02:37 2007 -0700"
      },
      "message": "ocfs2: make room for unwritten extents flag\n\nDue to the size of our group bitmaps, we\u0027ll never have a leaf node extent\nrecord with more than 16 bits worth of clusters. Split e_clusters up so that\nleaf nodes can get a flags field where we can mark unwritten extents.\nInterior nodes whose length references all the child nodes beneath it can\u0027t\nsplit their e_clusters field, so we use a union to preserve sizing there.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "60b11392f1a09433740bda3048202213daa27736",
      "tree": "a8687fcb0ce62b130b732d663b54a984564d28b2",
      "parents": [
        "25baf2da1473d9dcde1a4c7b0ab26e7d67d9bf62"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Feb 16 11:46:50 2007 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Apr 26 15:02:20 2007 -0700"
      },
      "message": "ocfs2: zero tail of sparse files on truncate\n\nSince we don\u0027t zero on extend anymore, truncate needs to be fixed up to zero\nthe part of a file between i_size and and end of it\u0027s cluster. Otherwise a\nsubsequent extend could expose bad data.\n\nThis introduced a new helper, which can be used in ocfs2_write().\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "363041a5f74b953ab6b705ac9c88e5eda218a24b",
      "tree": "c0661c3f88978f2049693682f1cb94b20a8454c0",
      "parents": [
        "dcd0538ff4e854fa9d7f4630b359ca8fdb5cb5a8"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Jan 17 12:31:35 2007 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Apr 26 15:01:31 2007 -0700"
      },
      "message": "ocfs2: temporarily remove extent map caching\n\nThe code in extent_map.c is not prepared to deal with a subtree being\nrotated between lookups. This can happen when filling holes in sparse files.\nInstead of a lengthy patch to update the code (which would likely lose the\nbenefit of caching subtree roots), we remove most of the algorithms and\nimplement a simple path based lookup. A less ambitious extent caching scheme\nwill be added in a later patch.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "dcd0538ff4e854fa9d7f4630b359ca8fdb5cb5a8",
      "tree": "226d725f8199907cea2433d1d183b01e51d9bc55",
      "parents": [
        "6f16bf655c5795586dd2ac96a7c70e0b9a378746"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jan 16 11:32:23 2007 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Apr 26 14:44:03 2007 -0700"
      },
      "message": "ocfs2: sparse b-tree support\n\nIntroduce tree rotations into the b-tree code. This will allow ocfs2 to\nsupport sparse files. Much of the added code is designed to be generic (in\nthe ocfs2 sense) so that it can later be re-used to implement large\nextended attributes.\n\nThis patch only adds the rotation code and does minimal updates to callers\nof the extent api.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "1fabe1481fac9e01bf8bffa60a2307ef379aa5de",
      "tree": "17092c1be837ed95c8f26646003e9e49cfdb9663",
      "parents": [
        "65eff9ccf86d63eb5c3e9071450a36e4e4fa9564"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Mon Oct 09 18:11:45 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Dec 01 18:28:28 2006 -0800"
      },
      "message": "ocfs2: Remove struct ocfs2_journal_handle in favor of handle_t\n\nThis is mostly a search and replace as ocfs2_journal_handle is now no more\nthan a container for a handle_t pointer.\n\nocfs2_commit_trans() becomes very straight forward, and we remove some out\nof date comments / code.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "ccd979bdbce9fba8412beb3f1de68a9d0171b12c",
      "tree": "c50ed941849ce06ccadd4ce27599b3ef9fdbe2ae",
      "parents": [
        "8df08c89c668e1bd922a053fdb5ba1fadbecbb38"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Dec 15 14:31:24 2005 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Jan 03 11:45:47 2006 -0800"
      },
      "message": "[PATCH] OCFS2: The Second Oracle Cluster Filesystem\n\nThe OCFS2 file system module.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\nSigned-off-by: Kurt Hackel \u003ckurt.hackel@oracle.com\u003e\n"
    }
  ]
}
