)]}'
{
  "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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"
    },
    {
      "commit": "04177882265bc5014300a631e7384f8fe6b6aa0f",
      "tree": "a008861b5c815be69cd4a6a074369359afd27904",
      "parents": [
        "da39822c6565095a0151ccf9d6b95e2ae5612885"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 15:33:17 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:25:04 2011 -0700"
      },
      "message": "libceph: fix TAG_WAIT case\n\nIf we get a WAIT as a client something went wrong; error out.  And don\u0027t\nfall through to an unrelated case.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "12a2f643b0e6e791ba61485430d0003eeb3e373c",
      "tree": "0dd6429055579c3e18a9b81e99202888f91e2852",
      "parents": [
        "2dab036b8c349d747f447ac98c8eb40c769727a8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 14:34:04 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:25:03 2011 -0700"
      },
      "message": "libceph: use snprintf for unknown addrs\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e8f54ce169125a2e59330fac25ad3c9ac0ce22a5",
      "tree": "10184a12eb50d98245f6e218efb631ada132ca8e",
      "parents": [
        "1b36698577c1008dc1e63f0bf4b6f3d9deada94a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 14:18:42 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:25:02 2011 -0700"
      },
      "message": "libceph: fix uninitialized value when no get_authorizer method is set\n\nIf there is no get_authorizer method we set the out_kvec to a bogus\npointer.  The length is also zero in that case, so it doesn\u0027t much matter,\nbut it\u0027s better not to add the empty item in the first place.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0da5d70369e87f80adf794080cfff1ca15a34198",
      "tree": "b9d2fcaa52903e1c9b87ad7edfc24fb294320bce",
      "parents": [
        "3b663780347ce532b08be1c859b1df14f0eea4c8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:21:05 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:21:05 2011 -0700"
      },
      "message": "libceph: handle connection reopen race with callbacks\n\nIf a connection is closed and/or reopened (ceph_con_close, ceph_con_open)\nit can race with a callback.  con_work does various state checks for\nclosed or reopened sockets at the beginning, but drops con-\u003emutex before\nmaking callbacks.  We need to check for state bit changes after retaking\nthe lock to ensure we restart con_work and execute those CLOSED/OPENING\ntests or else we may end up operating under stale assumptions.\n\nIn Jim\u0027s case, this was causing \u0027bad tag\u0027 errors.\n\nThere are four cases where we re-take the con-\u003emutex inside con_work: catch\nthem all and return EAGAIN from try_{read,write} so that we can restart\ncon_work.\n\nReported-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nTested-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ca20892db7567c40e8ed0668f46cf0d085d7db6d",
      "tree": "80fe0a4cf9304b834e9faadbc08fb293db78cc84",
      "parents": [
        "3772d26d87efc2d91b2e4247e0001c89ed09a980"
      ],
      "author": {
        "name": "Henry C Chang",
        "email": "henry.cy.chang@gmail.com",
        "time": "Tue May 03 02:29:56 2011 +0000"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 03 09:28:11 2011 -0700"
      },
      "message": "libceph: fix ceph_msg_new error path\n\nIf memory allocation failed, calling ceph_msg_put() will cause GPF\nsince some of ceph_msg variables are not initialized first.\n\nFix Bug #970.\n\nSigned-off-by: Henry C Chang \u003chenry_c_chang@tcloudcomputing.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e00de341fdb76c955703b4438100f9933c452b7f",
      "tree": "ab776a5e46f1cb5acaa6b26484763259040f470c",
      "parents": [
        "e76661d0a59e53e5cc4dccbe4b755d1dc8a968ec"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 04 12:25:05 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 04 12:25:05 2011 -0800"
      },
      "message": "libceph: fix msgr standby handling\n\nThe standby logic used to be pretty dependent on the work requeueing\nbehavior that changed when we switched to WQ_NON_REENTRANT.  It was also\nvery fragile.\n\nRestructure things so that:\n - We clear WRITE_PENDING when we set STANDBY.  This ensures we will\n   requeue work when we wake up later.\n - con_work backs off if STANDBY is set.  There is nothing to do if we are\n   in standby.\n - clear_standby() helper is called by both con_send() and con_keepalive(),\n   the two actions that can wake us up again.  Move the connect_seq++\n   logic here.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e76661d0a59e53e5cc4dccbe4b755d1dc8a968ec",
      "tree": "371ed08c5d00dbcdcf6f18e5cf36d798bcc51180",
      "parents": [
        "60bf8bf8815e6adea4c1d0423578c3b8000e2ec8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 03 10:10:15 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 04 12:24:31 2011 -0800"
      },
      "message": "libceph: fix msgr keepalive flag\n\nThere was some broken keepalive code using a dead variable.  Shift to using\nthe proper bit flag.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "60bf8bf8815e6adea4c1d0423578c3b8000e2ec8",
      "tree": "ce7140c32a3f177816f4029a88eb99e15bda6943",
      "parents": [
        "692d20f576fb26f62c83f80dbf3ea899998391b7"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 04 12:24:28 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 04 12:24:28 2011 -0800"
      },
      "message": "libceph: fix msgr backoff\n\nWith commit f363e45f we replaced a bunch of hacky workqueue mutual\nexclusion logic with the WQ_NON_REENTRANT flag.  One pieces of fallout is\nthat the exponential backoff breaks in certain cases:\n\n * con_work attempts to connect.\n * we get an immediate failure, and the socket state change handler queues\n   immediate work.\n * con_work calls con_fault, we decide to back off, but can\u0027t queue delayed\n   work.\n\nIn this case, we add a BACKOFF bit to make con_work reschedule delayed work\nnext time it runs (which should be immediately).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "692d20f576fb26f62c83f80dbf3ea899998391b7",
      "tree": "91b3d1984b2986ea99c2b208de6dc65f1a74c701",
      "parents": [
        "38815b780285a4957852c5c9dbe94991c0b26c56"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 03 12:14:53 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 03 13:47:40 2011 -0800"
      },
      "message": "libceph: retry after authorization failure\n\nIf we mark the connection CLOSED we will give up trying to reconnect to\nthis server instance.  That is appropriate for things like a protocol\nversion mismatch that won\u0027t change until the server is restarted, at which\npoint we\u0027ll get a new addr and reconnect.  An authorization failure like\nthis is probably due to the server not properly rotating it\u0027s secret keys,\nhowever, and should be treated as transient so that the normal backoff and\nretry behavior kicks in.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "42961d2333a1855c649fa3790e258ab4f0fa66a4",
      "tree": "7858f28e3a3c5ff1f0dc6f6165251c68b9709b4d",
      "parents": [
        "98bdb0aa007ff7e8e0061936d8d0e210faf2e655"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 25 08:19:34 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 25 08:19:34 2011 -0800"
      },
      "message": "libceph: fix socket write error handling\n\nPass errors from writing to the socket up the stack.  If we get -EAGAIN,\nreturn 0 from the helper to simplify the callers\u0027 checks.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "98bdb0aa007ff7e8e0061936d8d0e210faf2e655",
      "tree": "78c32ad3f4aee581e1f17bc477791fbc102b672c",
      "parents": [
        "d66bbd441c08fe00ed2add1cf70cb243ebc2b27e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 25 08:17:48 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 25 08:17:48 2011 -0800"
      },
      "message": "libceph: fix socket read error handling\n\nIf we get EAGAIN when trying to read from the socket, it is not an error.\nReturn 0 from the helper in this case to simplify the error handling cases\nin the caller (indirectly, try_read).\n\nFix try_read to pass any error to it\u0027s caller (con_work) instead of almost\nalways returning 0.  This let\u0027s us respond to things like socket\ndisconnects.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f363e45fd1184219b472ea549cb7e192e24ef4d2",
      "tree": "1332feb2f7a0a47ce482a0fd4ee9afb547a27090",
      "parents": [
        "01e6acc4ea4c284c44bfb3d46c76f4ae580c6435"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 03 14:49:46 2011 +0100"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Jan 12 15:15:14 2011 -0800"
      },
      "message": "net/ceph: make ceph_msgr_wq non-reentrant\n\nceph messenger code does a rather complex dancing around multithread\nworkqueue to make sure the same work item isn\u0027t executed concurrently\non different CPUs.  This restriction can be provided by workqueue with\nWQ_NON_REENTRANT.\n\nMake ceph_msgr_wq non-reentrant workqueue with the default concurrency\nlevel and remove the QUEUED/BUSY logic.\n\n* This removes backoff handling in con_work() but it couldn\u0027t reliably\n  block execution of con_work() to begin with - queue_con() can be\n  called after the work started but before BUSY is set.  It seems that\n  it was an optimization for a rather cold path and can be safely\n  removed.\n\n* The number of concurrent work items is bound by the number of\n  connections and connetions are independent from each other.  With\n  the default concurrency level, different connections will be\n  executed independently.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Sage Weil \u003csage@newdream.net\u003e\nCc: ceph-devel@vger.kernel.org\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "d96c9043d1588f04c7f467167f653c07d83232d5",
      "tree": "d4b68d2ee371db0287902cae2a27f37749e8e1c9",
      "parents": [
        "1cd275f609ba46c8cae3ee77e499c54a0d13a983"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Dec 13 20:30:28 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Dec 13 20:30:28 2010 -0800"
      },
      "message": "ceph: fix msgr_init error path\n\ncreate_workqueue() returns NULL on failure.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "c5c6b19d4b8f5431fca05f28ae9e141045022149",
      "tree": "0961d9aeee49f481134089ac5b93b7118cf3a34b",
      "parents": [
        "b7495fc2ff941db6a118a93ab8d61149e3f4cef8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Nov 09 12:40:00 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Nov 09 12:43:17 2010 -0800"
      },
      "message": "ceph: explicitly specify page alignment in network messages\n\nThe alignment used for reading data into or out of pages used to be taken\nfrom the data_off field in the message header.  This only worked as long\nas the page alignment matched the object offset, breaking direct io to\nnon-page aligned offsets.\n\nInstead, explicitly specify the page alignment next to the page vector\nin the ceph_msg struct, and use that instead of the message header (which\nprobably shouldn\u0027t be trusted).  The alloc_msg callback is responsible for\nfilling in this field properly when it sets up the page vector.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "df9f86faf3ee610527ed02031fe7dd3c8b752e44",
      "tree": "361ecdca449c3f80d45ff33a291ad0ae544d7470",
      "parents": [
        "2f56f56ad991edd51ffd0baf1182245ee1277a04"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Nov 01 15:49:23 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Nov 01 15:49:23 2010 -0700"
      },
      "message": "ceph: fix small seq message skipping\n\nIf the client gets out of sync with the server message sequence number, we\nnormally skip low seq messages (ones we already received).  The skip code\nwas also incrementing the expected seq, such that all subsequent messages\nalso appeared old and got skipped, and an eventual timeout on the osd\nconnection.  This resulted in some lagging requests and console messages\nlike\n\n[233480.882885] ceph: skipping osd22 10.138.138.13:6804 seq 2016, expected 2017\n[233480.882919] ceph: skipping osd22 10.138.138.13:6804 seq 2017, expected 2018\n[233480.882963] ceph: skipping osd22 10.138.138.13:6804 seq 2018, expected 2019\n[233480.883488] ceph: skipping osd22 10.138.138.13:6804 seq 2019, expected 2020\n[233485.219558] ceph: skipping osd22 10.138.138.13:6804 seq 2020, expected 2021\n[233485.906595] ceph: skipping osd22 10.138.138.13:6804 seq 2021, expected 2022\n[233490.379536] ceph: skipping osd22 10.138.138.13:6804 seq 2022, expected 2023\n[233495.523260] ceph: skipping osd22 10.138.138.13:6804 seq 2023, expected 2024\n[233495.923194] ceph: skipping osd22 10.138.138.13:6804 seq 2024, expected 2025\n[233500.534614] ceph:  tid 6023602 timed out on osd22, will reset osd\n\nReported-by: Theodore Ts\u0027o \u003ctytso@mit.edu\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "3d14c5d2b6e15c21d8e5467dc62d33127c23a644",
      "tree": "7d123c47847df9d1e865b6b78dc7da3fe739b704",
      "parents": [
        "ae1533b62b3369e6ae32338f4a77d64d0e88f676"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Tue Apr 06 15:14:15 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Oct 20 15:37:28 2010 -0700"
      },
      "message": "ceph: factor out libceph from Ceph file system\n\nThis factors out protocol and low-level storage parts of ceph into a\nseparate libceph module living in net/ceph and include/linux/ceph.  This\nis mostly a matter of moving files around.  However, a few key pieces\nof the interface change as well:\n\n - ceph_client becomes ceph_fs_client and ceph_client, where the latter\n   captures the mon and osd clients, and the fs_client gets the mds client\n   and file system specific pieces.\n - Mount option parsing and debugfs setup is correspondingly broken into\n   two pieces.\n - The mon client gets a generic handler callback for otherwise unknown\n   messages (mds map, in this case).\n - The basic supported/required feature bits can be expanded (and are by\n   ceph_fs_client).\n\nNo functional change, aside from some subtle error handling cases that got\ncleaned up in the refactoring process.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "68b4476b0bc13fef18266b4140309a30e86739d2",
      "tree": "47fab5ea2491c7bc75fe14a3b0d3a091eb6244b7",
      "parents": [
        "3499e8a5d4dbb083324efd942e2c4fb7eb65f27c"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Tue Apr 06 15:01:27 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Oct 20 15:37:18 2010 -0700"
      },
      "message": "ceph: messenger and osdc changes for rbd\n\nAllow the messenger to send/receive data in a bio.  This is added\nso that we wouldn\u0027t need to copy the data into pages or some other buffer\nwhen doing IO for an rbd block device.\n\nWe can now have trailing variable sized data for osd\nops.  Also osd ops encoding is more modular.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "213c99ee0cf17ff0fbffb6fb540bd29615cd19d5",
      "tree": "168f72ba71feff5bf24707be622135b1016cdff5",
      "parents": [
        "40819f6fb227c1832935b775ac22aef10aa6f6dd"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 03 10:25:11 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 03 10:25:11 2010 -0700"
      },
      "message": "ceph: whitespace cleanup\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6a2593823ababdada2636398ac190931517b51cf",
      "tree": "7557b08cc90aa0d2c70ea5b0e6b22ff64a4c235d",
      "parents": [
        "c309f0ab26ca37663f368918553d02e90356c89d"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Jul 07 09:06:08 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun Aug 01 20:11:41 2010 -0700"
      },
      "message": "ceph: specify supported features in super.h\n\nSpecify the supported/required feature bits in super.h client code instead\nof using the definitions from the shared kernel/userspace headers (which\nwill go away shortly).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "cd84db6e4051a9fb7941d49d31a0193a3371fd61",
      "tree": "beb657b2cc6b4184d97a85502b29a291616a83ab",
      "parents": [
        "ca81f3f6bd759f90a4b940cddda1f8bc61a7725a"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Fri Jun 11 16:58:48 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun Aug 01 20:11:40 2010 -0700"
      },
      "message": "ceph: code cleanup\n\nMainly fixing minor issues reported by sparse.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f91d3471ccf1ca9a795f46c94b1ded8dd219940c",
      "tree": "7a8d496d69ad9dd7a206183d11f5719b7161e6a7",
      "parents": [
        "39139f64e14684cf2370770deb79d929d27cfd9b"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Jul 01 15:18:31 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Jul 09 15:00:20 2010 -0700"
      },
      "message": "ceph: fix creation of ipv6 sockets\n\nUse the address family from the peer address instead of assuming IPv4.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "39139f64e14684cf2370770deb79d929d27cfd9b",
      "tree": "7ea80cd49b3afd0816eacf7fbf191647c44d5661",
      "parents": [
        "d06dbaf6c2c7187938f3f6745d9e4938a2d0ec47"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Jul 08 09:54:52 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Jul 09 15:00:18 2010 -0700"
      },
      "message": "ceph: fix parsing of ipv6 addresses\n\nCheck for brackets around the ipv6 address to avoid ambiguity with the port\nnumber.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "d06dbaf6c2c7187938f3f6745d9e4938a2d0ec47",
      "tree": "472cfd72bcc15d7a7323a58a8698bab6ec7f33f1",
      "parents": [
        "b0bbb0be8f7fbf6d366b359e034c78a96c4e274d"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Jul 08 10:47:16 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Jul 08 16:49:53 2010 -0700"
      },
      "message": "ceph: fix printing of ipv6 addrs\n\nThe buffer was too small.  Make it bigger, use snprintf(), put brackets\naround the ipv6 address to avoid mixing it up with the :port, and use the\never-so-handy %pI[46] formats.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ed98adad3d87594c55347824e85137d1829c9e70",
      "tree": "b22414183f7eff1ac1ba606a3ebf2357f0876b4c",
      "parents": [
        "153a10939ea6e42e9c0115b0645060d0d7bb4697"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Jul 05 12:15:14 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Jul 05 12:16:23 2010 -0700"
      },
      "message": "ceph: fix message revocation\n\nA message can be on a queue (pending or sent), or out_msg (sending), or\nboth.  We were assuming that if it\u0027s not on a queue it couldn\u0027t be out_msg,\nbut that was false in the case of lossy connections like the OSD.  Fix\nceph_con_revoke() to treat these cases independently.  Also, fix the\nout_kvec_is_message check to only trigger if we are currently sending\n_this_ message.\n\nThis fixes a GPF in tcp_sendpage, triggered by OSD restarts.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ae32be31341a5fecfa16c5b3eb78095207182cce",
      "tree": "1fb056abaab9a6ca5f593dba6237f6ebc0f6135c",
      "parents": [
        "4a32f93d29b05cdab63c0e2979bc1524c8ea6bf5"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun Jun 13 10:30:19 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun Jun 13 10:34:36 2010 -0700"
      },
      "message": "ceph: fix message memory leak, uninitialized variable\n\nWe need to properly initialize skip, as not all alloc_msg op instances\nset it.\n\nAlso, BUG if someone says skip but also allocates a message.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0cf5537b158caae42bcc03f0f6db10f68585b1ec",
      "tree": "a64e764eff79981bbcac289e33f8022096be0cbe",
      "parents": [
        "7e27d6e778cd87b6f2415515d7127eba53fe5d02"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Fri Jun 11 15:57:06 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun Jun 13 10:34:36 2010 -0700"
      },
      "message": "ceph: some endianity fixes\n\nFix some problems that came up with sparse.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a922d38fd10d55d5033f10df15baf966e8f5b18c",
      "tree": "306f73dedd5482f09bdac6dc9ecb5285f95b316f",
      "parents": [
        "dd1c9057366f329911180e9000e2b425f23fc287"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat May 29 09:41:23 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat May 29 09:42:03 2010 -0700"
      },
      "message": "ceph: close out mds, osd connections before stopping auth\n\nThe auth module (part of the mon_client) is needed to free any\nceph_authorizer(s) used by the mds and osd connections.  Flush the msgr\nworkqueue before stopping monc to ensure that the destroy_authorizer\nauth op is available when those connections are closed out.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "34d23762d988b7dcb08390ac72a353df3d60193c",
      "tree": "3a49d039527548697165da2b8789f3588b95ffed",
      "parents": [
        "23804d91f112df09b832cd091b71af4dc2831aa8"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Tue Apr 06 14:33:58 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:42 2010 -0700"
      },
      "message": "ceph: all allocation functions should get gfp_mask\n\nThis is essential, as for the rados block device we\u0027ll need\nto run in different contexts that would need flags that\nare other than GFP_NOFS.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "aba558e28ac40a598542d995c09efa8439ee3ed4",
      "tree": "22df6fe65694b3ebe5a0a56dbf96c3973f3c5812",
      "parents": [
        "ca9d93a292e327bbcddd8f8ea4197397e35097d4"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed May 12 15:23:30 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:38 2010 -0700"
      },
      "message": "ceph: save peer feature bits in connection structure\n\nThese are used for adjusting behavior, such as conditionally encoding a\nnewer message format.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ca9d93a292e327bbcddd8f8ea4197397e35097d4",
      "tree": "30e81e64079228bca30b4b32b5ad4df68eca6dc2",
      "parents": [
        "1a75627896fe67d0124eab6fe2f83dd40188c40c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed May 12 14:48:20 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:38 2010 -0700"
      },
      "message": "ceph: resync headers with userland\n\nNotable changes include pool op defines and types, FLOCK feature bit, and\nnew CMPXATTR osd ops.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "dbad185d4939ffb806f6fa753ef9f470e3b72b62",
      "tree": "0d3aaa8f0028c8b4c7826ff2a9c292ca862cd64a",
      "parents": [
        "a5ee751c15016d0deee0d651e42a3b163ea73ade"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 25 15:45:38 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:32 2010 -0700"
      },
      "message": "ceph: drop src address(es) from message header [new protocol feature]\n\nThe CEPH_FEATURE_NOSRCADDR protocol feature avoids putting the full source\naddress in each message header (twice).  This patch switches the client to\nthe new scheme, and _requires_ this feature on the server.  The server\nwill support both the old and new schemes.  That means an old client will\nwork with a new server, but a new client will not work with an old server.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "9dd4658db1be5ca92c2ed2fd7a100d973125d9c5",
      "tree": "0f9e2b9d0b6edd9c37a5f6528a1c7c60fb10a902",
      "parents": [
        "4f48280ee1d0654390cd50ad0c41ea93309e7c91"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Apr 28 13:51:50 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:25 2010 -0700"
      },
      "message": "ceph: close messenger race\n\nSimplify messenger locking, and close race between ceph_con_close() setting\nthe CLOSED bit and con_work() checking the bit, then taking the mutex.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6f2bc3ff4cdb03903c79e155e9e1889ce176de09",
      "tree": "73f3db68650997b714073c9f04eef40dcd2b6d96",
      "parents": [
        "bb257664f748bcfc80715f85f70f0f560caec3b4"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Apr 02 16:16:34 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:20 2010 -0700"
      },
      "message": "ceph: clean up connection reset\n\nReset out_keepalive_pending and peer_global_seq, and drop unused var.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "bb257664f748bcfc80715f85f70f0f560caec3b4",
      "tree": "0f03c628328082e660c6a60f6094cde478dadec9",
      "parents": [
        "a79832f26be370ee26ea81eecdfd42d10e49d66a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Apr 01 16:07:23 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:19 2010 -0700"
      },
      "message": "ceph: simplify ceph_msg_new\n\nWe only need to pass in front_len.  Callers can attach any other payload\npieces (middle, data) as they see fit.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a79832f26be370ee26ea81eecdfd42d10e49d66a",
      "tree": "59d55f3c928558505a420830eddfb01b3186d467",
      "parents": [
        "d52f847a841bfeba0ea87a7842732d388a1ca2e8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Apr 01 16:06:19 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:18 2010 -0700"
      },
      "message": "ceph: make ceph_msg_new return NULL on failure; clean up, fix callers\n\nReturning ERR_PTR(-ENOMEM) is useless extra work.  Return NULL on failure\ninstead, and fix up the callers (about half of which were wrong anyway).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "31459fe4b24c1e09712eff0d82a5276f4fd0e3cf",
      "tree": "b5f7b4c1bac0eb93cef51443373909eb91c43cc4",
      "parents": [
        "f553069e5d7c6f53688ae4470173fcb1be97cbe7"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Wed Mar 17 13:54:02 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:12 2010 -0700"
      },
      "message": "ceph: use __page_cache_alloc and add_to_page_cache_lru\n\nFollowing Nick Piggin patches in btrfs, pagecache pages should be\nallocated with __page_cache_alloc, so they obey pagecache memory\npolicies.\n\nAlso, using add_to_page_cache_lru instead of using a private\npagevec where applicable.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e84346b726ea90a8ed470bc81c4136a7b8710ea5",
      "tree": "99a90ef86d38a51e39ed69af318e6cfe32023879",
      "parents": [
        "f818a73674c5d197f66b636a46d7d578d7258129"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 11 21:20:38 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 11 21:20:38 2010 -0700"
      },
      "message": "ceph: preserve seq # on requeued messages after transient transport errors\n\nIf the tcp connection drops and we reconnect to reestablish a stateful\nsession (with the mds), we need to resend previously sent (and possibly\nreceived) messages with the _same_ seq # so that they can be dropped on\nthe other end if needed.  Only assign a new seq once after the message is\nqueued.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "45c6ceb547ad2d98215351974a4686bf8cb13e14",
      "tree": "f7d5dc6b7900faebef1a29a5e0af5ac263a64337",
      "parents": [
        "9abf82b8bc93dd904738a71ca69aa5df356d4d24"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 11 15:01:51 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 11 15:17:40 2010 -0700"
      },
      "message": "ceph: zero unused message header, footer fields\n\nWe shouldn\u0027t leak any prior memory contents to other parties.  And random\ndata, particularly in the \u0027version\u0027 field, can cause problems down the\nline.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ae18756b9fa7bb93132cff06cd8575e3d46633f9",
      "tree": "e09f5c89b4611e2c53bb50118d8fa8133b58c73b",
      "parents": [
        "684be25c52a1e43638ced160be0b0b46596e7f2b"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Apr 22 07:47:01 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 03 10:49:24 2010 -0700"
      },
      "message": "ceph: discard incoming messages with bad seq #\n\nWe can get old message seq #\u0027s after a tcp reconnect for stateful sessions\n(i.e., the MDS).  If we get a higher seq #, that is an error, and we\nshouldn\u0027t see any bad seq #\u0027s for stateless (mon, osd) connections.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "684be25c52a1e43638ced160be0b0b46596e7f2b",
      "tree": "c6cde28f26e12f1ef33990a6d8cb10ab975dddba",
      "parents": [
        "d45d0d970f495e04a4e4f46acd74e90f4a4564f9"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Apr 21 20:45:59 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 03 10:49:24 2010 -0700"
      },
      "message": "ceph: fix seq counting for skipped messages\n\nIncrement in_seq even when the message is skipped for some reason.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "96e35b40c0d6206f56370f937f6f4722739eb273",
      "tree": "2c387b6e3f628484a1f4bdc964e529f89d5f5821",
      "parents": [
        "f5c07a2d8acfc98e00d3be6298f979e5b3175953",
        "a6a5349d17f2a5c37079826f1a1474c3d08c6b53"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 14 18:45:31 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 14 18:45:31 2010 -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:\n  ceph: use separate class for ceph sockets\u0027 sk_lock\n  ceph: reserve one more caps space when doing readdir\n  ceph: queue_cap_snap should always queue dirty context\n  ceph: fix dentry reference leak in dcache readdir\n  ceph: decode v5 of osdmap (pool names) [protocol change]\n  ceph: fix ack counter reset on connection reset\n  ceph: fix leaked inode ref due to snap metadata writeback race\n  ceph: fix snap context reference leaks\n  ceph: allow writeback of snapped pages older than \u0027oldest\u0027 snapc\n  ceph: fix dentry rehashing on virtual .snap dir\n"
    },
    {
      "commit": "a6a5349d17f2a5c37079826f1a1474c3d08c6b53",
      "tree": "3b37dadbf297abdd65b3f63ac8e94a6137098198",
      "parents": [
        "e1e4dd0caa63e166afa46a1ccc947bebb4f66bcf"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Apr 13 14:07:07 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Apr 13 14:07:07 2010 -0700"
      },
      "message": "ceph: use separate class for ceph sockets\u0027 sk_lock\n\nUse a separate class for ceph sockets to prevent lockdep confusion.\nBecause ceph sockets only get passed kernel pointers, there is no\ndependency from sk_lock -\u003e mmap_sem.  If we share the same class as other\nsockets, lockdep detects a circular dependency from\n\n\tmmap_sem (page fault) -\u003e fs mutex -\u003e sk_lock -\u003e mmap_sem\n\nbecause dependencies are noted from both ceph and user contexts.  Using\na separate class prevents the sk_lock(ceph) -\u003e mmap_sem dependency and\nmakes lockdep happy.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0e0d5e0c4bb0476d53a43bfc87d03a25ec4b5579",
      "tree": "66013a33ad1f46b258d55289adf12cac463d43f9",
      "parents": [
        "819ccbfa448403992ceafc05d6d7097aaa74d4c3"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Apr 02 16:07:19 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Apr 02 16:07:19 2010 -0700"
      },
      "message": "ceph: fix ack counter reset on connection reset\n\nIf in_seq_acked isn\u0027t reset along with in_seq, we don\u0027t ack received\nmessages until we reach the old count, consuming gobs memory on the other\nend of the connection and introducing a large delay when those messages\nare eventually deleted.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "87b315a5b5cec5d7086494b203577602f5befc8c",
      "tree": "18e1638619a51cdf4605bad5b4270841450cf211",
      "parents": [
        "3dd72fc0e6dc49c79fa9e7cd7c654deac7ccaa29"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 22 14:51:18 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 23 07:47:01 2010 -0700"
      },
      "message": "ceph: avoid reopening osd connections when address hasn\u0027t changed\n\nWe get a fault callback on _every_ tcp connection fault.  Normally, we\nwant to reopen the connection when that happens.  If the address we have\nis bad, however, and connection attempts always result in a connection\nrefused or similar error, explicitly closing and reopening the msgr\nconnection just prevents the messenger\u0027s backoff logic from kicking in.\nThe result can be a console full of\n\n[ 3974.417106] ceph: osd11 10.3.14.138:6800 connection failed\n[ 3974.423295] ceph: osd11 10.3.14.138:6800 connection failed\n[ 3974.429709] ceph: osd11 10.3.14.138:6800 connection failed\n\nInstead, if we get a fault, and have outstanding requests, but the osd\naddress hasn\u0027t changed and the connection never successfully connected in\nthe first place, do nothing to the osd connection.  The messenger layer\nwill back off and retry periodically, because we never connected and thus\nthe lossy bit is not set.\n\nInstead, touch each request\u0027s r_stamp so that handle_timeout can tell the\nrequest is still alive and kicking.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "3c3f2e32effd4c6acc3a9434bd7eecb0af653d89",
      "tree": "9f1b1cbee6e1d79ccc7f8160bfb41b856e9cd179",
      "parents": [
        "e4cb4cb8a03adde1aa4b874623c50b9a5b56e635"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 18 15:20:53 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 23 07:46:59 2010 -0700"
      },
      "message": "ceph: fix connection fault con_work reentrancy problem\n\nThe messenger fault was clearing the BUSY bit, for reasons unclear.  This\nmade it possible for the con-\u003eops-\u003efault function to reopen the connection,\nand requeue work in the workqueue--even though the current thread was\nalready in con_work.\n\nThis avoids a problem where the client busy loops with connection failures\non an unreachable OSD, but doesn\u0027t address the root cause of that problem.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "63733a0fc55cca74b1911769633dc5dfd1a45907",
      "tree": "b173d0f9a243dc4df463a8a73b64eabc26cec21c",
      "parents": [
        "8b218b8a4a65bf4e304ae8690cadb9100ef029c0"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 15 15:47:22 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Mar 20 21:33:09 2010 -0700"
      },
      "message": "ceph: fix authenticator timeout\n\nWe were failing to reconnect to services due to an old authenticator, even\nthough we had the new ticket, because we weren\u0027t properly retrying the\nconnect handshake, because we were calling an old/incorrect helper that\nleft in_base_pos incorrect.  The result was a failure to reconnect to the\nOSD or MDS (with an authentication error) if the MDS restarted after the\nservice had been up a few hours (long enough for the original authenticator\nto be invalid).  This was only a problem if the AUTH_X authentication was\nenabled.\n\nNow that the \u0027negotiate\u0027 and \u0027connect\u0027 stages are fully separated, we\nshould use the prepare_read_connect() helper instead, and remove the\nobsolete one.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "3ca02ef96e119d36bc1752baeae7dd0c59c2f325",
      "tree": "5ef2a149d0f67b3f59fd5c4b168712046f7ce7f2",
      "parents": [
        "70edb55bdfa8922c8ad40bc5a67abb6d9fee8d47"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 01 15:25:00 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 01 15:25:00 2010 -0800"
      },
      "message": "ceph: reset front len on return to msgpool; BUG on mismatched front iov\n\nReset msg front len when a message is returned to the pool: the caller\nmay have changed it.\n\nBUG if we try to send a message with a hdr.front_len that doesn\u0027t match\nthe front iov.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "1679f876a641d209e7b22e43ebda0693c71003cf",
      "tree": "6cb4ba61dac343c093d7a428c48a2bb7619f0a31",
      "parents": [
        "080af17e9c6360c5a835528e8de3141a46273ed2"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Feb 26 13:55:51 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 01 15:19:51 2010 -0800"
      },
      "message": "ceph: reset bits on connection close\n\nClear LOSSYTX bit, so that if/when we reconnect, said reconnect\nwill retry on failure.\n\nClear _PENDING bits too, to avoid polluting subsequent\nconnection state.\n\nDrop unused REGISTERED bit.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e80a52d14f868059e8ec790c9fae88cdb8a1df98",
      "tree": "8353f33245509d7c3bd7fb25f5c254df6db8db9b",
      "parents": [
        "161fd65ac934608345aed35226fc889ea3b0b500"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 25 12:40:45 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 25 12:40:45 2010 -0800"
      },
      "message": "ceph: fix connection fault STANDBY check\n\nMove any out_sent messages to out_queue _before_ checking if\nout_queue is empty and going to STANDBY, or else we may drop\nsomething that was never acked.\n\nAnd clean up the code a bit (less goto).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "161fd65ac934608345aed35226fc889ea3b0b500",
      "tree": "7e216c47fde0c06b0349adabe1d1363d9b71e74b",
      "parents": [
        "88d892a37fc231ab2aa3b1c40ca9d67224616594"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 25 12:38:57 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 25 12:38:57 2010 -0800"
      },
      "message": "ceph: invalidate_authorizer without con-\u003emutex held\n\nThis fixes lock ABBA inversion, as the -\u003einvalidate_authorizer()\nop may need to take a lock (or even call back into the\nmessenger).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5b3a4db3e4009aff918abb1353eb3f4925393a7b",
      "tree": "0f55666c827c3dfe31309209b69121e431366739",
      "parents": [
        "bcd2cbd10ce31c950a40c08d7f601f8ff23537b8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Feb 19 21:43:23 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Feb 23 14:26:29 2010 -0800"
      },
      "message": "ceph: fix up unexpected message handling\n\nFix skipping of unexpected message types from osd, mon.\n\nClean up pr_info and debug output.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    }
  ],
  "next": "91e45ce38946a8efa21fefbc65d023ca3c0b434f"
}
