)]}'
{
  "log": [
    {
      "commit": "0a4ebed781dbb9ecbfef2374d29da1ab3b1a63f3",
      "tree": "ab171047c0b1bab2d423e85106f84fdf7b52ac7d",
      "parents": [
        "3b120ab76225592e9c267086fa4dfa3ce5a075fe",
        "939255798a468e1a92f03546de6e87be7b491e57"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 01 14:55:34 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 01 14:55:34 2011 -0800"
      },
      "message": "Merge branch \u0027upstream-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2\n\n* \u0027upstream-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2: (31 commits)\n  ocfs2: avoid unaligned access to dqc_bitmap\n  ocfs2: Use filemap_write_and_wait() instead of write_inode_now()\n  ocfs2: honor O_(D)SYNC flag in fallocate\n  ocfs2: Add a missing journal credit in ocfs2_link_credits() -v2\n  ocfs2: send correct UUID to cleancache initialization\n  ocfs2: Commit transactions in error cases -v2\n  ocfs2: make direntry invalid when deleting it\n  fs/ocfs2/dlm/dlmlock.c: free kmem_cache_zalloc\u0027d data using kmem_cache_free\n  ocfs2: Avoid livelock in ocfs2_readpage()\n  ocfs2: serialize unaligned aio\n  ocfs2: Implement llseek()\n  ocfs2: Fix ocfs2_page_mkwrite()\n  ocfs2: Add comment about orphan scanning\n  ocfs2: Clean up messages in the fs\n  ocfs2/cluster: Cluster up now includes network connections too\n  ocfs2/cluster: Add new function o2net_fill_node_map()\n  ocfs2/cluster: Fix output in file elapsed_time_in_ms\n  ocfs2/dlm: dlmlock_remote() needs to account for remastery\n  ocfs2/dlm: Take inflight reference count for remotely mastered resources too\n  ocfs2/dlm: Cleanup dlm_wait_for_node_death() and dlm_wait_for_node_recovery()\n  ...\n"
    },
    {
      "commit": "bfe8684869601dacfcb2cd69ef8cfd9045f62170",
      "tree": "4e213aaa766b26f43f0f9ec7998a7745239d9377",
      "parents": [
        "6d6b77f163c7eabedbba00ed2abb7d4a570bff76"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Fri Oct 28 14:13:29 2011 +0200"
      },
      "committer": {
        "name": "Christoph Hellwig",
        "email": "hch@serles.lst.de",
        "time": "Wed Nov 02 12:53:43 2011 +0100"
      },
      "message": "filesystems: add set_nlink()\n\nReplace remaining direct i_nlink updates with a new set_nlink()\nupdater function.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nTested-by: Toshiyuki Okajima \u003ctoshi.okajima@jp.fujitsu.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "03efed8a2a1b8e00164eb4720a82a7dd5e368a8e",
      "tree": "efe713ba18680a1ccedecfbff2d81d83f048fdb0",
      "parents": [
        "e12ca23d41bd157354a5d1aadff30211a410c53a"
      ],
      "author": {
        "name": "Tiger Yang",
        "email": "tiger.yang@oracle.com",
        "time": "Sat May 28 00:34:19 2011 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "jlbec@evilplan.org",
        "time": "Tue May 31 19:03:44 2011 -0700"
      },
      "message": "ocfs2: Bugfix for hard readonly mount\n\nocfs2 cannot currently mount a device that is readonly at the media\n(\"hard readonly\").  Fix the broken places.\nsee detail: http://oss.oracle.com/bugzilla/show_bug.cgi?id\u003d1322\n\n[ Description edited -- Joel ]\n\nSigned-off-by: Tiger Yang \u003ctiger.yang@oracle.com\u003e\nReviewed-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjlbec@evilplan.org\u003e\n"
    },
    {
      "commit": "99bdc3880c611c7f2061fbd5372ef81b40217e26",
      "tree": "ef68a53e28e9ee53ce9db3642bab5fa5b3d44866",
      "parents": [
        "ed59992e8d91b70053c53d846a76f7e1ac000454",
        "b4e1b7e88b2c87c358c2a88bec0c76d25accc604"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "jlbec@evilplan.org",
        "time": "Mon Mar 28 09:44:26 2011 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "jlbec@evilplan.org",
        "time": "Mon Mar 28 09:44:26 2011 -0700"
      },
      "message": "Merge branch \u0027mlog_replace_for_39\u0027 of git://repo.or.cz/taoma-kernel into ocfs2-merge-window-fix\n"
    },
    {
      "commit": "c1e8d35ef5ffb393b94a192034b5e3541e005d75",
      "tree": "b9a7f089acd3408c2835a3dfd6aa7bb0407587b3",
      "parents": [
        "ef6b689b63b9f5227ccee6f16dd9ee3faf58a464"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Mar 07 16:43:21 2011 +0800"
      },
      "committer": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Mar 07 16:43:21 2011 +0800"
      },
      "message": "ocfs2: Remove EXIT from masklog.\n\nmlog_exit is used to record the exit status of a function.\nBut because it is added in so many functions, if we enable it,\nthe system logs get filled up quickly and cause too much I/O.\nSo actually no one can open it for a production system or even\nfor a test.\n\nThis patch just try to remove it or change it. So:\n1. if all the error paths already use mlog_errno, it is just removed.\n   Otherwise, it will be replaced by mlog_errno.\n2. if it is used to print some return value, it is replaced with\n   mlog(0,...).\nmlog_exit_ptr is changed to mlog(0.\nAll those mlog(0,...) will be replaced with trace events later.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\n"
    },
    {
      "commit": "ef6b689b63b9f5227ccee6f16dd9ee3faf58a464",
      "tree": "ebe3416fcc221e152f2625e8e8794e92e3d8c979",
      "parents": [
        "422e6c4bc4b48c15b3cb57a1ca71431abfc57e54"
      ],
      "author": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Feb 21 11:10:44 2011 +0800"
      },
      "committer": {
        "name": "Tao Ma",
        "email": "boyu.mt@taobao.com",
        "time": "Mon Feb 21 11:10:44 2011 +0800"
      },
      "message": "ocfs2: Remove ENTRY from masklog.\n\nENTRY is used to record the entry of a function.\nBut because it is added in so many functions, if we enable it,\nthe system logs get filled up quickly and cause too much I/O.\nSo actually no one can open it for a production system or even\nfor a test.\n\nSo for mlog_entry_void, we just remove it.\nfor mlog_entry(...), we replace it with mlog(0,...), and they\nwill be replace by trace event later.\n\nSigned-off-by: Tao Ma \u003cboyu.mt@taobao.com\u003e\n"
    },
    {
      "commit": "5bc970e803ad2b1f26771f39376a79dbf0f5bf64",
      "tree": "cc2c0dd4a49ddad9691d0ef0312475db76bc6464",
      "parents": [
        "0cc9d5257857608ba85885b75fcada13d359b5d1"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Tue Dec 28 23:26:03 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "jlbec@evilplan.org",
        "time": "Sun Feb 20 03:56:07 2011 -0800"
      },
      "message": "ocfs2: Use hrtimer to track ocfs2 fs lock stats\n\nPatch makes use of the hrtimer to track times in ocfs2 lock stats.\n\nThe patch is a bit involved to ensure no additional impact on the memory\nfootprint. The size of ocfs2_inode_cache remains 1280 bytes on 32-bit systems.\n\nA related change was to modify the unit of the max wait time from nanosec to\nmicrosec allowing us to track max time larger than 4 secs. This change\nnecessitated the bumping of the output version in the debugfs file,\nlocking_state, from 2 to 3.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjlbec@evilplan.org\u003e\n"
    },
    {
      "commit": "5e98d492406818e6a94c0ba54c61f59d40cefa4a",
      "tree": "9eec0813194dd2192f6ae05d2f344e7839d2ab44",
      "parents": [
        "b4d693fcc5fe99ed211addb5c6a0f8398f0b266e"
      ],
      "author": {
        "name": "Goldwyn Rodrigues",
        "email": "rgoldwyn@gmail.com",
        "time": "Mon Jun 28 10:04:32 2010 -0500"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Sep 10 09:18:15 2010 -0700"
      },
      "message": "Track negative entries v3\n\nTrack negative dentries by recording the generation number of the parent\ndirectory in d_fsdata. The generation number for the parent directory is\nrecorded in the inode_info, which increments every time the lock on the\ndirectory is dropped.\n\nIf the generation number of the parent directory and the negative dentry\nmatches, there is no need to perform the revalidate, else a revalidate\nis forced. This improves performance in situations where nodes look for\nthe same non-existent file multiple times.\n\nThanks Mark for explaining the DLM sequence.\n\nSigned-off-by: Goldwyn Rodrigues \u003crgoldwyn@suse.de\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "33fa1d909c7357be715aa0e9f9e24c3ef5714493",
      "tree": "a8c76fce1cf75f806eea6ae8df4426914c089197",
      "parents": [
        "7156fffaaa15aeb0e0247736eff0a86f75f49f81"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Mon Jul 12 13:50:19 2010 -0700"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Jul 20 17:20:08 2010 +0200"
      },
      "message": "fs/ocfs2: Remove unnecessary casts of private_data\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "ae4f6ef13417deaa49471c0e903914a3ef3be258",
      "tree": "b8ba5499a8ad69678a232ece4d64d18447063054",
      "parents": [
        "f64dd44eb748438783b10b3f7a4968d2656a3c95"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Wed Apr 28 19:04:29 2010 +0200"
      },
      "committer": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Fri May 21 19:30:46 2010 +0200"
      },
      "message": "ocfs2: Avoid unnecessary block mapping when refreshing quota info\n\nThe position of global quota file info does not change. So we do not have\nto do logical -\u003e physical block translation every time we reread it from\ndisk. Thus we can also avoid taking ip_alloc_sem.\n\nAcked-by: Joel Becker \u003cJoel.Becker@oracle.com\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\n"
    },
    {
      "commit": "318ae2edc3b29216abd8a2510f3f80b764f06858",
      "tree": "ce595adde342f57f379d277b25e4dd206988a052",
      "parents": [
        "25cf84cf377c0aae5dbcf937ea89bc7893db5176",
        "3e58974027b04e84f68b964ef368a6cd758e2f84"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Mar 08 16:55:37 2010 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Mar 08 16:55:37 2010 +0100"
      },
      "message": "Merge branch \u0027for-next\u0027 into for-linus\n\nConflicts:\n\tDocumentation/filesystems/proc.txt\n\tarch/arm/mach-u300/include/mach/debug-macro.S\n\tdrivers/net/qlge/qlge_ethtool.c\n\tdrivers/net/qlge/qlge_main.c\n\tdrivers/net/typhoon.c\n"
    },
    {
      "commit": "9b915181af0a99fe94ef0152e6a4ca9990c3b6d0",
      "tree": "ecbca6ed6fd749c6130a7a1f28a9fe7f705ce029",
      "parents": [
        "bc9838c4d44a1713ab1bf24aa6675bc3a02b6a88"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Fri Feb 26 19:42:44 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Sat Feb 27 19:57:06 2010 -0800"
      },
      "message": "ocfs2: Use a separate masklog for AST and BASTs\n\nThis patch adds a new masklog and uses it allow tracing ASTs and BASTs\nin the dlmglue layer. This has been found to be very useful in debugging\ncluster locking issues.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "553b5eb91abd5f8e679d23ae547b92c589726814",
      "tree": "99b3e550a11b0d62d45bbc78d73d448acadd138a",
      "parents": [
        "e603cfb074e150736814ef093a411df32c02ba9f"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Jan 29 17:19:06 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 26 15:41:17 2010 -0800"
      },
      "message": "ocfs2: Pass the locking protocol into ocfs2_cluster_connect().\n\nInside the stackglue, the locking protocol structure is hanging off of\nthe ocfs2_cluster_connection.  This takes it one further; the locking\nprotocol is passed into ocfs2_cluster_connect().  Now different cluster\nconnections can have different locking protocols with distinct asts.\nNote that all locking protocols have to keep their maximum protocol\nversion in lock-step.\n\nWith the protocol structure set in ocfs2_cluster_connect(), there is no\nneed for the stackglue to have a static pointer to a specific protocol\nstructure.  We can change initialization to only pass in the maximum\nprotocol version.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "c0e4133851ed94c73ee3d34a2f2a245fcd0a60a1",
      "tree": "fd2dd796c4f07d669f00196670bbba5e5a931614",
      "parents": [
        "a796d2862aed8117acc9f470f3429a5ee852912e"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Jan 29 14:46:44 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 26 15:41:14 2010 -0800"
      },
      "message": "ocfs2: Attach the connection to the lksb\n\nWe\u0027re going to want it in the ast functions, so we convert union\nocfs2_dlm_lksb to struct ocfs2_dlm_lksb and let it carry the connection.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "a796d2862aed8117acc9f470f3429a5ee852912e",
      "tree": "71b837ae91effcdb4283e8c0bbf5c3162e7e21e1",
      "parents": [
        "34a9dd7e29e9129fec40c645a03f1bbbe810e771"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jan 28 19:22:39 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 26 15:41:14 2010 -0800"
      },
      "message": "ocfs2: Pass lksbs back from stackglue ast/bast functions.\n\nThe stackglue ast and bast functions tried to maintain the fiction that\ntheir arguments were void pointers.  In reality, stack_user.c had to\nknow that the argument was an ocfs2_lock_res in order to get the status\noff of the lksb.  That\u0027s ugly.\n\nThis changes stackglue to always pass the lksb as the argument to ast\nand bast functions.  The caller can always use container_of() to get the\nocfs2_lock_res or user_dlm_lock_res.  The net effect to the caller is\nzero.  They still get back the lockres in their ast.  stackglue gets\ncleaner, and now can use the lksb itself.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "3ad2f3fbb961429d2aa627465ae4829758bc7e07",
      "tree": "f365c513e8f5b477a61336a600ff54f32b7ad6e1",
      "parents": [
        "1537a3638cbf741d3826c1002026cce487a6bee0"
      ],
      "author": {
        "name": "Daniel Mack",
        "email": "daniel@caiaq.de",
        "time": "Wed Feb 03 08:01:28 2010 +0800"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Feb 09 11:13:56 2010 +0100"
      },
      "message": "tree-wide: Assorted spelling fixes\n\nIn particular, several occurances of funny versions of \u0027success\u0027,\n\u0027unknown\u0027, \u0027therefore\u0027, \u0027acknowledge\u0027, \u0027argument\u0027, \u0027achieve\u0027, \u0027address\u0027,\n\u0027beginning\u0027, \u0027desirable\u0027, \u0027separate\u0027 and \u0027necessary\u0027 are fixed.\n\nSigned-off-by: Daniel Mack \u003cdaniel@caiaq.de\u003e\nCc: Joe Perches \u003cjoe@perches.com\u003e\nCc: Junio C Hamano \u003cgitster@pobox.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "079b805782f94f4b278132286a8c9bc4655d1c51",
      "tree": "8ace4c9aa726593d85fd2b80cea87d6170251ff7",
      "parents": [
        "db0f6ce69776370232431eb8be85a5b18b0019c0"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Wed Feb 03 10:16:54 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Feb 03 17:26:03 2010 -0800"
      },
      "message": "ocfs2: Plugs race between the dc thread and an unlock ast message\n\nThis patch plugs a race between the downconvert thread and an unlock ast message.\nSpecifically, after the downconvert worker has done its task, the dc thread needs\nto check whether an unlock ast made the downconvert moot.\n\nReported-by: David Teigland \u003cteigland@redhat.com\u003e\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nAcked-by: Mark Fasheh \u003cmfasheh@sus.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "db0f6ce69776370232431eb8be85a5b18b0019c0",
      "tree": "cd3a18bf13fa6dcbf2c59940565ddfaedabcdd89",
      "parents": [
        "0d74125a6a68d4f1969ecaf0b3543f315916ccdc"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Mon Feb 01 16:55:50 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Feb 02 23:51:16 2010 -0800"
      },
      "message": "ocfs2: Remove overzealous BUG_ON during blocked lock processing\n\nDuring blocked lock processing, we should consider the possibility that the\nlock is no longer blocking.\n\nJoel Becker \u003cjoel.becker@oracle.com\u003e assisted in fixing this issue.\n\nReported-by: David Teigland \u003cteigland@redhat.com\u003e\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "0d74125a6a68d4f1969ecaf0b3543f315916ccdc",
      "tree": "c606fa6becb2bc6e41c2738bc6b3dd28a33b0068",
      "parents": [
        "a19128260107f951d1b4c421cf98b92f8092b069"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Fri Jan 29 09:44:11 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Feb 02 23:51:14 2010 -0800"
      },
      "message": "ocfs2: Do not downconvert if the lock level is already compatible\n\nDuring upconvert, if the master were to send a BAST, dlmglue will detect the\nupconversion in process and send a cancel convert to the master. Upon receiving\nthe AST for the cancel convert, it will re-process the lock resource to determine\nwhether it needs downconverting. Say, the up was from PR to EX and the BAST was\nfor EX. After the cancel convert, it will need to downconvert to NL.\n\nHowever, if the node was originally upconverting from NL to EX, then there would\nbe no reason to downconvert (assuming the same message sequence).\n\nThis patch makes dlmglue consider the possibility that the current lock level\nis already compatible and that downconverting is not required.\n\nJoel Becker \u003cjoel.becker@oracle.com\u003e assisted in fixing this issue.\n\nFixes ossbz#1178\nhttp://oss.oracle.com/bugzilla/show_bug.cgi?id\u003d1178\n\nReported-by: Coly Li \u003ccoly.li@suse.de\u003e\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "a19128260107f951d1b4c421cf98b92f8092b069",
      "tree": "0e98386142589c986fe433e1dd390f4a21db7bc9",
      "parents": [
        "0b94a909eb2e2f6990d05fd486a0cb4902ef1ae7"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Jan 21 10:50:03 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Feb 02 23:51:13 2010 -0800"
      },
      "message": "ocfs2: Prevent a livelock in dlmglue\n\nThere is possibility of a livelock in __ocfs2_cluster_lock(). If a node were\nto get an ast for an upconvert request, followed immediately by a bast,\nthere is a small window where the fs may downconvert the lock before the\nprocess requesting the upconvert is able to take the lock.\n\nThis patch adds a new flag to indicate that the upconvert is still in\nprogress and that the dc thread should not downconvert it right now.\n\nWengang Wang \u003cwen.gang.wang@oracle.com\u003e and Joel Becker\n\u003cjoel.becker@oracle.com\u003e contributed heavily to this patch.\n\nReported-by: David Teigland \u003cteigland@redhat.com\u003e\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "0b94a909eb2e2f6990d05fd486a0cb4902ef1ae7",
      "tree": "197c4da141781f52f72fe4f28e0e82e9432500b1",
      "parents": [
        "34e6c59af06cbca07b1490ec0015ea2d303470d3"
      ],
      "author": {
        "name": "Wengang Wang",
        "email": "wen.gang.wang@oracle.com",
        "time": "Thu Jan 21 10:50:02 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Feb 02 23:50:55 2010 -0800"
      },
      "message": "ocfs2: Fix setting of OCFS2_LOCK_BLOCKED during bast\n\nDuring bast, set the OCFS2_LOCK_BLOCKED flag only if the lock needs to\ndownconverted.\n\nSigned-off-by: Wengang Wang \u003cwen.gang.wang@oracle.com\u003e\nAcked-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nAcked-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "2bd632165c1f783888bd4cbed95f2f304829159b",
      "tree": "a4938fece1a47d22b1f8ca652a8218736b27aa3a",
      "parents": [
        "e5f2cb2b1ad05473fffe6970618997b906f23873"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Mon Jan 25 16:57:38 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Jan 25 19:20:51 2010 -0800"
      },
      "message": "ocfs2/trivial: Remove trailing whitespaces\n\nPatch removes trailing whitespaces.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "af901ca181d92aac3a7dc265144a9081a86d8f39",
      "tree": "380054af22521144fbe1364c3bcd55ad24c9bde4",
      "parents": [
        "972b94ffb90ea6d20c589d9a47215df103388ddd"
      ],
      "author": {
        "name": "André Goddard Rosa",
        "email": "andre.goddard@gmail.com",
        "time": "Sat Nov 14 13:09:05 2009 -0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Dec 04 15:39:55 2009 +0100"
      },
      "message": "tree-wide: fix assorted typos all over the place\n\nThat is \"success\", \"unknown\", \"through\", \"performance\", \"[re|un]mapping\"\n, \"access\", \"default\", \"reasonable\", \"[con]currently\", \"temperature\"\n, \"channel\", \"[un]used\", \"application\", \"example\",\"hierarchy\", \"therefore\"\n, \"[over|under]flow\", \"contiguous\", \"threshold\", \"enough\" and others.\n\nSigned-off-by: André Goddard Rosa \u003candre.goddard@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "d92bc5127b27f315ef0ef2c1e1829fd6a5cba54a",
      "tree": "cf6206f96ba57f53e0b187b88537042662183749",
      "parents": [
        "a2f2ddbf2bafdbc7e4f3bbf09439b42c8fee2747"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coly.li@suse.de",
        "time": "Fri Aug 28 19:03:18 2009 +0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Sep 23 01:54:47 2009 -0700"
      },
      "message": "dlmglue.c: add missed mlog lines\n\nThis patch adds the missed mlog_exit() and mlog_exit_void() lines when routines\nreturn.\n\nSigned-off-by: Coly Li \u003ccoly.li@suse.de\u003e\nAcked-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@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": "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": "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": "cb25797d451dc774d9dbc402a65f16a0e32199fe",
      "tree": "95957b5ae9a72c3971bd44efadf82a5b06a6e579",
      "parents": [
        "9a7aa12f3911853a3574d47d567b81a2a5df7208"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Jun 04 15:26:50 2009 +0200"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Jun 22 14:34:26 2009 -0700"
      },
      "message": "ocfs2: Add lockdep annotations\n\nAdd lockdep support to OCFS2. The support also covers all of the cluster\nlocks except for open locks, journal locks, and local quotafile locks. These\nare special because they are acquired for a node, not for a particular process\nand lockdep cannot deal with such type of locking.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "df152c241df9e9d2b9a65d37bd02961abe7f591a",
      "tree": "47e0c71919ed437db33530a200113a562b9c6b89",
      "parents": [
        "3211949f8998dde71d9fe2e063de045ece5e0473"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Mon Jun 22 11:40:07 2009 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Jun 22 14:24:55 2009 -0700"
      },
      "message": "ocfs2: Disable orphan scanning for local and hard-ro mounts\n\nLocal and Hard-RO mounts do not need orphan scanning.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "3211949f8998dde71d9fe2e063de045ece5e0473",
      "tree": "3aed155421642a6e04c94e0c5c521dea54e0b029",
      "parents": [
        "692684e19e317a374c18e70a44d6413e51f71c11"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Fri Jun 19 16:53:18 2009 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Jun 22 14:24:53 2009 -0700"
      },
      "message": "ocfs2: Do not initialize lvb in ocfs2_orphan_scan_lock_res_init()\n\nWe don\u0027t access the LVB in our ocfs2_*_lock_res_init() functions.\n\nSince the LVB can become invalid during some cluster recovery\noperations, the dlmglue must be able to handle an uninitialized\nLVB.\n\nFor the orphan scan lock, we initialized an uninitialzed LVB with our\nscan sequence number plus one.  This starts a normal orphan scan\ncycle.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "1c520dfbf391e1617ef61553f815b8006a066c44",
      "tree": "bb7e7e7b1225d6e42a61c56e52cbb627c5d2f3b4",
      "parents": [
        "3fe0344faf7fdcb158bd5c1a9aec960a8d70c8e8"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Jun 19 15:14:13 2009 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Jun 22 14:24:30 2009 -0700"
      },
      "message": "ocfs2: Provide the ocfs2_dlm_lvb_valid() stack API.\n\nThe Lock Value Block (LVB) of a DLM lock can be lost when nodes die and\nthe DLM cannot reconstruct its state.  Clients of the DLM need to know\nthis.\n\nocfs2\u0027s internal DLM, o2dlm, explicitly zeroes out the LVB when it loses\ntrack of the state.  This is not a standard behavior, but ocfs2 has\nalways relied on it.  Thus, an o2dlm LVB is always \"valid\".\n\nocfs2 now supports both o2dlm and fs/dlm via the stack glue.  When\nfs/dlm loses track of an LVBs state, it sets a flag\n(DLM_SBF_VALNOTVALID) on the Lock Status Block (LKSB).  The contents of\nthe LVB may be garbage or merely stale.\n\nocfs2 doesn\u0027t want to try to guess at the validity of the stale LVB.\nInstead, it should be checking the VALNOTVALID flag.  As this is the\n\u0027standard\u0027 way of treating LVBs, we will promote this behavior.\n\nWe add a stack glue API ocfs2_dlm_lvb_valid().  It returns non-zero when\nthe LVB is valid.  o2dlm will always return valid, while fs/dlm will\ncheck VALNOTVALID.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nAcked-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "83273932fbefb6ceef9c0b82ac4d23900728f4d9",
      "tree": "7ece8471af3d2a22543542e990369aca47aa3d25",
      "parents": [
        "edd45c08499a3e9d4c25431cd2b6a9ce5f692c92"
      ],
      "author": {
        "name": "Srinivas Eeda",
        "email": "srinivas.eeda@oracle.com",
        "time": "Wed Jun 03 17:02:55 2009 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Jun 03 19:14:31 2009 -0700"
      },
      "message": "ocfs2: timer to queue scan of all orphan slots\n\nWhen a dentry is unlinked, the unlinking node takes an EX on the dentry lock\nbefore moving the dentry to the orphan directory. Other nodes that have\nthis dentry in cache have a PR on the same dentry lock.  When the EX is\nrequested, the other nodes flag the corresponding inode as MAYBE_ORPHANED\nduring downconvert.  The inode is finally deleted when the last node to iput\nthe inode sees that i_nlink\u003d\u003d0 and the MAYBE_ORPHANED flag is set.\n\nA problem arises if a node is forced to free dentry locks because of memory\npressure. If this happens, the node will no longer get downconvert\nnotifications for the dentries that have been unlinked on another node.\nIf it also happens that node is actively using the corresponding inode and\nhappens to be the one performing the last iput on that inode, it will fail\nto delete the inode as it will not have the MAYBE_ORPHANED flag set.\n\nThis patch fixes this shortcoming by introducing a periodic scan of the\norphan directories to delete such inodes. Care has been taken to distribute\nthe workload across the cluster so that no one node has to perform the task\nall the time.\n\nSigned-off-by: Srinivas Eeda \u003csrinivas.eeda@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "6ca497a83e592d64e050c4d04b6dedb8c915f39a",
      "tree": "0b9cd611d6d907881841eca73d12a7f3b85f1716",
      "parents": [
        "9405dccfd3201d2b76e120949bec81ba8cfbd2d0"
      ],
      "author": {
        "name": "wengang wang",
        "email": "wen.gang.wang@oracle.com",
        "time": "Fri Mar 06 21:29:10 2009 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 03 11:39:25 2009 -0700"
      },
      "message": "ocfs2: fix rare stale inode errors when exporting via nfs\n\nFor nfs exporting, ocfs2_get_dentry() returns the dentry for fh.\nocfs2_get_dentry() may read from disk when the inode is not in memory,\nwithout any cross cluster lock. this leads to the file system loading a\nstale inode.\n\nThis patch fixes above problem.\n\nSolution is that in case of inode is not in memory, we get the cluster\nlock(PR) of alloc inode where the inode in question is allocated from (this\ncauses node on which deletion is done sync the alloc inode) before reading\nout the inode itsself. then we check the bitmap in the group (the inode in\nquestion allcated from) to see if the bit is clear. if it\u0027s clear then it\u0027s\nstale. if the bit is set, we then check generation as the existing code\ndoes.\n\nWe have to read out the inode in question from disk first to know its alloc\nslot and allot bit. And if its not stale we read it out using ocfs2_iget().\nThe second read should then be from cache.\n\nAnd also we have to add a per superblock nfs_sync_lock to cover the lock for\nalloc inode and that for inode in question. this is because ocfs2_get_dentry()\nand ocfs2_delete_inode() lock on them in reverse order. nfs_sync_lock is locked\nin EX mode in ocfs2_get_dentry() and in PR mode in ocfs2_delete_inode(). so\nthat mutliple ocfs2_delete_inode() can run concurrently in normal case.\n\n[mfasheh@suse.com: build warning fixes and comment cleanups]\nSigned-off-by: Wengang Wang \u003cwen.gang.wang@oracle.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "c74ff8bb2235d848beb67fcfddae71ecbe3f92b1",
      "tree": "516dd4c87a13c5a068fb47660488f52de486ddb2",
      "parents": [
        "7dc102b737e9f49dac426161294cb2d326a97d8e"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Tue Feb 03 12:37:14 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Feb 26 11:51:09 2009 -0800"
      },
      "message": "ocfs2: Cleanup the lockname print in dlmglue.c\n\nThe dentry lock has a different format than other locks. This patch fixes\nocfs2_log_dlm_error() macro to make it print the dentry lock correctly.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "a4b91965d39d5d53b470d6aa62cba155a6f3ffe1",
      "tree": "823d8730f730e41204c62f645953fac5de9315a3",
      "parents": [
        "554e7f9e043e29da79c044f7a55efe4fad40701e"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Thu Jan 29 17:12:31 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Feb 02 14:20:19 2009 -0800"
      },
      "message": "ocfs2: Wakeup the downconvert thread after a successful cancel convert\n\nWhen two nodes holding PR locks on a resource concurrently attempt to\nupconvert the locks to EX, the master sends a BAST to one of the nodes. This\nmessage tells that node to first cancel convert the upconvert request,\nfollowed by downconvert to a NL. Only when this lock is downconverted to NL,\ncan the master upconvert the first node\u0027s lock to EX.\n\nWhile the fs was doing the cancel convert, it was forgetting to wake up the\ndc thread after a successful cancel, leading to a deadlock.\n\nReported-and-Tested-by: David Teigland \u003cteigland@redhat.com\u003e\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "73ac36ea14fd18ea3dc057e41b16ff31a3c0bd5a",
      "tree": "7f187cade83d9ca9bd180273c25e1216a1dff506",
      "parents": [
        "da2bdf9a6ff40b10d77620d0d76b02a738c103cb"
      ],
      "author": {
        "name": "Coly Li",
        "email": "coyli@suse.de",
        "time": "Wed Jan 07 18:09:16 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 08 08:31:15 2009 -0800"
      },
      "message": "fix similar typos to successfull\n\nWhen I review ocfs2 code, find there are 2 typos to \"successfull\".  After\ndoing grep \"successfull \" in kernel tree, 22 typos found totally -- great\nminds always think alike :)\n\nThis patch fixes all the similar typos. Thanks for Randy\u0027s ack and comments.\n\nSigned-off-by: Coly Li \u003ccoyli@suse.de\u003e\nAcked-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nAcked-by: Roland Dreier \u003crolandd@cisco.com\u003e\nCc: Jeremy Kerr \u003cjk@ozlabs.org\u003e\nCc: Jeff Garzik \u003cjeff@garzik.org\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nCc: Vlad Yasevich \u003cvladislav.yasevich@hp.com\u003e\nCc: Sridhar Samudrala \u003csri@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a641dc2a5a1445eb4cb491080dfc41c42a9eb37d",
      "tree": "95e33d83f3399924521febd6e886b62d4715e23c",
      "parents": [
        "38d59ef61c11cafc50a66787bdbbe80d58bbd9c0"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Wed Dec 24 16:03:48 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jan 05 08:40:36 2009 -0800"
      },
      "message": "ocfs2: remove unneeded lvb casts\n\ndlmglue.c has lots of code which casts the return value of ocfs2_dlm_lvb().\nThis is pointless however, as ocfs2_dlm_lvb() returns void *.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "85eb8b73d66530bb7b931789ae7a5ec9744eed34",
      "tree": "4590be147364e0437f23a0d6bf72ccc900852eb9",
      "parents": [
        "57a09a7b3d9445a17c78d544f1e49d4d7d61705a"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "Joel.Becker@oracle.com",
        "time": "Tue Nov 25 15:31:27 2008 +0100"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jan 05 08:40:24 2009 -0800"
      },
      "message": "ocfs2: Fix ocfs2_read_quota_block() error handling.\n\nocfs2_bread() has become ocfs2_read_virt_blocks(), with a prototype to\nmatch ocfs2_read_blocks().  The quota code, converting from\nocfs2_bread(), wraps the call to ocfs2_read_virt_blocks() in\nocfs2_read_quota_block().  Unfortunately, the prototype of\nocfs2_read_quota_block() matches the old prototype of ocfs2_bread().\n\nThe problem is that ocfs2_bread() returned the buffer head, and callers\nassumed that a NULL pointer was indicative of error.  It wasn\u0027t.  This\nis why ocfs2_bread() took an int*err argument as well.\n\nThe new prototype of ocfs2_read_virt_blocks() avoids this error handling\nconfusion.  Let\u0027s change ocfs2_read_quota_block() to match.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "9e33d69f553aaf11377307e8d6f82deb3385e351",
      "tree": "ded5f48f6cf82db976f30d5f0f4d44b941f60f44",
      "parents": [
        "bbbd0eb34bf801dee01e345785959a75258f6567"
      ],
      "author": {
        "name": "Jan Kara",
        "email": "jack@suse.cz",
        "time": "Mon Aug 25 19:56:50 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jan 05 08:40:23 2009 -0800"
      },
      "message": "ocfs2: Implementation of local and global quota file handling\n\nFor each quota type each node has local quota file. In this file it stores\nchanges users have made to disk usage via this node. Once in a while this\ninformation is synced to global file (and thus with other nodes) so that\nlimits enforcement at least aproximately works.\n\nGlobal quota files contain all the information about usage and limits. It\u0027s\nmostly handled by the generic VFS code (which implements a trie of structures\ninside a quota file). We only have to provide functions to convert structures\nfrom on-disk format to in-memory one. We also have to provide wrappers for\nvarious quota functions starting transactions and acquiring necessary cluster\nlocks before the actual IO is really started.\n\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "b657c95c11088d77fc1bfc9c84d940f778bf9d12",
      "tree": "7e52e73aabbdbc55f644ad26735edc25a652ac32",
      "parents": [
        "a68979b857283daf4acc405e476dcc8812a3ff2b"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Nov 13 14:49:11 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jan 05 08:36:52 2009 -0800"
      },
      "message": "ocfs2: Wrap inode block reads in a dedicated function.\n\nThe ocfs2 code currently reads inodes off disk with a simple\nocfs2_read_block() call.  Each place that does this has a different set\nof sanity checks it performs.  Some check only the signature.  A couple\nvalidate the block number (the block read vs di-\u003ei_blkno).  A couple\nothers check for VALID_FL.  Only one place validates i_fs_generation.  A\ncouple check nothing.  Even when an error is found, they don\u0027t all do\nthe same thing.\n\nWe wrap inode reading into ocfs2_read_inode_block().  This will validate\nall the above fields, going readonly if they are invalid (they never\nshould be).  ocfs2_read_inode_block_full() is provided for the places\nthat want to pass read_block flags.  Every caller is passing a struct\ninode with a valid ip_blkno, so we don\u0027t need a separate blkno argument\neither.\n\nWe will remove the validation checks from the rest of the code in a\nlater commit, as they are no longer necessary.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "07f9eebcdfaeefc8f807fa1bcce1d7c3ae6661b1",
      "tree": "838ab2a397e1edb3dcfb55b54144f9fb0524cb75",
      "parents": [
        "66f502a416f18cd36179290746aa53736c6b2828"
      ],
      "author": {
        "name": "David Teigland",
        "email": "teigland@redhat.com",
        "time": "Mon Nov 17 12:28:48 2008 -0600"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Dec 01 14:46:45 2008 -0800"
      },
      "message": "ocfs2: fix wake_up in unlock_ast\n\nIn ocfs2_unlock_ast(), call wake_up() on lockres before releasing\nthe spin lock on it.  As soon as the spin lock is released, the\nlockres can be freed.\n\nSigned-off-by: David Teigland \u003cteigland@redhat.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "0fcaa56a2a020dd6f90c202b7084e6f4cbedb6c2",
      "tree": "057204016523ce0274d4a23ec02944075f084e8c",
      "parents": [
        "31d33073ca38603dea705dae45e094a64ca062d6"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Oct 09 17:20:31 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Tue Oct 14 11:51:57 2008 -0700"
      },
      "message": "ocfs2: Simplify ocfs2_read_block()\n\nMore than 30 callers of ocfs2_read_block() pass exactly OCFS2_BH_CACHED.\nOnly six pass a different flag set.  Rather than have every caller care,\nlet\u0027s make ocfs2_read_block() take no flags and always do a cached read.\nThe remaining six places can call ocfs2_read_blocks() directly.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "31d33073ca38603dea705dae45e094a64ca062d6",
      "tree": "cf02beb489456ebc9e07bace80e96ad1150f2cbf",
      "parents": [
        "da1e90985a0e767e44397c9db0937e236033fa58"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Oct 09 17:20:30 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Tue Oct 14 11:43:29 2008 -0700"
      },
      "message": "ocfs2: Require an inode for ocfs2_read_block(s)().\n\nNow that synchronous readers are using ocfs2_read_blocks_sync(), all\ncallers of ocfs2_read_blocks() are passing an inode.  Use it\nunconditionally.  Since it\u0027s there, we don\u0027t need to pass the\nocfs2_super either.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "dd25e55ea133b14678cfaa9e205b082b24b26dbc",
      "tree": "ddbf448a41cf491de70395bbb788dc06bb6a6deb",
      "parents": [
        "8ddb7b004dfa1832a750e199df8bff4b75b73565"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Wed May 28 14:41:00 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jul 14 13:57:14 2008 -0700"
      },
      "message": "ocfs2: fix printk format warnings with OCFS2_FS_STATS\u003dn\n\nFix printk format warnings when OCFS2_FS_STATS\u003dn:\n\nlinux-next-20080528/fs/ocfs2/dlmglue.c: In function \u0027ocfs2_dlm_seq_show\u0027:\nlinux-next-20080528/fs/ocfs2/dlmglue.c:2623: warning: format \u0027%llu\u0027 expects type \u0027long long unsigned int\u0027, but argument 3 has type \u0027int\u0027\nlinux-next-20080528/fs/ocfs2/dlmglue.c:2623: warning: format \u0027%llu\u0027 expects type \u0027long long unsigned int\u0027, but argument 4 has type \u0027int\u0027\nlinux-next-20080528/fs/ocfs2/dlmglue.c:2623: warning: format \u0027%llu\u0027 expects type \u0027long long unsigned int\u0027, but argument 7 has type \u0027int\u0027\nlinux-next-20080528/fs/ocfs2/dlmglue.c:2623: warning: format \u0027%llu\u0027 expects type \u0027long long unsigned int\u0027, but argument 8 has type \u0027int\u0027\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "8ddb7b004dfa1832a750e199df8bff4b75b73565",
      "tree": "92adac97690c27e44a65825864d4d5f9a6a2ca22",
      "parents": [
        "ce7231e92dac381f6e4f9cfdfdf9e0ea055223ad"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "sunil.mushran@oracle.com",
        "time": "Tue May 13 13:45:15 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jul 14 13:57:14 2008 -0700"
      },
      "message": "[PATCH 2/2] ocfs2: Instrument fs cluster locks\n\nThis patch adds code to track the number of times the fs takes\nvarious cluster locks as well as the times associated with it.\nThe information is made available to users via debugfs.\n\nThis patch was originally written by Jan Kara \u003cjack@suse.cz\u003e.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "e988cf1cfed4ed80bf40528e655fe18bed6a38b6",
      "tree": "eeaf62bcf6e9f9b3154b70bf98e70881234f7ccc",
      "parents": [
        "6329d3021bcfa9038621e6e917d98929421d8ec8"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Jul 10 09:25:39 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Jul 10 09:25:39 2008 -0700"
      },
      "message": "ocfs2: Fix flags in ocfs2_file_lock\n\nThe stack-glue merge changed the way we use flags in dlmglue in that we now\nuse the fs/dlm equivalents. Unfortunately, a merge error left the new flock\ncode only partially updated. This took a while to show up though, because\nthe lock level constants are actually identical between o2dlm and fs/dlm.\nThe *_CONVERT and *_NOQUEUE flags have different values though, which is\neventually causing a crash in flags_to_o2dlm().\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "9c6c877c04ce17d76a35d2173d3a3840d6b796a2",
      "tree": "db8bd7a104f17ddc28b0e642f39cbd059aca0fb7",
      "parents": [
        "b61817e1166c5e19c08baf05196477cc345e1b1a"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 01 15:17:30 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:05 2008 -0700"
      },
      "message": "ocfs2: Add the \u0027cluster_stack\u0027 sysfs file.\n\nUserspace can now query and specify the cluster stack in use via the\n/sys/fs/ocfs2/cluster_stack file.  By default, it is \u0027o2cb\u0027, which is\nthe classic stack.  Thus, old tools that do not know how to modify this\nfile will work just fine.  The stack cannot be modified if there is a\nlive filesystem.\n\nocfs2_cluster_connect() now takes the expected cluster stack as an\nargument.  This way, the filesystem and the stack glue ensure they are\nspeaking to the same backend.\n\nIf the stack is \u0027o2cb\u0027, the o2cb stack plugin is used.  For any other\nvalue, the fsdlm stack plugin is selected.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "286eaa95c5c5915a6b72cc3f0a2534161fd7928b",
      "tree": "dce03b619389cc5b5e2508b30ca3e1411401cf4e",
      "parents": [
        "e3dad42bf993a0f24eb6e46152356c9b119c15e8"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 01 15:03:57 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:05 2008 -0700"
      },
      "message": "ocfs2: Break out stackglue into modules.\n\nWe define the ocfs2_stack_plugin structure to represent a stack driver.\nThe o2cb stack code is split into stack_o2cb.c.  This becomes the\nocfs2_stack_o2cb.ko module.\n\nThe stackglue generic functions are similarly split into the\nocfs2_stackglue.ko module.  This module now provides an interface to\nregister drivers.  The ocfs2_stack_o2cb driver registers itself.  As\npart of this interface, ocfs2_stackglue can load drivers on demand.\nThis is accomplished in ocfs2_cluster_connect().\n\nocfs2_cluster_disconnect() is now notified when a _hangup() is pending.\nIf a hangup is pending, it will not release the driver module and will\nlet _hangup() do that.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "63e0c48ae6986a5bbb8e8dd9210c0e6ca79f2e50",
      "tree": "761be605ec94525d51ad09074bc70a2f9ddb2537",
      "parents": [
        "cf0acdcd640e9466059e69951c557e90b4bee45a"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Jan 30 16:58:36 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:05 2008 -0700"
      },
      "message": "ocfs2: Clean up stackglue initialization\n\nThe stack glue initialization function needs a better name so that it can be\nused cleanly when stackglue becomes a module.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "cf0acdcd640e9466059e69951c557e90b4bee45a",
      "tree": "c54bccbed204770005265176500ae0549d4ca31a",
      "parents": [
        "1693a5c0117f8ccd010a666f97aaf0f14fb0a0e4"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Jan 29 16:59:55 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:04 2008 -0700"
      },
      "message": "ocfs2: Abstract out a debugging function for underlying dlms.\n\ndlmglue.c was still referencing a raw o2dlm lksb in one instance.  Let\u0027s\ncreate a generic ocfs2_dlm_dump_lksb() function.  This allows underlying\nDLMs to print whatever they want about their lock.\n\nWe then move the o2dlm dump into stackglue.c where it belongs.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "1693a5c0117f8ccd010a666f97aaf0f14fb0a0e4",
      "tree": "189560d59df3eebfe756698d24219008d9662606",
      "parents": [
        "de551246e7bc5558371c3427889a8db1b8cc60f4"
      ],
      "author": {
        "name": "David Teigland",
        "email": "teigland@redhat.com",
        "time": "Wed Jan 30 16:52:53 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:04 2008 -0700"
      },
      "message": "ocfs2: handle async EAGAIN from NOQUEUE request\n\nWhen using fsdlm, -EAGAIN is returned in the async callback for NOQUEUE\nrequests. Fix up dlmglue to expect this.\n\nSigned-off-by: David Teigland \u003cteigland@redhat.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "de551246e7bc5558371c3427889a8db1b8cc60f4",
      "tree": "31ae24280b8c3517434a894c32e9aa5faae2a173",
      "parents": [
        "0abd6d1803b01c741430af270026d1d95a103d9c"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 01 14:45:08 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:04 2008 -0700"
      },
      "message": "ocfs2: Remove CANCELGRANT from the view of dlmglue.\n\no2dlm has the non-standard behavior of providing a cancel callback\n(unlock_ast) even when the cancel has failed (the locking operation\nsucceeded without canceling).  This is called CANCELGRANT after the\nstatus code sent to the callback.  fs/dlm does not provide this\ncallback, so dlmglue must be changed to live without it.\no2dlm_unlock_ast_wrapper() in stackglue now ignores CANCELGRANT calls.\n\nBecause dlmglue no longer sees CANCELGRANT, ocfs2_unlock_ast() no longer\nneeds to check for it.  ocfs2_locking_ast() must catch that a cancel was\ntried and clear the cancel state.\n\nMaking these changes opens up a locking race.  dlmglue uses the the\nOCFS2_LOCK_BUSY flag to ensure only one thread is calling the dlm at any\none time.  But dlmglue must unlock the lockres before calling into the\ndlm.  In the small window of time between unlocking the lockres and\ncalling the dlm, the downconvert thread can try to cancel the lock.  The\ndownconvert thread is checking the OCFS2_LOCK_BUSY flag - it doesn\u0027t\nknow that ocfs2_dlm_lock() has not yet been called.\n\nBecause ocfs2_dlm_lock() has not yet been called, the cancel operation\nwill just be a no-op.  There\u0027s nothing to cancel.  With CANCELGRANT,\ndlmglue uses the CANCELGRANT callback to clear up the cancel state.\nWhen it comes around again, it will retry the cancel.  Eventually, the\nfirst thread will have called into ocfs2_dlm_lock(), and either the\nlock or the cancel will succeed.  The downconvert thread can then do its\ndownconvert.\n\nWithout CANCELGRANT, there is nothing to clean up the cancellation\nstate.  The downconvert thread does not know to retry its operations.\nMore importantly, the original lock may be blocking on the other node\nthat is trying to cancel us.  With neither able to make progress, the\nast is never called and the cancellation state is never cleaned up that\nway.  dlmglue is deadlocked.\n\nThe OCFS2_LOCK_PENDING flag is introduced to remedy this window.  It is\nset at the same time OCFS2_LOCK_BUSY is.  Thus, the downconvert thread\ncan check whether the lock is cancelable.  If not, it just loops around\nto try again.  Once ocfs2_dlm_lock() is called, the thread then clears\nOCFS2_LOCK_PENDING and wakes the downconvert thread.  Now, if the\ndownconvert thread finds the lock BUSY, it can safely try to cancel it.\nWhether the cancel works or not, the state will be properly set and the\nlock processing can continue.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "0abd6d1803b01c741430af270026d1d95a103d9c",
      "tree": "c1aca3d286990be6f9043e28ad0bacaf3443ef54",
      "parents": [
        "6953b4c008628b945bfe0cee97f6e78a98773859"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Tue Jan 29 16:59:56 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:04 2008 -0700"
      },
      "message": "ocfs2: Fill node number during cluster stack init\n\nIt doesn\u0027t make sense to query for a node number before connecting to the\ncluster stack. This should be safe to do because node_num is only just\nprinted,\nand we\u0027re actually only moving the setting of node num a small amount\nfurther in the mount process.\n\n[ Disconnect when node query fails -- Joel ]\n\nReviewed-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "6953b4c008628b945bfe0cee97f6e78a98773859",
      "tree": "de00a19f59466d9e83b00112696afa5b02abbd9c",
      "parents": [
        "19fdb624dc8ccb663f6e48b3a3a3fa4e4e567fc1"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Jan 29 16:59:56 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:04 2008 -0700"
      },
      "message": "ocfs2: Move o2hb functionality into the stack glue.\n\nThe last bit of classic stack used directly in ocfs2 code is o2hb.\nSpecifically, the check for heartbeat during mount and the call to\nocfs2_hb_ctl during unmount.\n\nWe create an extra API, ocfs2_cluster_hangup(), to encapsulate the call\nto ocfs2_hb_ctl.  Other stacks will just leave hangup() empty.\n\nThe check for heartbeat is moved into ocfs2_cluster_connect().  It will\nbe matched by a similar check for other stacks.\n\nWith this change, only stackglue.c includes cluster/ headers.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "4670c46ded9a18268d1265417ff4ac72145a7917",
      "tree": "4f70822ddee389a9c8ed572b215a3355c20db3a1",
      "parents": [
        "8f2c9c1b16bf6ed0903b29c49d56fa0109a390e4"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 01 14:39:35 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:04 2008 -0700"
      },
      "message": "ocfs2: Introduce the new ocfs2_cluster_connect/disconnect() API.\n\nThis step introduces a cluster stack agnostic API for initializing and\nexiting.  fs/ocfs2/dlmglue.c no longer uses o2cb/o2dlm knowledge to\nconnect to the stack.  It is all handled in stackglue.c.\n\nheartbeat.c no longer needs to know how it gets called.\nocfs2_do_node_down() is now a clean recovery trigger.\n\nThe big gotcha is the ordering of initializations and de-initializations done\nunderneath ocfs2_cluster_connect().  ocfs2_dlm_init() used to do all\no2dlm initialization in one block.  Thus, the o2dlm functionality of\nocfs2_cluster_connect() is very straightforward.  ocfs2_dlm_shutdown(),\nhowever, did a few things between de-registration of the eviction\ncallback and actually shutting down the domain.  Now de-registration and\nshutdown of the domain are wrapped within the single\nocfs2_cluster_disconnect() call.  I\u0027ve checked the code paths to make\nsure we can safely tear down things in ocfs2_dlm_shutdown() before\ncalling ocfs2_cluster_disconnect().  The filesystem has already set\nitself to ignore the callback.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "8f2c9c1b16bf6ed0903b29c49d56fa0109a390e4",
      "tree": "8564370d96cbfb3a0125f17c93ee3587efef1ed1",
      "parents": [
        "7431cd7e8dd0e46e9b12bd6a1ac1286f4b420371"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 01 12:16:57 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:04 2008 -0700"
      },
      "message": "ocfs2: Create the lock status block union.\n\nWrap the lock status block (lksb) in a union.  Later we will add a union\nelement for the fs/dlm lksb.  Create accessors for the status and lvb\nfields.\n\nOther than a debugging function, dlmglue.c does not directly reference\nthe o2dlm locking path anymore.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "7431cd7e8dd0e46e9b12bd6a1ac1286f4b420371",
      "tree": "748d55c349f12ee504635748c64ee14026eda556",
      "parents": [
        "bd3e76105d4478ab89951a52d1a35250d24a9f16"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 01 12:15:37 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:03 2008 -0700"
      },
      "message": "ocfs2: Use -errno instead of dlm_status for ocfs2_dlm_lock/unlock() API.\n\nChange the ocfs2_dlm_lock/unlock() functions to return -errno values.\nThis is the first step towards elminiating dlm_status in\nfs/ocfs2/dlmglue.c.  The change also passes -errno values to\n-\u003eunlock_ast().\n\n[ Fix a return code in dlmglue.c and change the error translation table into\n  an array of ints. --Mark ]\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "bd3e76105d4478ab89951a52d1a35250d24a9f16",
      "tree": "3a024471d62491f0160031663e0db23f42be37b8",
      "parents": [
        "24ef1815e5e13e50196eb1ab8ddc0d783443bdf8"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 01 12:14:57 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:03 2008 -0700"
      },
      "message": "ocfs2: Use global DLM_ constants in generic code.\n\nThe ocfs2 generic code should use the values in \u003clinux/dlmconstants.h\u003e.\nstackglue.c will convert them to o2dlm values.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "24ef1815e5e13e50196eb1ab8ddc0d783443bdf8",
      "tree": "4c44e87b1a80d4745416c9973258c40db8433829",
      "parents": [
        "386a2ef8576e966076c293f6496b9e3d7e3d9035"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Jan 29 17:37:32 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:03 2008 -0700"
      },
      "message": "ocfs2: Separate out dlm lock functions.\n\nThis is the first in a series of patches to isolate ocfs2 from the\nunderlying cluster stack. Here we wrap the dlm locking functions with\nocfs2-specific calls. Because ocfs2 always uses the same dlm lock status\ncallbacks, we can eliminate the callbacks from the filesystem visible\nfunctions.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "553abd046af609191a91af7289d87d477adc659f",
      "tree": "cff21f65d49c0041993095a051edf76840c2af28",
      "parents": [
        "d85b20e4b300edfd290f21fc2d790ba16d2f225b"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 01 12:03:57 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:02 2008 -0700"
      },
      "message": "ocfs2: Change the recovery map to an array of node numbers.\n\nThe old recovery map was a bitmap of node numbers.  This was sufficient\nfor the maximum node number of 254.  Going forward, we want node numbers\nto be UINT32.  Thus, we need a new recovery map.\n\nNote that we can\u0027t keep track of slots here.  We must write down the\nnode number to recovery *before* we get the locks needed to convert a\nnode number into a slot number.\n\nThe recovery map is now an array of unsigned ints, max_slots in size.\nIt moves to journal.c with the rest of recovery.\n\nBecause it needs to be initialized, we move all of recovery initialization\ninto a new function, ocfs2_recovery_init().  This actually cleans up\nocfs2_initialize_super() a little as well.  Following on, recovery cleaup\nbecomes part of ocfs2_recovery_exit().\n\nA number of node map functions are rendered obsolete and are removed.\n\nFinally, waiting on recovery is wrapped in a function rather than naked\nchecks on the recovery_event.  This is a cleanup from Mark.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "8e8a4603b5422c9145880e73b23bc4c2c4de0098",
      "tree": "4d388ae74ed9e5f8cfec19ff20d07d81ca742592",
      "parents": [
        "4b119e21d0c66c22e8ca03df05d9de623d0eb50f"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Feb 01 11:59:09 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:02 2008 -0700"
      },
      "message": "ocfs2: Move slot map access into slot_map.c\n\njournal.c and dlmglue.c would refresh the slot map by hand.  Instead, have\nthe update and clear functions do the work inside slot_map.c.  The eventual\nresult is to make ocfs2_slot_info defined privately in slot_map.c\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "90d99779a4cc134daaf8910d814b7a8a5d1e8970",
      "tree": "65d242c293fcbe4d6875a8043847eaa687f82880",
      "parents": [
        "0f71b7b40f55de909e40fa5ab217a5da3439c7d8"
      ],
      "author": {
        "name": "Jan Engelhardt",
        "email": "jengelh@computergmbh.de",
        "time": "Tue Jan 22 20:52:20 2008 +0100"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Mon Mar 10 15:13:57 2008 -0700"
      },
      "message": "[PATCH] [OCFS2]: constify function pointer tables\n\nSigned-off-by: Jan Engelhardt \u003cjengelh@computergmbh.de\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "200bfae37a15e50e0f9aa5683958bdfc3fd55e05",
      "tree": "fab109dcf92a970780a5c9fc4a2d8e4c6191d0e0",
      "parents": [
        "006000566d4e95b8d1924addfb41094acf0d5ec2"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Sun Feb 17 10:20:38 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Mon Mar 03 15:50:21 2008 -0800"
      },
      "message": "[2.6 patch] make ocfs2_downconvert_thread() static\n\nThis patch makes the needlessly global ocfs2_downconvert_thread()\nstatic.\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.org\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "006000566d4e95b8d1924addfb41094acf0d5ec2",
      "tree": "4f0617f1d7dcc1728e8d6e3bff17dbf510af4bb9",
      "parents": [
        "0dd3256e04c452396c9d22943e4a18e02f4dbdf4"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Tue Jan 29 00:11:41 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Mon Mar 03 15:50:21 2008 -0800"
      },
      "message": "[2.6 patch] fs/ocfs2/: possible cleanups\n\nThis patch contains the following cleanups that are now possible:\n- make the following needlessly global functions static:\n  - dlmglue.c:ocfs2_process_blocked_lock()\n  - heartbeat.c:ocfs2_node_map_init()\n- #if 0 the following unused global function plus support functions:\n  - heartbeat.c:ocfs2_node_map_is_only()\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.org\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "1044e401af9a309637828aa3cc8f3b6409fcbf4e",
      "tree": "1da79829e1afa048b5e9e45c32470bbd75e49084",
      "parents": [
        "7ad8b3d30ecae325fcccbf86f34ce3af716b4f95"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Feb 28 17:16:03 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Mon Mar 03 15:50:21 2008 -0800"
      },
      "message": "ocfs2: Fix writeout in ocfs2_data_convert_worker()\n\nCommit f1f540688eae66c274ff1c1133b5d9c687b28f58 \"optimized\"\nocfs2_data_convert_worker() to \"only do work for regular files\".\nUnfortunately, I left out a \u0027!\u0027, which casued it to *skip* regular files.\nThis was hidden from testing until recently because the default data\njournaling mode (data\u003dordered) doesn\u0027t exercise this code.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "d24fbcda0c4988322949df3d759f1cfb32b32953",
      "tree": "d8454796d58649126005001472e9dcee8bd557ca",
      "parents": [
        "3e6bdf473f489664dac4d7511d26c7ac3dfdc748"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "Joel.Becker@oracle.com",
        "time": "Fri Jan 25 17:02:21 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Feb 06 16:11:29 2008 -0800"
      },
      "message": "ocfs2: Negotiate locking protocol versions.\n\nCurrently, when ocfs2 nodes connect via TCP, they advertise their\ncompatibility level.  If the versions do not match, two nodes cannot speak\nto each other and they disconnect. As a result, this provides no forward or\nbackwards compatibility.\n\nThis patch implements a simple protocol negotiation at the dlm level by\nintroducing a major/minor version number scheme for entities that\ncommunicate.  Specifically, o2dlm has a major/minor version for interaction\nwith o2dlm on other nodes, and ocfs2 itself has a major/minor version for\ninteracting with the filesystem on other nodes.\n\nThis will allow rolling upgrades of ocfs2 clusters when changes to the\nlocking or network protocols can be done in a backwards compatible manner.\nIn those cases, only the minor number is changed and the negotatied protocol\nminor is returned from dlm join. In the far less likely event that a\nrequired protocol change makes backwards compatibility impossible, we simply\nbump the major number.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "cf8e06f1a860d8680d6bb4ac8ec7d7724988e46f",
      "tree": "4705326641f39fdb1b97c925b55dae3c4634d5e0",
      "parents": [
        "2fbe8d1ebe004425b4f7b8bba345623d2280be82"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Dec 20 16:43:10 2007 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Jan 25 15:05:43 2008 -0800"
      },
      "message": "[PATCH 1/2] ocfs2: add flock lock type\n\nThis adds a new dlmglue lock type which is intended to back flock()\nrequests.\n\nSince these locks are driven from userspace, usage rules are much more\nliberal than the typical Ocfs2 internal cluster lock. As a result, we can\u0027t\nmake use of most dlmglue features - lock caching and lock level\noptimizations in particular. Additionally, userspace is free to deadlock\nitself, so we have to deal with that in the same way as the rest of the\nkernel - by allowing a signal to abort a lock request.\n\nIn order to keep ocfs2_cluster_lock() complexity down, ocfs2_file_lock()\ndoes it\u0027s own dlm coordination. We still use the same helper functions\nthough, so duplicated code is kept to a minimum.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "e63aecb651ba73dffc62f9608ee1b7ae2a0ffd4b",
      "tree": "06a4b727230120fe73421dc3149c21aaed5fe91e",
      "parents": [
        "c934a92d05b549dd2f25db72c5fc3cb9dcf1b611"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Oct 18 15:30:42 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Jan 25 14:46:01 2008 -0800"
      },
      "message": "ocfs2: Rename ocfs2_meta_[un]lock\n\nCall this the \"inode_lock\" now, since it covers both data and meta data.\nThis patch makes no functional changes.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "c934a92d05b549dd2f25db72c5fc3cb9dcf1b611",
      "tree": "57150c87d1d465db28fceaa14c9d5b220c7a3954",
      "parents": [
        "f1f540688eae66c274ff1c1133b5d9c687b28f58"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Oct 18 15:23:46 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Jan 25 14:45:57 2008 -0800"
      },
      "message": "ocfs2: Remove data locks\n\nThe meta lock now covers both meta data and data, so this just removes the\nnow-redundant data lock.\n\nCombining locks saves us a round of lock mastery per inode and one less lock\nto ping between nodes during read/write.\n\nWe don\u0027t lose much - since meta locks were always held before a data lock\n(and at the same level) ordered writeout mode (the default) ensured that\nflushing for the meta data lock also pushed out data anyways.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "f1f540688eae66c274ff1c1133b5d9c687b28f58",
      "tree": "0abf61ad3e15b1c87d5958aae7b02d852672c159",
      "parents": [
        "34d024f84345807bf44163fac84e921513dde323"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Oct 18 15:13:59 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Jan 25 14:45:54 2008 -0800"
      },
      "message": "ocfs2: Add data downconvert worker to inode lock\n\nIn order to extend inode lock coverage to inode data, we use the same data\ndownconvert worker with only a small modification to only do work for\nregular files.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "34d024f84345807bf44163fac84e921513dde323",
      "tree": "aef303ae5feeb42cb8791acc1c0b8a74f0a97674",
      "parents": [
        "6f7b056ea9c6fa978c79ca626eff43549df94dbb"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Mon Sep 24 15:56:19 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Jan 25 14:45:34 2008 -0800"
      },
      "message": "ocfs2: Remove mount/unmount votes\n\nThe node maps that are set/unset by these votes are no longer relevant, thus\nwe can remove the mount and umount votes. Since those are the last two\nremaining votes, we can also remove the entire vote infrastructure.\n\nThe vote thread has been renamed to the downconvert thread, and the small\namount of functionality related to managing it has been moved into\nfs/ocfs2/dlmglue.c. All references to votes have been removed or updated.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "019d1b2247c6898589560c6f3b3e7ec280b0010a",
      "tree": "869d6e1fef42e7d7a4c0f81a3b6ddf19ea972792",
      "parents": [
        "3cf0c507dd28de0e1a4c24304d806e6b3976f0f5"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Oct 05 12:09:05 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Nov 06 15:31:45 2007 -0800"
      },
      "message": "ocfs2: Create locks at initially requested level\n\nIf we have not yet created a cluster lock, ocfs2_cluster_lock() will\nfirst create it at NLMODE, and then convert the lock to either PRMODE or\nEXMODE (whichever is requested).\n\nChange ocfs2_cluster_lock() to just create the lock at the initially\nrequested level. ocfs2_locking_ast() handles this case fine, so the only\nupdate required was in setup of locking state. This should reduce the number\nof network messages required for a new lock by one, providing an incremental\nperformance enhancement.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "3cf0c507dd28de0e1a4c24304d806e6b3976f0f5",
      "tree": "20811e3b244661e18e3f11aa414c763d26f20973",
      "parents": [
        "0af4bd38876416d945ad6a1338798696604952a1"
      ],
      "author": {
        "name": "Roel Kluin",
        "email": "12o3l@tiscali.nl",
        "time": "Sat Oct 27 00:20:36 2007 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Nov 06 15:31:39 2007 -0800"
      },
      "message": "[PATCH] Fix priority mistakes in fs/ocfs2/{alloc.c, dlmglue.c}\n\nFixes priority mistakes similar to \u0027!x \u0026 y\u0027\n\nSigned-off-by: Roel Kluin \u003c12o3l@tiscali.nl\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "15b1e36bdb487d67ef924a37b0967453143be53a",
      "tree": "448e955663c183a12f574f0e470e842d7722c1fb",
      "parents": [
        "8553cf4f360d6fc4913a0bdd3b22dd7b5bb9a3be"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Sep 07 13:58:15 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Oct 12 11:54:39 2007 -0700"
      },
      "message": "ocfs2: Structure updates for inline data\n\nAdd the disk, network and memory structures needed to support data in inode.\n\nStruct ocfs2_inline_data is defined and embedded in ocfs2_dinode for storing\ninline data.\n\nA new inode field, i_dyn_features, is added to facilitate tracking of\ndynamic inode state. Since it will be used often, we want to mirror it on\nocfs2_inode_info, and transfer it via the meta data lvb.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\nReviewed-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "800deef3f6f87fee3a2e89cf7237a1f20c1a78d7",
      "tree": "adc036024ba3ee6e04fe8c9cdd3b9abb4a2af14d",
      "parents": [
        "e6df3a663a5d1ee68aeae7f007197f272700d9cc"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu May 17 16:03:13 2007 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jul 10 17:19:49 2007 -0700"
      },
      "message": "[PATCH] ocfs2: use list_for_each_entry where benefical\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "e63340ae6b6205fef26b40a75673d1c9c0c8bb90",
      "tree": "8d3212705515edec73c3936bb9e23c71d34a7b41",
      "parents": [
        "04c9167f91e309c9c4ea982992aa08e83b2eb42e"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Tue May 08 00:28:08 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:07 2007 -0700"
      },
      "message": "header cleaning: don\u0027t include smp_lock.h when not used\n\nRemove includes of \u003clinux/smp_lock.h\u003e where it is not used/needed.\nSuggested by Al Viro.\n\nBuilds cleanly on x86_64, i386, alpha, ia64, powerpc, sparc,\nsparc64, and arm (all 59 defconfigs).\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6cb129f5675c39944e5fe18fd2530a2eb771b754",
      "tree": "18290b53d302573632c0d5f906a0b4af8f8d4b39",
      "parents": [
        "586d232b191b776a1c6d51c10c662b8b3e238fdf"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Thu Apr 26 00:29:35 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed May 02 15:07:27 2007 -0700"
      },
      "message": "[PATCH] fs/ocfs2/: make 3 functions static\n\nThis patch makes the following needlessly global functions static:\n- aops.c: ocfs2_write_data_page()\n- dlmglue.c: ocfs2_dump_meta_lvb_info()\n- file.c: ocfs2_set_inode_size()\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "83418978827324918a8cd25ce5227312de1d4468",
      "tree": "f7baefb1fc8721d6d8d1f1f937bc55535b13e18f",
      "parents": [
        "7cdfc3a1c3971c9125c317cb8c2525745851798e"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Mon Apr 23 18:53:12 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Apr 26 15:10:40 2007 -0700"
      },
      "message": "ocfs2: Cache extent records\n\nThe extent map code was ripped out earlier because of an inability to deal\nwith holes. This patch adds back a simpler caching scheme requiring far less\ncode.\n\nOur old extent map caching was designed back when meta data block caching in\nOcfs2 didn\u0027t work very well, resulting in many disk reads. These days our\nmetadata caching is much better, resulting in no un-necessary disk reads. As\na result, extent caching doesn\u0027t have to be as fancy, nor does it have to\ncache as many extents. Keeping the last 3 extents seen should be sufficient\nto give us a small performance boost on some streaming workloads.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "8110b073a9135acf0a71bccfc20c0d1023f179c6",
      "tree": "b668738e25648f3fcfd7b1063ab8d4948cebc668",
      "parents": [
        "4f902c37727bbedbc0508a1477874c58ddcc9af8"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Mar 22 16:53:23 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Apr 26 15:07:40 2007 -0700"
      },
      "message": "ocfs2: Fix up i_blocks calculation to know about holes\n\nOlder file systems which didn\u0027t support holes did a dumb calculation of\ni_blocks based on i_size. This is no longer accurate, so fix things up to\ntake actual allocation into account.\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": "500086300e6dc5308a7328990bd50d17e075162b",
      "tree": "4083cda09445c260c2cc2ac1d0f68c05ad2b958e",
      "parents": [
        "a9f5f70739363ccca2e771c274c4f015c5fb7a88"
      ],
      "author": {
        "name": "Tiger Yang",
        "email": "tiger.yang@oracle.com",
        "time": "Tue Mar 20 16:01:38 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Apr 26 14:39:48 2007 -0700"
      },
      "message": "ocfs2: Remove delete inode vote\n\nOcfs2 currently does cluster-wide node messaging to check the open state of\nan inode during delete. This patch removes that mechanism in favor of an\ninode cluster lock which is taken at shared read when an inode is first read\nand dropped in clear_inode(). This allows a deleting node to test the\nliveness of an inode by attempting to take an exclusive lock.\n\nSigned-off-by: Tiger Yang \u003ctiger.yang@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "be9e986b824b41c9d5cc5eca34ee3424c35fd162",
      "tree": "e48d5ea0683204e8070e120561e76a49c0ad31fd",
      "parents": [
        "0d01af6e5dd6bc7abbcb6331021f8fee18005540"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Apr 18 15:22:08 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Apr 26 13:35:21 2007 -0700"
      },
      "message": "ocfs2: Local mounts should skip inode updates\n\nWe don\u0027t want the extent map and uptodate cache destruction in\nocfs2_meta_lock_update() on a local mount, so skip that.\n\nThis fixes several bugs with uptodate being cleared on buffers and extent\nmaps being corrupted.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "7f4a2a97e324e8c826d1d983bc8efb5c59194f02",
      "tree": "649129bc73b4de1dee662250892acf883cf45ba2",
      "parents": [
        "6c2aad0567e693f9588d0a0683f96ed872fb4641"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Mon Dec 11 11:06:36 2006 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Dec 28 16:38:59 2006 -0800"
      },
      "message": "ocfs2: always unmap in ocfs2_data_convert_worker()\n\nMmap-heavy clustered workloads were sometimes finding stale data on mmap\nreads. The solution is to call unmap_mapping_range() on any down convert of\na data lock.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "c271c5c22b0a7ca45fda15f1f4d258bca36a5b94",
      "tree": "9803af515ecf1c101c4a5921d7407c66184147e1",
      "parents": [
        "c99767974ebd2a719d849fdeaaa1674456f5283f"
      ],
      "author": {
        "name": "Sunil Mushran",
        "email": "Sunil.Mushran@oracle.com",
        "time": "Tue Dec 05 17:56:35 2006 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Dec 07 17:37:53 2006 -0800"
      },
      "message": "ocfs2: local mounts\n\nThis allows users to format an ocfs2 file system with a special flag,\nOCFS2_FEATURE_INCOMPAT_LOCAL_MOUNT. When the file system sees this flag, it\nwill not use any cluster services, nor will it require a cluster\nconfiguration, thus acting like a \u0027local\u0027 file system.\n\nSigned-off-by: Sunil Mushran \u003csunil.mushran@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "7f1a37e31f94b4f1c123d32ce9f69205ab2095bd",
      "tree": "7d2136573966de80d031e7320db11c15d7f93a92",
      "parents": [
        "8659ac25b434fcc61cf7797f4b69edc3eaaffb55"
      ],
      "author": {
        "name": "Tiger Yang",
        "email": "tiger.yang@oracle.com",
        "time": "Wed Nov 15 15:48:42 2006 +0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Dec 01 18:28:51 2006 -0800"
      },
      "message": "ocfs2: core atime update functions\n\nThis patch adds the core routines for updating atime in ocfs2.\n\nSigned-off-by: Tiger Yang \u003ctiger.yang@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "4bcec1847ac4f75c2ee6d091b495f34d8d822e6a",
      "tree": "faac00bd440eff91bd59a3cef88e74220082163a",
      "parents": [
        "a301a27d715276a71827004549bcbb2b64776c11"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Mon Oct 09 16:02:40 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Dec 01 18:28:05 2006 -0800"
      },
      "message": "ocfs2: remove unused handle argument from ocfs2_meta_lock_full()\n\nNow that this is unused and all callers pass NULL, we can safely remove it.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "daf29e9cdab7219838c6b6e82380aec3466cf379",
      "tree": "b8ee26fadd65ca2c037ee34d6a061960eaec2174",
      "parents": [
        "02928a71ae6da6e3e205d99e1fa1a1f598ddb62d"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Oct 06 19:05:31 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Dec 01 18:27:58 2006 -0800"
      },
      "message": "ocfs2: remove unused ocfs2_handle_add_lock()\n\nThis gets us rid of a slab we no longer need, as well as removing the\nmajority of what\u0027s left on ocfs2_journal_handle.\n\nocfs2_commit_unstarted_handle() has no more real work to do, so remove that\nfunction too.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "da66116eef7da8557762c9b5efdc435bc0afecfa",
      "tree": "883602ea773aef3e6f2f739c8e2ea84b18074c86",
      "parents": [
        "0215ffb08ce99e2bb59eca114a99499a4d06e704"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Mon Nov 20 03:24:28 2006 +0100"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Dec 01 18:26:50 2006 -0800"
      },
      "message": "[2.6 patch] make ocfs2_create_new_lock() static\n\nThis patch makes the needlessly global ocfs2_create_new_lock() static.\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "8e18e2941c53416aa219708e7dcad21fb4bd6794",
      "tree": "44118f8b09556193ac93e0b71aecfa3e1d4bc182",
      "parents": [
        "6a1d9805ec506d8b9d04450997707da5f643d87c"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 27 01:50:46 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 27 08:26:17 2006 -0700"
      },
      "message": "[PATCH] inode_diet: Replace inode.u.generic_ip with inode.i_private\n\nThe following patches reduce the size of the VFS inode structure by 28 bytes\non a UP x86.  (It would be more on an x86_64 system).  This is a 10% reduction\nin the inode size on a UP kernel that is configured in a production mode\n(i.e., with no spinlock or other debugging functions enabled; if you want to\nsave memory taken up by in-core inodes, the first thing you should do is\ndisable the debugging options; they are responsible for a huge amount of bloat\nin the VFS inode structure).\n\nThis patch:\n\nThe filesystem or device-specific pointer in the inode is inside a union,\nwhich is pretty pointless given that all 30+ users of this field have been\nusing the void pointer.  Get rid of the union and rename it to i_private, with\na comment to explain who is allowed to use the void pointer.  This is just a\ncleanup, but it allows us to reuse the union \u0027u\u0027 for something something where\nthe union will actually be used.\n\n[judith@osdl.org: powerpc build fix]\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Judith Lebzelter \u003cjudith@osdl.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0d5dc6c2dd7a3cd2b2f505b0625c4ec9c0e5b4f0",
      "tree": "e814c077db38d0b20da46c55764e0829158943e7",
      "parents": [
        "b5e500e23e532795fbf79a3cdbcb014f207fdb2a"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Sep 14 14:44:51 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Sun Sep 24 13:50:48 2006 -0700"
      },
      "message": "ocfs2: Teach ocfs2_drop_lock() to use -\u003eset_lvb() callback\n\nWith this, we don\u0027t need to pass an additional struct with function pointer.\n\nNow that the callbacks are fully used, comment the remaining API.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "b5e500e23e532795fbf79a3cdbcb014f207fdb2a",
      "tree": "44acf287ae9c45678d7b712518d252c95c75eb5b",
      "parents": [
        "cc567d89b3af4294580c9c97610d2c1018032e33"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Sep 13 22:01:16 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Sun Sep 24 13:50:48 2006 -0700"
      },
      "message": "ocfs2: Remove -\u003eunblock lockres operation\n\nHave ocfs2_process_blocked_lock() call ocfs2_generic_unblock_lock(), which\ngets to be ocfs2_unblock_lock() now that it\u0027s the only possible unblock\nfunction.\n\nRemove the -\u003eunblock() callback from the structure, and all lock type\nspecific unblock functions.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "cc567d89b3af4294580c9c97610d2c1018032e33",
      "tree": "d143d87e9b4b6cca13fd2bb2f86912b44344eacf",
      "parents": [
        "08280f11de91beac2f5234ce5fc2ed246dfe6a86"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Sep 13 21:52:21 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Sun Sep 24 13:50:48 2006 -0700"
      },
      "message": "ocfs2: move downconvert worker to lockres ops\n\nThis way lock types don\u0027t have to manually pass it to\nocfs2_generic_unblock_lock().\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "08280f11de91beac2f5234ce5fc2ed246dfe6a86",
      "tree": "745853080072f539a24be0e82458b651aaaae195",
      "parents": [
        "810d5aeba18825c754cf47db59eb83814a54bb27"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Sep 13 21:41:56 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Sun Sep 24 13:50:48 2006 -0700"
      },
      "message": "ocfs2: Remove unused dlmglue functions\n\nThe meta data unblocking code no longer needs ocfs2_do_unblock_meta() or\nocfs2_can_downconvert_meta_lock(), so remove them.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "810d5aeba18825c754cf47db59eb83814a54bb27",
      "tree": "4d68e97f2487422e6c65fa4758b133e0a013ff7a",
      "parents": [
        "5ef0d4ea087740908f4fb57606f6c09e3b90c477"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Sep 13 21:39:52 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Sun Sep 24 13:50:47 2006 -0700"
      },
      "message": "ocfs2: Have the metadata lock use generic dlmglue functions\n\nFill in the -\u003echeck_downconvert and -\u003eset_lvb callbacks with meta data\nspecific operations and switch ocfs2_unblock_meta() to call\nocfs2_generic_unblock_lock()\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "5ef0d4ea087740908f4fb57606f6c09e3b90c477",
      "tree": "c9e28139d6bfb9b4b2bcc967669dd0cbe12b0abc",
      "parents": [
        "16d5b9567ad5241b5c6e0cc4778c1af6c04bb801"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Sep 13 21:21:52 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Sun Sep 24 13:50:47 2006 -0700"
      },
      "message": "ocfs2: Add -\u003eset_lvb callback in dlmglue\n\nThis allows a lock type to set the value block before downconvert.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "16d5b9567ad5241b5c6e0cc4778c1af6c04bb801",
      "tree": "1dda797d26712376e16c378099bbf33114989c69",
      "parents": [
        "f7fbfdd1fc91543253ba742a926a29c289f8e6ca"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Sep 13 21:10:12 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Sun Sep 24 13:50:47 2006 -0700"
      },
      "message": "ocfs2: Add -\u003echeck_downconvert callback in dlmglue\n\nThis will allow lock types to force a requeue of a lock downconvert.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "f7fbfdd1fc91543253ba742a926a29c289f8e6ca",
      "tree": "6a4f9c824a744a1d53f3a3dc7c4d851641b3b3e8",
      "parents": [
        "b80fc012e03f8f207911b5eafe6916b000e03c8b"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Sep 13 21:02:29 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Sun Sep 24 13:50:47 2006 -0700"
      },
      "message": "ocfs2: Check for refreshing locks in generic unblock function\n\nTidy up the exit path a bit too.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "b80fc012e03f8f207911b5eafe6916b000e03c8b",
      "tree": "8eaad9bc587810f76241c8edd41d34f046f72010",
      "parents": [
        "aa2623ad80577b37637914e809bafa36994ccdf1"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Sep 12 22:08:14 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Sun Sep 24 13:50:47 2006 -0700"
      },
      "message": "ocfs2: don\u0027t unconditionally pass LVB flags\n\nAllow a lock type to specifiy whether it makes use of the LVB. The only type\nwhich does this right now is the meta data lock. This should save us some\nspace on network messages since they won\u0027t have to needlessly transmit value\nblocks.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "aa2623ad80577b37637914e809bafa36994ccdf1",
      "tree": "b17881ea156b47e64ed67f563d0356525cf5a335",
      "parents": [
        "54a7e7552e484c08db221e49c4519ccdeb8882d0"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Sep 12 21:58:23 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Sun Sep 24 13:50:46 2006 -0700"
      },
      "message": "ocfs2: combine inode and generic blocking AST functions\n\nThere is extremely little difference between the two now. We can remove the\ncallback from ocfs2_lock_res_ops as well.\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    }
  ],
  "next": "54a7e7552e484c08db221e49c4519ccdeb8882d0"
}
