)]}'
{
  "log": [
    {
      "commit": "cbe0e331fdbdb256943499358c75bc098a2134c1",
      "tree": "aa3d20a721ad858006e1d5e4a92eef42136df3bf",
      "parents": [
        "0016eedc4185a3cd7e578b027a6e69001b85d6c4"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Sat Jan 30 06:02:10 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 26 15:41:18 2010 -0800"
      },
      "message": "ocfs2_dlmfs: Enable the use of user cluster stacks.\n\nUnlike ocfs2, dlmfs has no permanent storage.  It can\u0027t store off a\ncluster stack it is supposed to be using.  So it can\u0027t specify the stack\nname in ocfs2_cluster_connect().\n\nInstead, we create ocfs2_cluster_connect_agnostic(), which simply uses\nthe stack that is currently enabled.  This is find for dlmfs, which will\nrely on the stack initialization.\n\nWe add the \"stackglue\" capability to dlmfs\u0027s capability list.  This lets\nuserspace know dlmfs can be used with all cluster stacks.\n\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": "e603cfb074e150736814ef093a411df32c02ba9f",
      "tree": "bb659e2ed6462e9686507f77edc2c7750044f294",
      "parents": [
        "110946c8fb23c1e1e23312afed0977ad4aa37c95"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Jan 29 16:06:29 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 26 15:41:16 2010 -0800"
      },
      "message": "ocfs2: Remove the ast pointers from ocfs2_stack_plugins\n\nWith the full ocfs2_locking_protocol hanging off of the\nocfs2_cluster_connection, ast wrappers can get the ast/bast pointers\nthere.  They don\u0027t need to get them from their plugin structure.\n\nThe user plugin still needs the maximum locking protocol version,\nthough.  This changes the plugin structure so that it only holds the max\nversion, not the entire ocfs2_locking_protocol pointer.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "110946c8fb23c1e1e23312afed0977ad4aa37c95",
      "tree": "a71cc2b0f7819d80426ed0a445f42d4558df99fb",
      "parents": [
        "c0e4133851ed94c73ee3d34a2f2a245fcd0a60a1"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Jan 29 15:46:23 2010 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 26 15:41:16 2010 -0800"
      },
      "message": "ocfs2: Hang the locking proto on the cluster conn and use it in asts.\n\nWith the ocfs2_cluster_connection hanging off of the ocfs2_dlm_lksb, we\nhave access to it in the ast and bast wrapper functions.  Attach the\nocfs2_locking_protocol to the conn.\n\nNow, instead of refering to a static variable for ast/bast pointers, the\nwrappers can look at the connection.  This means different connections\ncan have different ast/bast pointers, and it reduces the need for the\nstatic pointer.\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": "6d4561110a3e9fa742aeec6717248a491dfb1878",
      "tree": "689e2abf19940416ce597ba56ed31026ff59bd21",
      "parents": [
        "86926d0096279b9739ceeff40f68d3c33b9119a9"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Mon Nov 16 03:11:48 2009 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Wed Nov 18 08:37:40 2009 -0800"
      },
      "message": "sysctl: Drop \u0026 in front of every proc_handler.\n\nFor consistency drop \u0026 in front of every proc_handler.  Explicity\ntaking the address is unnecessary and it prevents optimizations\nlike stubbing the proc_handlers to NULL.\n\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "ab09203e302b6e526f6930f3e460064b0f253ae9",
      "tree": "bc95bfaba78ba30613d57c676eca42818b8a3293",
      "parents": [
        "2bc4657c15e4a33d9a192579c7627a397dbcbebc"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu Nov 05 14:25:10 2009 -0800"
      },
      "committer": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Thu Nov 12 02:04:55 2009 -0800"
      },
      "message": "sysctl fs: Remove dead binary sysctl support\n\nNow that sys_sysctl is a generic wrapper around /proc/sys  .ctl_name\nand .strategy members of sysctl tables are dead code.  Remove them.\n\nCc: Jan Harkes \u003cjaharkes@cs.cmu.edu\u003e\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.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": "009d37502a7b9fc89741e66b4454afca4edc1c26",
      "tree": "5baff62529735bf9e1a0d72108fe3183876de18e",
      "parents": [
        "5a09561199e7f8d3feaaa01c39372050e140b775"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 06 16:16:08 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 17:02:44 2008 -0700"
      },
      "message": "ocfs2: Remove pointless !!\n\nocfs2_stack_supports_plocks() doesn\u0027t need this to properly return a zero or\none value.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "53da4939f349d4edd283b043219221ca5b78e4d4",
      "tree": "3e0f8e1bd5474822431cffd1e449df9b639e1772",
      "parents": [
        "a447c0932445f92ce6f4c1bd020f62c5097a7842"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jul 21 14:29:16 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Oct 13 13:57:57 2008 -0700"
      },
      "message": "ocfs2: POSIX file locks support\n\nThis is actually pretty easy since fs/dlm already handles the bulk of the\nwork. The Ocfs2 userspace cluster stack module already uses fs/dlm as the\nunderlying lock manager, so I only had to add the right calls.\n\nCluster-aware POSIX locks (\"plocks\") can be turned off by the same means at\nUNIX locks - mount with \u0027noflocks\u0027, or create a local-only Ocfs2 volume.\nInternally, the file system uses two sets of file_operations, depending on\nwhether cluster aware plocks is required. This turns out to be easier than\nimplementing local-only versions of -\u003elock.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "d6817cdbd143f87f9d7c59a4c3194091190eeb84",
      "tree": "5744bb0cb5d3083f37674d845576d61431b4ebb3",
      "parents": [
        "de6bf18e9ce0df807dab08cff08751cac383429d"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "Joel.Becker@oracle.com",
        "time": "Fri Aug 22 14:30:10 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Aug 25 07:29:47 2008 -0700"
      },
      "message": "ocfs2: Increment the reference count of an already-active stack.\n\nThe ocfs2_stack_driver_request() function failed to increment the\nrefcount of an already-active stack.  It only did the increment on the\nfirst reference.  Whoops.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nTested-by: Marcos Matsunaga \u003cmarcos.matsunaga@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "2c39450b39880e162b3eb339672314101f58ee1a",
      "tree": "48e99a531dd5263d7a84cf23492373f45fbdea6e",
      "parents": [
        "9f9a99f4eccc64650e932090cff0ebd07b81e334"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri May 30 15:58:26 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jun 16 10:46:52 2008 -0700"
      },
      "message": "ocfs2: Remove -\u003ehangup() from stack glue operations.\n\nThe -\u003ehangup() call was only used to execute ocfs2_hb_ctl.  Now that\nthe generic stack glue code handles this, the underlying stack drivers\ndon\u0027t need to know about it.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "9f9a99f4eccc64650e932090cff0ebd07b81e334",
      "tree": "44315dfb1b5f3d4fc802e4d7cde5d681832b34f0",
      "parents": [
        "3878f110f71a0971ff7acc15dd6db711b6ef37c6"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri May 30 15:43:58 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jun 16 10:46:51 2008 -0700"
      },
      "message": "ocfs2: Move the call of ocfs2_hb_ctl into the stack glue.\n\nTake o2hb_stop() out of the o2cb code and make it part of the generic\nstack glue as ocfs2_leave_group().  This also allows us to remove the\nocfs2_get_hb_ctl_path() function - everything to do with hb_ctl is now\npart of stackglue.c.  o2cb no longer needs a -\u003ehangup() function.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "3878f110f71a0971ff7acc15dd6db711b6ef37c6",
      "tree": "39d5e1e8508cab23ba79c5da5abf897ca5843a9b",
      "parents": [
        "066519068ad2fbe98c7f45552b1f592903a9c8c8"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri May 30 15:30:49 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jun 16 10:46:50 2008 -0700"
      },
      "message": "ocfs2: Move the hb_ctl_path sysctl into the stack glue.\n\nocfs2 needs to call out to the hb_ctl program at unmount for all cluster\nstacks.  The first step is to move the hb_ctl_path sysctl out of the\no2cb code and into the generic stack glue.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "cf4d8d75d8aba537a19b313a9364fd08ddbd5622",
      "tree": "8d07679a7a28375784b0ae9461ccea3d42aaafe5",
      "parents": [
        "d4b95eef4dc4a59bcd42bdf783638a2eaa57b4c8"
      ],
      "author": {
        "name": "David Teigland",
        "email": "teigland@redhat.com",
        "time": "Wed Feb 20 14:29:27 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:07 2008 -0700"
      },
      "message": "ocfs2: add fsdlm to stackglue\n\nAdd code to use fs/dlm.\n\n[ Modified to be part of the stack_user module -- Joel ]\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": "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": "74ae4e104dfc57017783fc07d5f2f9129062207f",
      "tree": "4b33a403e1c23acb5bcb756d9cab17f3609e79ed",
      "parents": [
        "286eaa95c5c5915a6b72cc3f0a2534161fd7928b"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jan 31 23:56:17 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:05 2008 -0700"
      },
      "message": "ocfs2: Create stack glue sysfs files.\n\nIntroduce a set of sysfs files that describe the current stack glue\nstate.  The files live under /sys/fs/ocfs2.  The locking_protocol file\ndisplays the version of ocfs2\u0027s locking code.  The\nloaded_cluster_plugins file displays all of the currently loaded stack\nplugins.  When filesystems are mounted, the active_cluster_plugin file\nwill display the plugin in use.\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": "e3dad42bf993a0f24eb6e46152356c9b119c15e8",
      "tree": "df0419dc5e4387db7e6a6e0118bb5b9d01d8c0b2",
      "parents": [
        "553aa7e408eac402c00b67ddfa7aec13fe1f3a33"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 01 15:02:36 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:05 2008 -0700"
      },
      "message": "ocfs2: Create ocfs2_stack_operations and split out the o2cb stack.\n\nDefine the ocfs2_stack_operations structure.  Build o2cb_stack_ops from\nall of the o2cb-specific stack functions.  Change the generic stack glue\nfunctions to call the stack_ops instead of the o2cb functions directly.\n\nThe o2cb functions are moved to stack_o2cb.c.  The headers are cleaned up\nto where only needed headers are included.\n\nIn this code, stackglue.c and stack_o2cb.c refer to some shared\nextern variables.  When they become modules, that will change.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "553aa7e408eac402c00b67ddfa7aec13fe1f3a33",
      "tree": "e11fd9dea8baa79e65a9baa261e2da8f467d167a",
      "parents": [
        "63e0c48ae6986a5bbb8e8dd9210c0e6ca79f2e50"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Feb 01 14:51:03 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:05 2008 -0700"
      },
      "message": "ocfs2: Split o2cb code from generic stack functions.\n\nSplit off the o2cb-specific funtionality from the generic stack glue\ncalls.  This is a precurser to wrapping the o2cb functionality in an\noperations vector.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.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": "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": "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": "19fdb624dc8ccb663f6e48b3a3a3fa4e4e567fc1",
      "tree": "b50e358686ca63789af4af07526e0d21f2806bfb",
      "parents": [
        "4670c46ded9a18268d1265417ff4ac72145a7917"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Jan 30 15:38:24 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Apr 18 08:56:04 2008 -0700"
      },
      "message": "ocfs2: Abstract out node number queries.\n\nocfs2 asks the cluster stack for the local node\u0027s node number for two\nreasons; to fill the slot map and to print it. While the slot map isn\u0027t\nnecessary for userspace cluster stacks, the printing is very nice for\ndebugging. Thus we add ocfs2_cluster_this_node() as a generic API to get\nthis value. It is anticipated that the slot map will not be used under a\nuserspace cluster stack, so validity checks of the node num only need to\nexist in the slot map code. Otherwise, it just gets used and printed as an\nopaque value.\n\n[ Fixed up some \"int\" versus \"unsigned int\" issues and made osb-\u003enode_num\n  truly opaque. --Mark ]\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"
    }
  ]
}
