)]}'
{
  "log": [
    {
      "commit": "af56e0aa35f3ae2a4c1a6d1000702df1dd78cb76",
      "tree": "304bd85e5db2d07efa2913aa7c6313b918cfbfdb",
      "parents": [
        "65a50c951a38e9827dd9655b6e686bde912e799b",
        "6bd9adbdf9ca6a052b0b7455ac67b925eb38cfad"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 30 11:17:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 30 11:17:19 2012 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\nPull ceph updates from Sage Weil:\n \"There are some updates and cleanups to the CRUSH placement code, a bug\n  fix with incremental maps, several cleanups and fixes from Josh Durgin\n  in the RBD block device code, a series of cleanups and bug fixes from\n  Alex Elder in the messenger code, and some miscellaneous bounds\n  checking and gfp cleanups/fixes.\"\n\nFix up trivial conflicts in net/ceph/{messenger.c,osdmap.c} due to the\nnetworking people preferring \"unsigned int\" over just \"unsigned\".\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (45 commits)\n  libceph: fix pg_temp updates\n  libceph: avoid unregistering osd request when not registered\n  ceph: add auth buf in prepare_write_connect()\n  ceph: rename prepare_connect_authorizer()\n  ceph: return pointer from prepare_connect_authorizer()\n  ceph: use info returned by get_authorizer\n  ceph: have get_authorizer methods return pointers\n  ceph: ensure auth ops are defined before use\n  ceph: messenger: reduce args to create_authorizer\n  ceph: define ceph_auth_handshake type\n  ceph: messenger: check return from get_authorizer\n  ceph: messenger: rework prepare_connect_authorizer()\n  ceph: messenger: check prepare_write_connect() result\n  ceph: don\u0027t set WRITE_PENDING too early\n  ceph: drop msgr argument from prepare_write_connect()\n  ceph: messenger: send banner in process_connect()\n  ceph: messenger: reset connection kvec caller\n  libceph: don\u0027t reset kvec in prepare_write_banner()\n  ceph: ignore preferred_osd field\n  ceph: fully initialize new layout\n  ...\n"
    },
    {
      "commit": "6bd9adbdf9ca6a052b0b7455ac67b925eb38cfad",
      "tree": "61d254846558e23906bbef993092cf372f641509",
      "parents": [
        "35f9f8a09e1e88e31bd34a1e645ca0e5f070dd5c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 21 09:45:23 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 21 20:40:42 2012 -0700"
      },
      "message": "libceph: fix pg_temp updates\n\nUsually, we are adding pg_temp entries or removing them.  Occasionally they\nupdate.  In that case, osdmap_apply_incremental() was failing because the\nrbtree entry already exists.\n\nFix by removing the existing entry before inserting a new one.\n\nFixes http://tracker.newdream.net/issues/2446\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "35f9f8a09e1e88e31bd34a1e645ca0e5f070dd5c",
      "tree": "c7bc4a1dba445ea2e250decbf9b88282ee37cb3f",
      "parents": [
        "3da54776e2c0385c32d143fd497a7f40a88e29dd"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri May 18 17:36:00 2012 -0700"
      },
      "message": "libceph: avoid unregistering osd request when not registered\n\nThere is a race between two __unregister_request() callers: the\nreply path and the ceph_osdc_wait_request().  If we get a reply\n*and* the timeout expires at roughly the same time, both callers\nwill try to unregister the request, and the second one will do bad\nthings.\n\nSimply check if the request is still already unregistered; if so,\nreturn immediately and do nothing.\n\nFixes http://tracker.newdream.net/issues/2420\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "3da54776e2c0385c32d143fd497a7f40a88e29dd",
      "tree": "4dac17103404f8f5a967c6855bcb9891080a600b",
      "parents": [
        "dac1e716c60161867a47745bca592987ca3a9cb2"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri May 18 17:35:59 2012 -0700"
      },
      "message": "ceph: add auth buf in prepare_write_connect()\n\nMove the addition of the authorizer buffer to a connection\u0027s\nout_kvec out of get_connect_authorizer() and into its caller.  This\nway, the caller--prepare_write_connect()--can avoid adding the\nconnect header to out_kvec before it has been fully initialized.\n\nPrior to this patch, it was possible for a connect header to be\nsent over the wire before the authorizer protocol or buffer length\nfields were initialized.  An authorizer buffer associated with that\nheader could also be queued to send only after the connection header\nthat describes it was on the wire.\n\nFixes http://tracker.newdream.net/issues/2424\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "dac1e716c60161867a47745bca592987ca3a9cb2",
      "tree": "8c7b832d6580569c3725430cd93d57afcb674101",
      "parents": [
        "729796be9190f57ca40ccca315e8ad34a1eb8fef"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:13 2012 -0500"
      },
      "message": "ceph: rename prepare_connect_authorizer()\n\nChange the name of prepare_connect_authorizer().  The next\npatch is going to make this function no longer add anything to the\nconnection\u0027s out_kvec, so it will no longer fit the pattern of\nthe rest of the prepare_connect_*() functions.\n\nIn addition, pass the address of a variable that will hold the\nauthorization protocol to use.  Move the assignment of that to the\nconnection\u0027s out_connect structure into prepare_write_connect().\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "729796be9190f57ca40ccca315e8ad34a1eb8fef",
      "tree": "7b65cc553baf72fe3efc23f8ecc2228e1c0e782d",
      "parents": [
        "8f43fb53894079bf0caab6e348ceaffe7adc651a"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:13 2012 -0500"
      },
      "message": "ceph: return pointer from prepare_connect_authorizer()\n\nChange prepare_connect_authorizer() so it returns a pointer (or\npointer-coded error).\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "8f43fb53894079bf0caab6e348ceaffe7adc651a",
      "tree": "248ffc7366b569d13049a31e2cb1c88750d45ead",
      "parents": [
        "a3530df33eb91d787d08c7383a0a9982690e42d0"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:13 2012 -0500"
      },
      "message": "ceph: use info returned by get_authorizer\n\nRather than passing a bunch of arguments to be filled in with the\ncontent of the ceph_auth_handshake buffer now returned by the\nget_authorizer method, just use the returned information in the\ncaller, and drop the unnecessary arguments.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "a3530df33eb91d787d08c7383a0a9982690e42d0",
      "tree": "3022fc82ea661654bfca48fae32a7a1584dba1e8",
      "parents": [
        "a255651d4cad89f1a606edd36135af892ada4f20"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:13 2012 -0500"
      },
      "message": "ceph: have get_authorizer methods return pointers\n\nHave the get_authorizer auth_client method return a ceph_auth\npointer rather than an integer, pointer-encoding any returned\nerror value.  This is to pave the way for making use of the\nreturned value in an upcoming patch.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "a255651d4cad89f1a606edd36135af892ada4f20",
      "tree": "6d2c694b336f948272349e5de24be70460a94826",
      "parents": [
        "74f1869f76d043bad12ec03b4d5f04a8c3d1f157"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:13 2012 -0500"
      },
      "message": "ceph: ensure auth ops are defined before use\n\nIn the create_authorizer method for both the mds and osd clients,\nthe auth_client-\u003eops pointer is blindly dereferenced.  There is no\nobvious guarantee that this pointer has been assigned.  And\nfurthermore, even if the ops pointer is non-null there is definitely\nno guarantee that the create_authorizer or destroy_authorizer\nmethods are defined.\n\nAdd checks in both routines to make sure they are defined (non-null)\nbefore use.  Add similar checks in a few other spots in these files\nwhile we\u0027re at it.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "74f1869f76d043bad12ec03b4d5f04a8c3d1f157",
      "tree": "fcce410d255e2660fc82532c70de1b2f60a956c6",
      "parents": [
        "6c4a19158b96ea1fb8acbe0c1d5493d9dcd2f147"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "ceph: messenger: reduce args to create_authorizer\n\nMake use of the new ceph_auth_handshake structure in order to reduce\nthe number of arguments passed to the create_authorizor method in\nceph_auth_client_ops.  Use a local variable of that type as a\nshorthand in the get_authorizer method definitions.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "6c4a19158b96ea1fb8acbe0c1d5493d9dcd2f147",
      "tree": "5fe6418eb57bf4e84f1eda9606a4a045ff08dcba",
      "parents": [
        "ed96af646011412c2bf1ffe860db170db355fae5"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "ceph: define ceph_auth_handshake type\n\nThe definitions for the ceph_mds_session and ceph_osd both contain\nfive fields related only to \"authorizers.\"  Encapsulate those fields\ninto their own struct type, allowing for better isolation in some\nupcoming patches.\n\nFix the #includes in \"linux/ceph/osd_client.h\" to lay out their more\ncomplete canonical path.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "ed96af646011412c2bf1ffe860db170db355fae5",
      "tree": "17c491072634a955087f71cfc020ea0fb3ea9382",
      "parents": [
        "b1c6b9803f5491e94041e6da96bc9dec3870e792"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "ceph: messenger: check return from get_authorizer\n\nIn prepare_connect_authorizer(), a connection\u0027s get_authorizer\nmethod is called but ignores its return value.  This function can\nreturn an error, so check for it and return it if that ever occurs.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "b1c6b9803f5491e94041e6da96bc9dec3870e792",
      "tree": "55cde98a6667f811a7529adf02c24e683ba80cdc",
      "parents": [
        "5a0f8fdd8a0ebe320952a388331dc043d7e14ced"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "ceph: messenger: rework prepare_connect_authorizer()\n\nChange prepare_connect_authorizer() so it returns without dropping\nthe connection mutex if the connection has no get_authorizer method.\n\nUse the symbolic CEPH_AUTH_UNKNOWN instead of 0 when assigning\nauthorization protocols.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "5a0f8fdd8a0ebe320952a388331dc043d7e14ced",
      "tree": "64218dc46ca530cdd363f58d7a20e9c8dad23375",
      "parents": [
        "e10c758e4031a801ea4d2f8fb39bf14c2658d74b"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 21:51:59 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "ceph: messenger: check prepare_write_connect() result\n\nprepare_write_connect() can return an error, but only one of its\ncallers checks for it.  All the rest are in functions that already\nreturn errors, so it should be fine to return the error if one\ngets returned.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "e10c758e4031a801ea4d2f8fb39bf14c2658d74b",
      "tree": "db67e6d84e5fa76b4d573d4f551019141115af01",
      "parents": [
        "e825a66df97776d30a48a187e3a986736af43945"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "ceph: don\u0027t set WRITE_PENDING too early\n\nprepare_write_connect() prepares a connect message, then sets\nWRITE_PENDING on the connection.  Then *after* this, it calls\nprepare_connect_authorizer(), which updates the content of the\nconnection buffer already queued for sending.  It\u0027s also possible it\nwill result in prepare_write_connect() returning -EAGAIN despite the\nWRITE_PENDING big getting set.\n\nFix this by preparing the connect authorizer first, setting the\nWRITE_PENDING bit only after that is done.\n\nPartially addresses http://tracker.newdream.net/issues/2424\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "e825a66df97776d30a48a187e3a986736af43945",
      "tree": "4c9ed5c548818b407d7705f6bf02000ac3821132",
      "parents": [
        "41b90c00858129f52d08e6a05c9cfdb0f2bd074d"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "ceph: drop msgr argument from prepare_write_connect()\n\nIn all cases, the value passed as the msgr argument to\nprepare_write_connect() is just con-\u003emsgr.  Just get the msgr\nvalue from the ceph connection and drop the unneeded argument.\n\nThe only msgr passed to prepare_write_banner() is also therefore\njust the one from con-\u003emsgr, so change that function to drop the\nmsgr argument as well.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "41b90c00858129f52d08e6a05c9cfdb0f2bd074d",
      "tree": "167a416ff234fcec5af9d08e21115bb8ca3fdc9f",
      "parents": [
        "84fb3adf6413862cff51d8af3fce5f0b655586a2"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "ceph: messenger: send banner in process_connect()\n\nprepare_write_connect() has an argument indicating whether a banner\nshould be sent out before sending out a connection message.  It\u0027s\nonly ever set in one of its callers, so move the code that arranges\nto send the banner into that caller and drop the \"include_banner\"\nargument from prepare_write_connect().\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "84fb3adf6413862cff51d8af3fce5f0b655586a2",
      "tree": "348b9c1a0c0b3b15ef78ccd2caa942710fe3b4a7",
      "parents": [
        "d329156f16306449c273002486c28de3ddddfd89"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "ceph: messenger: reset connection kvec caller\n\nReset a connection\u0027s kvec fields in the caller rather than in\nprepare_write_connect().   This ends up repeating a few lines of\ncode but it\u0027s improving the separation between distinct operations\non the connection, which we can take advantage of later.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "d329156f16306449c273002486c28de3ddddfd89",
      "tree": "ceba5b2bb6d7ba09194f519628cd0031bdad9e63",
      "parents": [
        "c047be09349752b8a4dac27bc9f130bf4d592f11"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "libceph: don\u0027t reset kvec in prepare_write_banner()\n\nMove the kvec reset for a connection out of prepare_write_banner and\ninto its only caller.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "fd51653f78cf40a0516e521b6de22f329c5bad8d",
      "tree": "9645467cbb3a23bca4f3c7434f6ee93f212fa2ed",
      "parents": [
        "e6cee71fac27c946a0bbad754dd076e66c4e9dbd"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu May 10 10:29:50 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon May 14 12:16:42 2012 -0500"
      },
      "message": "ceph: messenger: change read_partial() to take \"end\" arg\n\nMake the second argument to read_partial() be the ending input byte\nposition rather than the beginning offset it now represents.  This\namounts to moving the addition \"to + size\" into the caller.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "e6cee71fac27c946a0bbad754dd076e66c4e9dbd",
      "tree": "9c20b73601c5904376e4e986877c7ad75da0927f",
      "parents": [
        "57dac9d1620942608306d8c17c98a9d1568ffdf4"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu May 10 10:29:50 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon May 14 12:16:42 2012 -0500"
      },
      "message": "ceph: messenger: update \"to\" in read_partial() caller\n\nread_partial() always increases whatever \"to\" value is supplied by\nadding the requested size to it, and that\u0027s the only thing it does\nwith that pointed-to value.\n\nDo that pointer advance in the caller (and then only when the\nupdated value will be subsequently used), and change the \"to\"\nparameter to be an in-only and non-pointer value.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "57dac9d1620942608306d8c17c98a9d1568ffdf4",
      "tree": "89a3359e888aae5ac5ccdacaa30d7ddadd2314b8",
      "parents": [
        "b7f6519e6bc7a0c5a9e3eadc8a2c79c0d4556050"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu May 10 10:29:50 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon May 14 12:16:41 2012 -0500"
      },
      "message": "ceph: messenger: use read_partial() in read_partial_message()\n\nThere are two blocks of code in read_partial_message()--those that\nread the header and footer of the message--that can be replaced by a\ncall to read_partial().  Do that.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "065a68f9167e20f321a62d044cb2c3024393d455",
      "tree": "04bf0db8822f6675c732b2b0e3fa54e2f1c8f755",
      "parents": [
        "8b393269008411a612ca549b733b4296e819f2fb"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreawmhost.com",
        "time": "Fri Apr 20 15:49:43 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon May 14 12:12:22 2012 -0500"
      },
      "message": "ceph: osd_client: fix endianness bug in osd_req_encode_op()\n\nFrom Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n\nAl Viro noticed that we were using a non-cpu-encoded value in\na switch statement in osd_req_encode_op().  The result would\nclearly not work correctly on a big-endian machine.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\n"
    },
    {
      "commit": "8b393269008411a612ca549b733b4296e819f2fb",
      "tree": "0c6977cd34d1d818234765c48f0b6ce31ca39707",
      "parents": [
        "6eb43f4b5a2a74599b4ff17a97c03a342327ca65"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:37:23 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:39:37 2012 -0700"
      },
      "message": "crush: warn on do_rule failure\n\nIf we get an error code from crush_do_rule(), print an error to the\nconsole.\n\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "6eb43f4b5a2a74599b4ff17a97c03a342327ca65",
      "tree": "1c9041c56c76aa2e975204ccac477a3a6a38a495",
      "parents": [
        "f671d4cd9b36691ac4ef42cde44c1b7a84e13631"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:37:05 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:39:36 2012 -0700"
      },
      "message": "crush: fix memory leak when destroying tree buckets\n\nReflects ceph.git commit 46d63d98434b3bc9dad2fc9ab23cbaedc3bcb0e4.\n\nReported-by: Alexander Lyakas \u003calex.bolshoy@gmail.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "f671d4cd9b36691ac4ef42cde44c1b7a84e13631",
      "tree": "9f961d2a6dfdee4ffa3b4c8d2b7308dfda85e177",
      "parents": [
        "fc7c3ae5ab9246ad96aab4d0d57f67e9255cfb56"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:36:49 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:39:35 2012 -0700"
      },
      "message": "crush: fix tree node weight lookup\n\nFix the node weight lookup for tree buckets by using a correct accessor.\n\nReflects ceph.git commit d287ade5bcbdca82a3aef145b92924cf1e856733.\n\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "fc7c3ae5ab9246ad96aab4d0d57f67e9255cfb56",
      "tree": "07ceb79e0a20f9faac7c1621a0543e7ba908b6ff",
      "parents": [
        "41ebcc0907c58f75d0b25afcaf8b9c35c6b1ad14"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:36:35 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:39:34 2012 -0700"
      },
      "message": "crush: remove parent maps\n\nThese were used for the ill-fated forcefeed feature.  Remove them.\n\nReflects ceph.git commit ebdf80edfecfbd5a842b71fbe5732857994380c1.\n\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "41ebcc0907c58f75d0b25afcaf8b9c35c6b1ad14",
      "tree": "c05054ce3d7fc0e512501a708511a9b1bd8647eb",
      "parents": [
        "0668216efe16ab1adf077e5f138775cee2af927a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:39:29 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:39:29 2012 -0700"
      },
      "message": "crush: remove forcefeed functionality\n\nRemove forcefeed functionality from CRUSH.  This is an ugly misfeature that\nis mostly useless and unused.  Remove it.\n\nReflects ceph.git commit ed974b5000f2851207d860a651809af4a1867942.\n\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n\nConflicts:\n\n\tnet/ceph/crush/mapper.c\n"
    },
    {
      "commit": "0668216efe16ab1adf077e5f138775cee2af927a",
      "tree": "9839f651cb90f22e50ddc585098105e8028497e0",
      "parents": [
        "a1f4895be8bf1ba56c2306b058f51619e9b0e8f8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:35:48 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:38:51 2012 -0700"
      },
      "message": "crush: use a temporary variable to simplify crush_do_rule\n\nUse a temporary variable here to avoid repeated array lookups and clean up\nthe code a bit.\n\nThis reflects ceph.git commit 6b5be27634ad307b471a5bf0db85c4f5c834885f.\n\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "a1f4895be8bf1ba56c2306b058f51619e9b0e8f8",
      "tree": "f5bdd809f4bcc24daa0dfe1f7bcc8eb2d56227bb",
      "parents": [
        "c90f95ed46393e29d843686e21947d1c6fcb1164"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:35:24 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:38:51 2012 -0700"
      },
      "message": "crush: be more tolerant of nonsensical crush maps\n\nIf we get a map that doesn\u0027t make sense, error out or ignore the badness\ninstead of BUGging out.  This reflects the ceph.git commits\n9895f0bff7dc68e9b49b572613d242315fb11b6c and\n8ded26472058d5205803f244c2f33cb6cb10de79.\n\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "c90f95ed46393e29d843686e21947d1c6fcb1164",
      "tree": "9e4c09c00f50957cd861e9fcadc330353e9a7ae6",
      "parents": [
        "8b12d47b80c7a34dffdd98244d99316db490ec58"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:35:09 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:38:50 2012 -0700"
      },
      "message": "crush: adjust local retry threshold\n\nThis small adjustment reflects a change that was made in ceph.git commit\naf6a9f30696c900a2a8bd7ae24e8ed15fb4964bb, about 6 months ago.  An N-1\nsearch is not exhaustive.  Fixed ceph.git bug #1594.\n\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "8b12d47b80c7a34dffdd98244d99316db490ec58",
      "tree": "fb97986bc823ebcce487d573fc83ee3b1c8f5f98",
      "parents": [
        "e49bf4c51cbe27439c00516d4297193d45dd4097"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:38:35 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:38:35 2012 -0700"
      },
      "message": "crush: clean up types, const-ness\n\nMove various types from int -\u003e __u32 (or similar), and add const as\nappropriate.\n\nThis reflects changes that have been present in the userland implementation\nfor some time.\n\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "3469ac1aa3a2f1e2586a412923c414779a0af854",
      "tree": "b271456518130622e6d394cf50939c132f1a1d0d",
      "parents": [
        "cd9d9f5df6098c50726200d4185e9e8da32785b3"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:33:36 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:33:36 2012 -0700"
      },
      "message": "ceph: drop support for preferred_osd pgs\n\nThis was an ill-conceived feature that has been removed from Ceph.  Do\nthis gracefully:\n\n - reject attempts to specify a preferred_osd via the ioctl\n - stop exposing this information via virtual xattrs\n - always fill in -1 for requests, in case we talk to an older server\n - don\u0027t calculate preferred_osd placements/pgids\n\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "feb50ac19e3527c3c68391718f07272349639a84",
      "tree": "17f20cab0fe7c0931bb2286fa59aaa40780a5d29",
      "parents": [
        "d73988923f73b5a3364b06ae1368542785f0af84"
      ],
      "author": {
        "name": "hartleys",
        "email": "hartleys@visionengravers.com",
        "time": "Tue Apr 24 14:38:37 2012 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Apr 27 00:03:34 2012 -0400"
      },
      "message": "crush: include header for global symbols\n\nInclude the header to pickup the definitions of the global symbols.\n\nQuiets the following sparse warnings:\n\nwarning: symbol \u0027crush_find_rule\u0027 was not declared. Should it be static?\nwarning: symbol \u0027crush_do_rule\u0027 was not declared. Should it be static?\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nCc: Sage Weil \u003csage@newdream.net\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "95c961747284a6b83a5e2d81240e214b0fa3464d",
      "tree": "c7be86a00db3605a48a03109fafcbe31039ca2e0",
      "parents": [
        "5e73ea1a31c3612aa6dfe44f864ca5b7b6a4cff9"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Sun Apr 15 05:58:06 2012 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Apr 15 12:44:40 2012 -0400"
      },
      "message": "net: cleanup unsigned to unsigned int\n\nUse of \"unsigned int\" is preferred to bare \"unsigned\" in net tree.\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "8d63e318c4eb1bea6f7e3cb4b77849eaa167bfec",
      "tree": "4783d4d0ab9a5d9c17e8eb0f93b0d279ad1b879a",
      "parents": [
        "9bd1966344bf975b5ce65e80fd6bacc41b4325a8"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:52 2012 -0500"
      },
      "message": "libceph: isolate kmap() call in write_partial_msg_pages()\n\nIn write_partial_msg_pages(), every case now does an identical call\nto kmap(page).  Instead, just call it once inside the CRC-computing\nblock where it\u0027s needed.  Move the definition of kaddr inside that\nblock, and make it a (char *) to ensure portable pointer arithmetic.\n\nWe still don\u0027t kunmap() it until after the sendpage() call, in case\nthat also ends up needing to use the mapping.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "9bd1966344bf975b5ce65e80fd6bacc41b4325a8",
      "tree": "86ff9e21f79e3d20b1d8feda4bc8000fe18069da",
      "parents": [
        "0cdf9e60189a87356a865a96dbafc2240af5c91d"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:52 2012 -0500"
      },
      "message": "libceph: rename \"page_shift\" variable to something sensible\n\nIn write_partial_msg_pages() there is a local variable used to\ntrack the starting offset within a bio segment to use.  Its name,\n\"page_shift\" defies the Linux convention of using that name for\nlog-base-2(page size).\n\nSince it\u0027s only used in the bio case rename it \"bio_offset\".  Use it\nalong with the page_pos field to compute the memory offset when\ncomputing CRC\u0027s in that function.  This makes the bio case match the\nothers more closely.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0cdf9e60189a87356a865a96dbafc2240af5c91d",
      "tree": "832d6059c472d2d8777a9819a0ecb7b945167a1f",
      "parents": [
        "e36b13cceb46136d849aeee06b4907ad3570ba78"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:52 2012 -0500"
      },
      "message": "libceph: get rid of zero_page_address\n\nThere\u0027s not a lot of benefit to zero_page_address, which basically\nholds a mapping of the zero page through the life of the messenger\nmodule.  Even with our own mapping, the sendpage interface where\nit\u0027s used may need to kmap() it again.  It\u0027s almost certain to\nbe in low memory anyway.\n\nSo stop treating the zero page specially in write_partial_msg_pages()\nand just get rid of zero_page_address entirely.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e36b13cceb46136d849aeee06b4907ad3570ba78",
      "tree": "ec2ff06bed82d719c9f68183ac19db483380af33",
      "parents": [
        "31739139f3ed7be802dd9019ec8d8cc910e3d241"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:52 2012 -0500"
      },
      "message": "libceph: only call kernel_sendpage() via helper\n\nMake ceph_tcp_sendpage() be the only place kernel_sendpage() is\nused, by using this helper in write_partial_msg_pages().\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "31739139f3ed7be802dd9019ec8d8cc910e3d241",
      "tree": "3182393002d7a8e29d230e30aa4920d7de737530",
      "parents": [
        "37675b0f42a8f7699c3602350d1c3b2a1698a3d3"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: use kernel_sendpage() for sending zeroes\n\nIf a message queued for send gets revoked, zeroes are sent over the\nwire instead of any unsent data.  This is done by constructing a\nmessage and passing it to kernel_sendmsg() via ceph_tcp_sendmsg().\n\nSince we are already working with a page in this case we can use\nthe sendpage interface instead.  Create a new ceph_tcp_sendpage()\nhelper that sets up flags to match the way ceph_tcp_sendmsg()\ndoes now.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "37675b0f42a8f7699c3602350d1c3b2a1698a3d3",
      "tree": "17717f3bcd3eea065d0d08e49699af6dbec7c0ff",
      "parents": [
        "84495f496170a73ed79667b7fbf91947b7f47c87"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: fix inverted crc option logic\n\nCRC\u0027s are computed for all messages between ceph entities.  The CRC\ncomputation for the data portion of message can optionally be\ndisabled using the \"nocrc\" (common) ceph option.  The default is\nfor CRC computation for the data portion to be enabled.\n\nUnfortunately, the code that implements this feature interprets the\nfeature flag wrong, meaning that by default the CRC\u0027s have *not*\nbeen computed (or checked) for the data portion of messages unless\nthe \"nocrc\" option was supplied.\n\nFix this, in write_partial_msg_pages() and read_partial_message().\nAlso change the flag variable in write_partial_msg_pages() to be\n\"no_datacrc\" to match the usage elsewhere in the file.\n\nThis fixes http://tracker.newdream.net/issues/2064\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "84495f496170a73ed79667b7fbf91947b7f47c87",
      "tree": "c36204466b0dc85b39c187f78275c3b25925b15c",
      "parents": [
        "f42299e6c3883c69c14079b8c88fe33815b2dcc3"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:55 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: some simple changes\n\nNothing too big here.\n    - define the size of the buffer used for consuming ignored\n      incoming data using a symbolic constant\n    - simplify the condition determining whether to unmap the page\n      in write_partial_msg_pages(): do it for crc but not if the\n      page is the zero page\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f42299e6c3883c69c14079b8c88fe33815b2dcc3",
      "tree": "f94d09a6438705bff01311dbe7cd426d1a800ff5",
      "parents": [
        "fe3ad593e2c34457ffa6233014ab19f4d36f85f2"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: small refactor in write_partial_kvec()\n\nMake a small change in the code that counts down kvecs consumed by\na ceph_tcp_sendmsg() call.  Same functionality, just blocked out\na little differently.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "fe3ad593e2c34457ffa6233014ab19f4d36f85f2",
      "tree": "eed6ceddbca3021e7492a1baaf658922e2aa8a6c",
      "parents": [
        "a9a0c51af4e7c825c014b40694571456a75ebbc4"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: do crc calculations outside loop\n\nMove blocks of code out of loops in read_partial_message_section()\nand read_partial_message().  They were only was getting called at\nthe end of the last iteration of the loop anyway.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a9a0c51af4e7c825c014b40694571456a75ebbc4",
      "tree": "6df7b2873d21f3c9c5e449aca1d8c16f4dd5fc1d",
      "parents": [
        "bca064d236a2e3162a07c758855221bcbe3c475b"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: separate CRC calculation from byte swapping\n\nCalculate CRC in a separate step from rearranging the byte order\nof the result, to improve clarity and readability.\n\nUse offsetof() to determine the number of bytes to include in the\nCRC calculation.\n\nIn read_partial_message(), switch which value gets byte-swapped,\nsince the just-computed CRC is already likely to be in a register.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "bca064d236a2e3162a07c758855221bcbe3c475b",
      "tree": "49fca3de9007fa6cc5304bd8d7851d28cbe33110",
      "parents": [
        "cffaba15cd95d4a16eb5a6aa5c22a79f67d555ab"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: use \"do\" in CRC-related Boolean variables\n\nChange the name (and type) of a few CRC-related Boolean local\nvariables so they contain the word \"do\", to distingish their purpose\nfrom variables used for holding an actual CRC value.\n\nNote that in the process of doing this I identified a fairly serious\nlogic error in write_partial_msg_pages():  the value of \"do_crc\"\nassigned appears to be the opposite of what it should be.  No\nattempt to fix this is made here; this change preserves the\nerroneous behavior.  The problem I found is documented here:\n    http://tracker.newdream.net/issues/2064\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "cffaba15cd95d4a16eb5a6aa5c22a79f67d555ab",
      "tree": "d752174022e8444c70afb27e798e032163f89ac9",
      "parents": [
        "d3002b974cefbb7c1e325cc296966f768ff76b06"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "ceph: ensure Boolean options support both senses\n\nMany ceph-related Boolean options offer the ability to both enable\nand disable a feature.  For all those that don\u0027t offer this, add\na new option so that they do.\n\nNote that ceph_show_options()--which reports mount options currently\nin effect--only reports the option if it is different from the\ndefault value.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "d3002b974cefbb7c1e325cc296966f768ff76b06",
      "tree": "8685d72f6530959c4e19c4c9f3a12709ec1f4b08",
      "parents": [
        "41617d0c9c9832e030667277ddf6b4ffb4ecdc90"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: a few small changes\n\nThis gathers a number of very minor changes:\n    - use %hu when formatting the a socket address\u0027s address family\n    - null out the ceph_msgr_wq pointer after the queue has been\n      destroyed\n    - drop a needless cast in ceph_write_space()\n    - add a WARN() call in ceph_state_change() in the event an\n      unrecognized socket state is encountered\n    - rearrange the logic in ceph_con_get() and ceph_con_put() so\n      that:\n        - the reference counts are only atomically read once\n\t- the values displayed via dout() calls are known to\n\t  be meaningful at the time they are formatted\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "41617d0c9c9832e030667277ddf6b4ffb4ecdc90",
      "tree": "6f943ada9195e794d84506b818ad3d8f0b9a49b9",
      "parents": [
        "6173d1f02fb19c0fba02857ae4e1109b5ec95034"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: make ceph_tcp_connect() return int\n\nThere is no real need for ceph_tcp_connect() to return the socket\npointer it creates, since it already assigns it to con-\u003esock, which\nis visible to the caller.  Instead, have it return an error code,\nwhich tidies things up a bit.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6173d1f02fb19c0fba02857ae4e1109b5ec95034",
      "tree": "c837bfe920220d138ba99d8fac2ac781bb2a44ac",
      "parents": [
        "e0f43c9419c1900e5b50de4261e9686a45a0a2b8"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:50 2012 -0500"
      },
      "message": "libceph: encapsulate some messenger cleanup code\n\nDefine a helper function to perform various cleanup operations.  Use\nit both in the exit routine and in the init routine in the event of\nan error.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e0f43c9419c1900e5b50de4261e9686a45a0a2b8",
      "tree": "28a0452e2bc223513b376f9db711f878a848bddc",
      "parents": [
        "859eb7994876f26fd9f52d9589fbcab8e2fe8069"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:50 2012 -0500"
      },
      "message": "libceph: make ceph_msgr_wq private\n\nThe messenger workqueue has no need to be public.  So give it static\nscope.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "859eb7994876f26fd9f52d9589fbcab8e2fe8069",
      "tree": "128067d342a4937228ac5c307c153b9b95ec254e",
      "parents": [
        "963be4d7709f84d865f76d12d5b0ec7edad1c498"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:50 2012 -0500"
      },
      "message": "libceph: encapsulate connection kvec operations\n\nEncapsulate the operation of adding a new chunk of data to the next\nopen slot in a ceph_connection\u0027s out_kvec array.  Also add a \"reset\"\noperation to make subsequent add operations start at the beginning\nof the array again.\n\nUse these routines throughout, avoiding duplicate code and ensuring\nall calls are handled consistently.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "963be4d7709f84d865f76d12d5b0ec7edad1c498",
      "tree": "798e98459427acc942228c42a69c3bc4ff3308bd",
      "parents": [
        "32eec68d2f233e8a6ae1cd326022f6862e2b9ce3"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:50 2012 -0500"
      },
      "message": "libceph: move prepare_write_banner()\n\nOne of the arguments to prepare_write_connect() indicates whether it\nis being called immediately after a call to prepare_write_banner().\nMove the prepare_write_banner() call inside prepare_write_connect(),\nand reinterpret (and rename) the \"after_banner\" argument so it\nindicates that prepare_write_connect() should *make* the call\nrather than should know it has already been made.\n\nThis was split out from the next patch to highlight this change in\nlogic.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ee57741c5209154b8ef124bcaa2496da1b69a988",
      "tree": "248a6e7bf259bb849f885f1ff4a82be74ab4913b",
      "parents": [
        "2107978668de13da484f7abc3f03516494c7fca9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Jan 24 10:08:36 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:47 2012 -0500"
      },
      "message": "rbd: make ceph_parse_options() return a pointer\n\nceph_parse_options() takes the address of a pointer as an argument\nand uses it to return the address of an allocated structure if\nsuccessful.  With this interface is not evident at call sites that\nthe pointer is always initialized.  Change the interface to return\nthe address instead (or a pointer-coded error code) to make the\nvalidity of the returned pointer obvious.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "99f0f3b2c4be15784bb4ede33b5f2c3f7861dba7",
      "tree": "356e82e59845aeb418f7975a4f8be1fb34de717e",
      "parents": [
        "bd406145129e8724cc71b65ff2a788dbd4d60c50"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: eliminate some abusive casts\n\nThis fixes some spots where a type cast to (void *) was used as\nas a universal type hiding mechanism.  Instead, properly cast the\ntype to the intended target type.\n\nSigned-off-by: Alex Elder \u003celder@newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "bd406145129e8724cc71b65ff2a788dbd4d60c50",
      "tree": "51ba39087c13296256c0af6e5785dc3345a654f8",
      "parents": [
        "f64a93172b97dcfcfa68f595652220653562f605"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: eliminate some needless casts\n\nThis eliminates type casts in some places where they are not\nrequired.\n\nSigned-off-by: Alex Elder \u003celder@newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f64a93172b97dcfcfa68f595652220653562f605",
      "tree": "7553ae9e69417d41467431e43b2b8e0d0694ded1",
      "parents": [
        "a5bc3129a296fd4663c3ef0be5575e82453739dd"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: kill addr_str_lock spinlock; use atomic instead\n\nA spinlock is used to protect a value used for selecting an array\nindex for a string used for formatting a socket address for human\nconsumption.  The index is reset to 0 if it ever reaches the maximum\nindex value.\n\nInstead, use an ever-increasing atomic variable as a sequence\nnumber, and compute the array index by masking off all but the\nsequence number\u0027s lowest bits.  Make the number of entries in the\narray a power of two to allow the use of such a mask (to avoid jumps\nin the index value when the sequence number wraps).\n\nThe length of these strings is somewhat arbitrarily set at 60 bytes.\nThe worst-case length of a string produced is 54 bytes, for an IPv6\naddress that can\u0027t be shortened, e.g.:\n    [1234:5678:9abc:def0:1111:2222:123.234.210.100]:32767\nChange it so we arbitrarily use 64 bytes instead; if nothing else\nit will make the array of these line up better in hex dumps.\n\nRename a few things to reinforce the distinction between the number\nof strings in the array and the length of individual strings.\n\nSigned-off-by: Alex Elder \u003celder@newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a5bc3129a296fd4663c3ef0be5575e82453739dd",
      "tree": "96024ed3b2cb7afef2fe860da26be030ec483e0b",
      "parents": [
        "5766651971e81298732466c9aa462ff47898ba37"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: make use of \"else\" where appropriate\n\nRearrange ceph_tcp_connect() a bit, making use of \"else\" rather than\nre-testing a value with consecutive \"if\" statements.  Don\u0027t record a\nconnection\u0027s socket pointer unless the connect operation is\nsuccessful.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5766651971e81298732466c9aa462ff47898ba37",
      "tree": "147bfd12f3b335d6b2fdb2af162c582a58c33fe5",
      "parents": [
        "80834312a4da1405a9bc788313c67643de6fcb4c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: use a shared zero page rather than one per messenger\n\nEach messenger allocates a page to be used when writing zeroes\nout in the event of error or other abnormal condition.  Instead,\nuse the kernel ZERO_PAGE() for that purpose.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "64486697771cbe219fffcb5c8e2ed9ca4fdf086c",
      "tree": "a623eebb8105ae8e7585c7faaf171729a9cbadbb",
      "parents": [
        "810339ec2fae5cbd0164b8acde7fb65652755864"
      ],
      "author": {
        "name": "Xi Wang",
        "email": "xi.wang@gmail.com",
        "time": "Thu Feb 16 11:55:48 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "libceph: fix overflow check in crush_decode()\n\nThe existing overflow check (n \u003e ULONG_MAX / b) didn\u0027t work, because\nn \u003d ULONG_MAX / b would both bypass the check and still overflow the\nallocation size a + n * b.\n\nThe correct check should be (n \u003e (ULONG_MAX - a) / b).\n\nSigned-off-by: Xi Wang \u003cxi.wang@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "182fac2689b769a96e7fc9defcd560c5cca92b1e",
      "tree": "1944b5db730a3157cd8f3d2e50fa88db263c5114",
      "parents": [
        "c16fa4f2ad19908a47c63d8fa436a1178438c7e7"
      ],
      "author": {
        "name": "Jim Schutt",
        "email": "jaschut@sandia.gov",
        "time": "Wed Feb 29 08:30:58 2012 -0700"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "net/ceph: Only clear SOCK_NOSPACE when there is sufficient space in the socket buffer\n\nThe Ceph messenger would sometimes queue multiple work items to write\ndata to a socket when the socket buffer was full.\n\nFix this problem by making ceph_write_space() use SOCK_NOSPACE in the\nsame way that net/core/stream.c:sk_stream_write_space() does, i.e.,\nclearing it only when sufficient space is available in the socket buffer.\n\nSigned-off-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nReviewed-by: Alex Elder \u003celder@dreamhost.com\u003e\n"
    },
    {
      "commit": "6c073a7ee250118b8be3a2379c96fd7f78382b06",
      "tree": "b398bd9cad821a3543df835e5a0110f270acafb9",
      "parents": [
        "ff05f603c3238010769787f3ba54c48c290ed3e5",
        "d23a4b3fd6ef70b80411b39b8c8bc548a219ce70"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 02 15:47:33 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 02 15:47:33 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  rbd: fix safety of rbd_put_client()\n  rbd: fix a memory leak in rbd_get_client()\n  ceph: create a new session lock to avoid lock inversion\n  ceph: fix length validation in parse_reply_info()\n  ceph: initialize client debugfs outside of monc-\u003emutex\n  ceph: change \"ceph.layout\" xattr to be \"ceph.file.layout\"\n"
    },
    {
      "commit": "ab434b60ab07f8c44246b6fb0cddee436687a09a",
      "tree": "2a680aca91c4906f28cda57093ac76b1e588de5d",
      "parents": [
        "114fc47492e23d93653e4a16664833e98d62a563"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Jan 13 22:22:03 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 02 12:49:01 2012 -0800"
      },
      "message": "ceph: initialize client debugfs outside of monc-\u003emutex\n\nInitializing debufs under monc-\u003emutex introduces a lock dependency for\nsb-\u003es_type-\u003ei_mutex_key, which (combined with several other dependencies)\nleads to an annoying lockdep warning.  There\u0027s no particular reason to do\nthe debugfs setup under this lock, so move it out.\n\nIt used to be the case that our first monmap could come from the OSD; that\nis no longer the case with recent servers, so we will reliably set up the\nclient entry during the initial authentication.\n\nWe don\u0027t have to worry about racing with debugfs teardown by\nceph_debugfs_client_cleanup() because ceph_destroy_client() calls\nceph_msgr_flush() first, which will wait for the message dispatch work\nto complete (and the debugfs init to complete).\n\nFixes: #1940\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "56e925b677c5293e5aac73dac09e93b23259f907",
      "tree": "4faf6862b427a5dfcd150ec8ebd15a77f9295640",
      "parents": [
        "2ff179e650e95c2b21841b21dc46dc2edefd04cd"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 03 12:34:34 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 08:57:03 2012 -0800"
      },
      "message": "libceph: remove useless return value for osd_client __send_request()\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e11b05d31f21f0ea39ea288af667887cd6c21c80",
      "tree": "59768fe6ec9ef15f5e01817d76257f7489df1d5e",
      "parents": [
        "3d8eb7a94e8f25a33362f708974ac7daae9e84f8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Dec 12 09:35:22 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 08:56:57 2012 -0800"
      },
      "message": "crush: fix force for non-root TAKE\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "186482560f660b8dbf77ee43aa6489cb45d342cd",
      "tree": "313156ea6ce1311fba0c569ac0fc51cafaca9d4b",
      "parents": [
        "805a6af8dba5dfdd35ec35dc52ec0122400b2610"
      ],
      "author": {
        "name": "Thomas Meyer",
        "email": "thomas@m3y3r.de",
        "time": "Thu Nov 10 19:45:21 2011 +0100"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 08:56:54 2012 -0800"
      },
      "message": "ceph: Use kmemdup rather than duplicating its implementation\n\nUse kmemdup rather than duplicating its implementation\n\nThe semantic patch that makes this change is available\nin scripts/coccinelle/api/memdup.cocci.\n\nSigned-off-by: Thomas Meyer \u003cthomas@m3y3r.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "653f42f6b6348652c02737924abd6a5a6426e7ee",
      "tree": "466d9d722742f8f9c553226ffce200dc62f494ab",
      "parents": [
        "4dde6dedad736b86bcea3722abb7d8031aeeaa16",
        "9d5a09e659f8414dd3713e2acbfaf8a9e9794aa1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 13 14:59:42 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 13 14:59:42 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  ceph: add missing spin_unlock at ceph_mdsc_build_path()\n  ceph: fix SEEK_CUR, SEEK_SET regression\n  crush: fix mapping calculation when force argument doesn\u0027t exist\n  ceph: use i_ceph_lock instead of i_lock\n  rbd: remove buggy rollback functionality\n  rbd: return an error when an invalid header is read\n  ceph: fix rasize reporting by ceph_show_options\n"
    },
    {
      "commit": "f1932fc1a6d899c754676b1dd8b17de93b052d43",
      "tree": "97c26910626172e22b8495024f9e0025ba9f2343",
      "parents": [
        "be655596b3de5873f994ddbe205751a5ffb4de39"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Dec 07 09:10:26 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Dec 12 09:09:45 2011 -0800"
      },
      "message": "crush: fix mapping calculation when force argument doesn\u0027t exist\n\nIf the force argument isn\u0027t valid, we should continue calculating a\nmapping as if it weren\u0027t specified.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "c292fe4aae5aa5c089633bc40342d27c8275306a",
      "tree": "84c6898327eb35c3c20c1728eaff8ca19094ddeb",
      "parents": [
        "7758c4d6e9371efa04a1cf1b124bbf9cc43e830e",
        "224736d9113ab4a7cf3f05c05377492bd99b4b02"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Nov 21 12:11:13 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Nov 21 12:11:13 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  libceph: Allocate larger oid buffer in request msgs\n  ceph: initialize root dentry\n  ceph: fix iput race when queueing inode work\n"
    },
    {
      "commit": "224736d9113ab4a7cf3f05c05377492bd99b4b02",
      "tree": "0a8fe8063e904eebc2f591607faf8711b78016f8",
      "parents": [
        "774ac21da76f5c3018428725074e27a3fd40b128"
      ],
      "author": {
        "name": "Stratos Psomadakis",
        "email": "psomas@grnet.gr",
        "time": "Thu Nov 10 15:45:37 2011 +0200"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Nov 11 09:50:19 2011 -0800"
      },
      "message": "libceph: Allocate larger oid buffer in request msgs\n\nceph_osd_request struct allocates a 40-byte buffer for object names.\nRBD image names can be up to 96 chars long (100 with the .rbd suffix),\nwhich results in the object name for the image being truncated, and a\nsubsequent map failure.\n\nIncrease the oid buffer in request messages, in order to avoid the\ntruncation.\n\nSigned-off-by: Stratos Psomadakis \u003cpsomas@grnet.gr\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "bc3b2d7fb9b014d75ebb79ba371a763dbab5e8cf",
      "tree": "b0fd4e724bdb1c0a1783616614ae5a9dec1cfa5c",
      "parents": [
        "d9b9384215e17c68d7b6bd05d6fa409e5d4140d7"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Fri Jul 15 11:47:34 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 19:30:30 2011 -0400"
      },
      "message": "net: Add export.h for EXPORT_SYMBOL/THIS_MODULE to non-modules\n\nThese files are non modular, but need to export symbols using\nthe macros now living in export.h -- call out the include so\nthat things won\u0027t break when we remove the implicit presence\nof module.h from everywhere.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "38d6453ca39ecce442628a93e1bb46d70d547512",
      "tree": "7113a921788a83987e2e561e28eefbecd3733d5a",
      "parents": [
        "ee3b56f265cafb28c9a1b58faed4f1dbdf51af86"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Oct 14 13:33:55 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:17 2011 -0700"
      },
      "message": "libceph: force resend of osd requests if we skip an osdmap\n\nIf we skip over one or more map epochs, we need to resend all osd requests\nbecause it is possible they remapped to other servers and then back.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ee3b56f265cafb28c9a1b58faed4f1dbdf51af86",
      "tree": "9eac33d027174267825a008732ce030e2bfcb5a7",
      "parents": [
        "49d9224c047f23089c49a6749609447abd09ee03"
      ],
      "author": {
        "name": "Noah Watkins",
        "email": "noahwatkins@gmail.com",
        "time": "Fri Sep 23 11:48:42 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:16 2011 -0700"
      },
      "message": "ceph: use kernel DNS resolver\n\nChange ceph_parse_ips to take either names given as\nIP addresses or standard hostnames (e.g. localhost).\nThe DNS lookup is done using the dns_resolver facility\nsimilar to its use in AFS, NFS, and CIFS.\n\nThis patch defines CONFIG_CEPH_LIB_USE_DNS_RESOLVER\nthat controls if this feature is on or off.\n\nSigned-off-by: Noah Watkins \u003cnoahwatkins@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "49d9224c047f23089c49a6749609447abd09ee03",
      "tree": "4e0b057f29b006f8143a5350baf6e056f9c75faf",
      "parents": [
        "a35eca958aa1c7d0b5f993db1a3ded45ae16d59b"
      ],
      "author": {
        "name": "Noah Watkins",
        "email": "noahwatkins@gmail.com",
        "time": "Mon Sep 12 14:51:58 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:16 2011 -0700"
      },
      "message": "ceph: fix ceph_monc_init memory leak\n\nfailure clean up does not consider ceph_auth_init.\n\nSigned-off-by: Noah Watkins \u003cnoahwatkins@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f0ed1b7cef1e801ef470efc501f9c663fe10cebd",
      "tree": "93407439807c8c4324da108bcae39809f3584c2c",
      "parents": [
        "b61c27636fffbaf1980e675282777b9467254a40"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 15:05:07 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:16 2011 -0700"
      },
      "message": "libceph: warn on msg allocation failures\n\nAny non-masked msg allocation failure should generate a warning and stack\ntrace to the console.  All of these need to eventually be replaced by\nsafe preallocation or msgpools.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "b61c27636fffbaf1980e675282777b9467254a40",
      "tree": "bd78cfefda4beb7e3de5fe97dd36fed3dbfa91c1",
      "parents": [
        "f6a2f5be07463ef532b9f4e3cb9e42ab9df85832"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 15:03:46 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "libceph: don\u0027t complain on msgpool alloc failures\n\nThe pool allocation failures are masked by the pool; there is no need to\nspam the console about them.  (That\u0027s the whole point of having the pool\nin the first place.)\n\nMark msg allocations whose failure is safely handled as such.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f6a2f5be07463ef532b9f4e3cb9e42ab9df85832",
      "tree": "2e0bc35d64631705fffded5f93f9345ff0f0587f",
      "parents": [
        "6ab00d465a1c8c02c2216f8220727282f3aa50b5"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 09:27:44 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "libceph: always preallocate mon connection\n\nAllocate the mon connection on init.  We already reuse it across\nreconnects.  Remove now unnecessary (and incomplete) NULL checks.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6ab00d465a1c8c02c2216f8220727282f3aa50b5",
      "tree": "b4cc08e1be5ffe0a60d9090d86f7f0d05b1f6e36",
      "parents": [
        "6a8ea4706adb4b4d8f77a8da5f9778b65fbf6f48"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 09:41:59 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "libceph: create messenger with client\n\nThis simplifies the init/shutdown paths, and makes client-\u003emsgr available\nduring the rest of the setup process.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "92bb062fe36132a04c6dc8b3c51c945730b05224",
      "tree": "fbce384d5ac6ced74a009b1b8eb212bc1696112b",
      "parents": [
        "7409b7132ca96d01b373541d788e8c5893bec1f3",
        "8adc8b3d780363d5df0dd6ace10336e3d7e331a1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 29 19:58:58 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 29 19:58:58 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://github.com/NewDreamNetwork/ceph-client\n\n* \u0027for-linus\u0027 of git://github.com/NewDreamNetwork/ceph-client:\n  libceph: fix pg_temp mapping update\n  libceph: fix pg_temp mapping calculation\n  libceph: fix linger request requeuing\n  libceph: fix parse options memory leak\n  libceph: initialize ack_stamp to avoid unnecessary connection reset\n"
    },
    {
      "commit": "8adc8b3d780363d5df0dd6ace10336e3d7e331a1",
      "tree": "18ea04f84f3138561f5a5d09699271b213827f3e",
      "parents": [
        "782e182e91e97f529a1edb30fdece9f1bef90ecc"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Sep 28 10:11:04 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Sep 28 10:13:35 2011 -0700"
      },
      "message": "libceph: fix pg_temp mapping update\n\nThe incremental map updates have a record for each pg_temp mapping that is\nto be add/updated (len \u003e 0) or removed (len \u003d\u003d 0).  The old code was\nwritten as if the updates were a complete enumeration; that was just wrong.\nUpdate the code to remove 0-length entries and drop the rbtree traversal.\n\nThis avoids misdirected (and hung) requests that manifest as server\nerrors like\n\n[WRN] client4104 10.0.1.219:0/275025290 misdirected client4104.1:129 0.1 to osd0 not [1,0] in e11/11\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "782e182e91e97f529a1edb30fdece9f1bef90ecc",
      "tree": "1a7834111ce59e6cc9136e36e9ad846b0250d5d2",
      "parents": [
        "935b639a049053d0ccbcf7422f2f9cd221642f58"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Sep 28 10:08:27 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Sep 28 10:13:31 2011 -0700"
      },
      "message": "libceph: fix pg_temp mapping calculation\n\nWe need to apply the modulo pg_num calculation before looking up a pgid in\nthe pg_temp mapping rbtree.  This fixes pg_temp mappings, and fixes\n(some) misdirected requests that result in messages like\n\n[WRN] client4104 10.0.1.219:0/275025290 misdirected client4104.1:129 0.1 to osd0 not [1,0] in e11/11\n\non the server and stall make the client block without getting a reply (at\nleast until the pg_temp mapping goes way, but that can take a long long\ntime).\n\nReorder calc_pg_raw() a bit to make more sense.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "935b639a049053d0ccbcf7422f2f9cd221642f58",
      "tree": "cee4fa3f82256314393b26bd5857d9564513ee04",
      "parents": [
        "1cad78932a0d139dceff78e68808e160a224d57a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Sep 16 11:13:17 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Sep 16 11:13:17 2011 -0700"
      },
      "message": "libceph: fix linger request requeuing\n\nThe r_req_lru_item list node moves between several lists, and that cycle\nis not directly related (and does not begin) with __register_request().\nInitialize it in the request constructor, not __register_request(). This\nfixes later badness (below) when OSDs restart underneath an rbd mount.\n\nCrashes we\u0027ve seen due to this include:\n\n[  213.974288] kernel BUG at net/ceph/messenger.c:2193!\n\nand\n\n[  144.035274] BUG: unable to handle kernel NULL pointer dereference at 0000000000000048\n[  144.035278] IP: [\u003cffffffffa036c053\u003e] con_work+0x1463/0x2ce0 [libceph]\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "1cad78932a0d139dceff78e68808e160a224d57a",
      "tree": "04e9f05e82dfdb79b3b8de10962d4ae0aba06e32",
      "parents": [
        "c0d5f9db1c7d1b8a9e2f217706e8ea233bac2754"
      ],
      "author": {
        "name": "Noah Watkins",
        "email": "noahwatkins@gmail.com",
        "time": "Mon Sep 12 14:51:53 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Sep 16 09:19:53 2011 -0700"
      },
      "message": "libceph: fix parse options memory leak\n\nceph_destroy_options does not free opt-\u003emon_addr that\nis allocated in ceph_parse_options.\n\nSigned-off-by: Noah Watkins \u003cnoahwatkins@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "c0d5f9db1c7d1b8a9e2f217706e8ea233bac2754",
      "tree": "1962a9bbd284e32a70486b8cc5a0babd2c7dc131",
      "parents": [
        "aca420bc51f48b0701963ba3a6234442a0cabebd"
      ],
      "author": {
        "name": "Jim Schutt",
        "email": "jaschut@sandia.gov",
        "time": "Fri Sep 16 08:27:31 2011 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Sep 16 09:16:22 2011 -0700"
      },
      "message": "libceph: initialize ack_stamp to avoid unnecessary connection reset\n\nCommit 4cf9d544631c recorded when an outgoing ceph message was ACKed,\nin order to avoid unnecessary connection resets when an OSD is busy.\n\nHowever, ack_stamp is uninitialized, so there is a window between\nwhen the message is sent and when it is ACKed in which handle_timeout()\ninterprets the unitialized value as an expired timeout, and resets\nthe connection unnecessarily.\n\nClose the window by initializing ack_stamp.\n\nSigned-off-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0d20fbbe82dadc43f50a4ca5346e962de23cf950",
      "tree": "b3d63936aff013d6baa57c2cd9aaa3bade22d91c",
      "parents": [
        "0ec26fd0698285b31248e34bf1abb022c00f23d6",
        "aca420bc51f48b0701963ba3a6234442a0cabebd"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 09 15:48:34 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 09 15:48:34 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://ceph.newdream.net/git/ceph-client\n\n* \u0027for-linus\u0027 of git://ceph.newdream.net/git/ceph-client:\n  libceph: fix leak of osd structs during shutdown\n  ceph: fix memory leak\n  ceph: fix encoding of ino only (not relative) paths\n  libceph: fix msgpool\n"
    },
    {
      "commit": "aca420bc51f48b0701963ba3a6234442a0cabebd",
      "tree": "7c9f19bd0f91d012253bed3579ec1fbdfb5ec6b1",
      "parents": [
        "259a187ade45056fd44856654f78aa9e9f0f7c75"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Aug 31 14:45:53 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Aug 31 15:22:46 2011 -0700"
      },
      "message": "libceph: fix leak of osd structs during shutdown\n\nWe want to remove all OSDs, not just those on the idle LRU.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5185352c163a72cf969b2fbbfb89801b398896fd",
      "tree": "1b90d4b7ec1b3b117a43c3c6980c9140bb4b2097",
      "parents": [
        "d79698da32b317e96216236f265a9b72b78ae568"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 14:48:11 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 15:26:17 2011 -0700"
      },
      "message": "libceph: fix msgpool\n\nThere were several problems here:\n\n 1- we weren\u0027t tagging allocations with the pool, so they were never\n    returned to the pool.\n 2- msgpool_put didn\u0027t add back to the mempool, even it were called.\n 3- msgpool_release didn\u0027t clear the pool pointer, so it would have looped\n    had #1 not been broken.\n\nThese may or may not have been responsible for #1136 or #1381 (BUG due to\nnon-empty mempool on umount).  I can\u0027t seem to trigger the crash now using\nthe method I was using before.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ba5b56cb3e3d2cab73d4fee9a022bb69462a8cd9",
      "tree": "eda7ea059a41ae5d68e2ad5a36a87069187ef22a",
      "parents": [
        "243dd2809a5edd2e0e3e62781083aa44049af37d",
        "d79698da32b317e96216236f265a9b72b78ae568"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 13:38:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 13:38:50 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (23 commits)\n  ceph: document unlocked d_parent accesses\n  ceph: explicitly reference rename old_dentry parent dir in request\n  ceph: document locking for ceph_set_dentry_offset\n  ceph: avoid d_parent in ceph_dentry_hash; fix ceph_encode_fh() hashing bug\n  ceph: protect d_parent access in ceph_d_revalidate\n  ceph: protect access to d_parent\n  ceph: handle racing calls to ceph_init_dentry\n  ceph: set dir complete frag after adding capability\n  rbd: set blk_queue request sizes to object size\n  ceph: set up readahead size when rsize is not passed\n  rbd: cancel watch request when releasing the device\n  ceph: ignore lease mask\n  ceph: fix ceph_lookup_open intent usage\n  ceph: only link open operations to directory unsafe list if O_CREAT|O_TRUNC\n  ceph: fix bad parent_inode calc in ceph_lookup_open\n  ceph: avoid carrying Fw cap during write into page cache\n  libceph: don\u0027t time out osd requests that haven\u0027t been received\n  ceph: report f_bfree based on kb_avail rather than diffing.\n  ceph: only queue capsnap if caps are dirty\n  ceph: fix snap writeback when racing with writes\n  ...\n"
    },
    {
      "commit": "4cf9d544631c92809cb94ea680c71df56e9437aa",
      "tree": "419e162dfb25e69ef1a89c56a318ad322cf21053",
      "parents": [
        "8f04d42276048b3baff5a5d8fa769f433c62b63e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:24 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:24 2011 -0700"
      },
      "message": "libceph: don\u0027t time out osd requests that haven\u0027t been received\n\nKeep track of when an outgoing message is ACKed (i.e., the server fully\nreceived it and, presumably, queued it for processing).  Time out OSD\nrequests only if it\u0027s been too long since they\u0027ve been received.\n\nThis prevents timeouts and connection thrashing when the OSDs are simply\nbusy and are throttling the requests they read off the network.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "033b1142f4bd44a116d1356fe4a0510437ceddf9",
      "tree": "d2a971a7dc9f3a1af8035e38419c4c4ad8c22632",
      "parents": [
        "f5caadbb3d8fc0b71533e880c684b2230bdb76ac",
        "e6625fa48e6580a74b7e700efd7e6463e282810b"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jul 21 13:38:42 2011 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jul 21 13:38:42 2011 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6\n\nConflicts:\n\tnet/bluetooth/l2cap_core.c\n"
    },
    {
      "commit": "38be7a79f7c99dd01425f19ef6cf744878b6a94b",
      "tree": "5f31b24e4ecca2564ed01b212e3193ba7b2ed4b6",
      "parents": [
        "d7f124f129a6aea99938e0d4172c741b56fefeda"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 19 11:25:04 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 19 11:25:04 2011 -0700"
      },
      "message": "ceph: fix file mode calculation\n\nopen(2) must always include one of O_RDONLY, O_WRONLY, or O_RDWR.  No need\nfor any O_APPEND special case.\n\nPassing O_WRONLY|O_RDWR is undefined according to the man page, but the\nLinux VFS interprets this as O_RDWR, so we\u0027ll do the same.\n\nThis fixes open(2) with flags O_RDWR|O_APPEND, which was incorrectly being\ntranslated to readonly.\n\nReported-by: Fyodor Ustinov \u003cufm@ufm.su\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6a7ebdf2fd15417e87b4fd02ff411aeaca34da5f",
      "tree": "86b15d8cd3e25c97b348b5a61bdb16c02726a480",
      "parents": [
        "f6b72b6217f8c24f2a54988e58af858b4e66024d",
        "51414d41084496aaefd06d7f19eb8206e8bfac2d"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jul 14 07:56:40 2011 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jul 14 07:56:40 2011 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6\n\nConflicts:\n\tnet/bluetooth/l2cap_core.c\n"
    },
    {
      "commit": "9f6ec8d697c08963d83880ccd35c13c5ace716ea",
      "tree": "ad8d93cf6fcdd09b86ade09f5fcbbc66cdb1cca2",
      "parents": [
        "4aa3a715551c93eda32d79bd52042ce500bd5383",
        "56299378726d5f2ba8d3c8cbbd13cb280ba45e4f"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jun 20 22:29:08 2011 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jun 20 22:29:08 2011 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6\n\nConflicts:\n\tdrivers/net/wireless/iwlwifi/iwl-agn-rxon.c\n\tdrivers/net/wireless/rtlwifi/pci.c\n\tnet/netfilter/ipvs/ip_vs_core.c\n"
    },
    {
      "commit": "ea110733874d5176cb56dcf612a629ffac09dbf0",
      "tree": "d079bb9990ecf7dadc326b62605fb4de1f6fad4f",
      "parents": [
        "3c8def9776c3d4636291432522ea312f7a44be95"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Mon Jun 13 16:21:26 2011 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@conan.davemloft.net",
        "time": "Thu Jun 16 23:19:27 2011 -0400"
      },
      "message": "net: Remove casts of void *\n\nUnnecessary casts of void * clutter the code.\n\nThese are the remainder casts after several specific\npatches to remove netdev_priv and dev_priv.\n\nDone via coccinelle script:\n\n$ cat cast_void_pointer.cocci\n@@\ntype T;\nT *pt;\nvoid *pv;\n@@\n\n- pt \u003d (T *)pv;\n+ pt \u003d pv;\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nAcked-by: Paul Moore \u003cpaul.moore@hp.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@conan.davemloft.net\u003e\n"
    },
    {
      "commit": "9bb0ce2b0b734f3325ea5cd6b351856eeac94f78",
      "tree": "afd4c5d343ddfabae8c3b78bff342f6ba6037055",
      "parents": [
        "773e9b442693b250aa6c452cb0cf5a9343f51cef"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Jun 13 16:20:18 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Jun 13 16:26:17 2011 -0700"
      },
      "message": "libceph: fix page calculation for non-page-aligned io\n\nSet the page count correctly for non-page-aligned IO.  We were already\ndoing this correctly for alignment, but not the page count.  Fixes\nDIRECT_IO writes from unaligned pages.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "2584547230ae49b8de91ab3bb5e0a81898905b45",
      "tree": "1f00818bc7075e0898998d4e05c0cd08dd3d85d0",
      "parents": [
        "70b666c3b4cb2b96098d80e6f515e4bc6d37db5a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Jun 03 09:37:09 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jun 07 21:34:13 2011 -0700"
      },
      "message": "ceph: fix sync vs canceled write\n\nIf we cancel a write, trigger the safe completions to prevent a sync from\nblocking indefinitely in ceph_osdc_sync().\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "cd634fb6eec72ef8e6dd677546b8d0ffdd2501eb",
      "tree": "7f0213063830d24d77a1ad0a6a9abfa4f83a5d7d",
      "parents": [
        "7662d8ff57d2b00ce8f7fe0b60a85efbb2c05652"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 09:29:18 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 11:52:11 2011 -0700"
      },
      "message": "libceph: subscribe to osdmap when cluster is full\n\nWhen the cluster is marked full, subscribe to subsequent map updates to\nensure we find out promptly when it is no longer full.  This will prevent\nus from spewing ENOSPC for (much) longer than necessary.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "7662d8ff57d2b00ce8f7fe0b60a85efbb2c05652",
      "tree": "c87fd023ab2d4749ea32619034bcc813cba9504a",
      "parents": [
        "9db4b3e32778400555d5cc6fb61d4058902d37f7"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 03 12:52:05 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 11:52:09 2011 -0700"
      },
      "message": "libceph: handle new osdmap down/state change encoding\n\nOld incrementals encode a 0 value (nearly always) when an osd goes down.\nChange that to allow any state bit(s) to be flipped.  Special case 0 to\nmean flip the CEPH_OSD_UP bit to mimic the old behavior.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "9d6fcb081a4770c3772c51c59c7251c22716d7bb",
      "tree": "8827d90aff9d7f463cb429aff1ecd22dde6a77a6",
      "parents": [
        "6b4a3b517a767c483d16a200730b2967e0e23b83"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 15:48:16 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:25:05 2011 -0700"
      },
      "message": "ceph: check return value for start_request in writepages\n\nSince we pass the nofail arg, we should never get an error; BUG if we do.\n(And fix the function to not return an error if __map_request fails.)\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a2a79609c044d3ddb540671d5029a41c90c57251",
      "tree": "641da035ab11341e8e7e08fee7bf2fde8d6e0214",
      "parents": [
        "04177882265bc5014300a631e7384f8fe6b6aa0f"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 15:34:24 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:25:05 2011 -0700"
      },
      "message": "libceph: add missing breaks in addr_set_port\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    }
  ],
  "next": "04177882265bc5014300a631e7384f8fe6b6aa0f"
}
