)]}'
{
  "log": [
    {
      "commit": "8d63e318c4eb1bea6f7e3cb4b77849eaa167bfec",
      "tree": "4783d4d0ab9a5d9c17e8eb0f93b0d279ad1b879a",
      "parents": [
        "9bd1966344bf975b5ce65e80fd6bacc41b4325a8"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:52 2012 -0500"
      },
      "message": "libceph: isolate kmap() call in write_partial_msg_pages()\n\nIn write_partial_msg_pages(), every case now does an identical call\nto kmap(page).  Instead, just call it once inside the CRC-computing\nblock where it\u0027s needed.  Move the definition of kaddr inside that\nblock, and make it a (char *) to ensure portable pointer arithmetic.\n\nWe still don\u0027t kunmap() it until after the sendpage() call, in case\nthat also ends up needing to use the mapping.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "9bd1966344bf975b5ce65e80fd6bacc41b4325a8",
      "tree": "86ff9e21f79e3d20b1d8feda4bc8000fe18069da",
      "parents": [
        "0cdf9e60189a87356a865a96dbafc2240af5c91d"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:52 2012 -0500"
      },
      "message": "libceph: rename \"page_shift\" variable to something sensible\n\nIn write_partial_msg_pages() there is a local variable used to\ntrack the starting offset within a bio segment to use.  Its name,\n\"page_shift\" defies the Linux convention of using that name for\nlog-base-2(page size).\n\nSince it\u0027s only used in the bio case rename it \"bio_offset\".  Use it\nalong with the page_pos field to compute the memory offset when\ncomputing CRC\u0027s in that function.  This makes the bio case match the\nothers more closely.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0cdf9e60189a87356a865a96dbafc2240af5c91d",
      "tree": "832d6059c472d2d8777a9819a0ecb7b945167a1f",
      "parents": [
        "e36b13cceb46136d849aeee06b4907ad3570ba78"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:52 2012 -0500"
      },
      "message": "libceph: get rid of zero_page_address\n\nThere\u0027s not a lot of benefit to zero_page_address, which basically\nholds a mapping of the zero page through the life of the messenger\nmodule.  Even with our own mapping, the sendpage interface where\nit\u0027s used may need to kmap() it again.  It\u0027s almost certain to\nbe in low memory anyway.\n\nSo stop treating the zero page specially in write_partial_msg_pages()\nand just get rid of zero_page_address entirely.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e36b13cceb46136d849aeee06b4907ad3570ba78",
      "tree": "ec2ff06bed82d719c9f68183ac19db483380af33",
      "parents": [
        "31739139f3ed7be802dd9019ec8d8cc910e3d241"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:52 2012 -0500"
      },
      "message": "libceph: only call kernel_sendpage() via helper\n\nMake ceph_tcp_sendpage() be the only place kernel_sendpage() is\nused, by using this helper in write_partial_msg_pages().\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "31739139f3ed7be802dd9019ec8d8cc910e3d241",
      "tree": "3182393002d7a8e29d230e30aa4920d7de737530",
      "parents": [
        "37675b0f42a8f7699c3602350d1c3b2a1698a3d3"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: use kernel_sendpage() for sending zeroes\n\nIf a message queued for send gets revoked, zeroes are sent over the\nwire instead of any unsent data.  This is done by constructing a\nmessage and passing it to kernel_sendmsg() via ceph_tcp_sendmsg().\n\nSince we are already working with a page in this case we can use\nthe sendpage interface instead.  Create a new ceph_tcp_sendpage()\nhelper that sets up flags to match the way ceph_tcp_sendmsg()\ndoes now.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "37675b0f42a8f7699c3602350d1c3b2a1698a3d3",
      "tree": "17717f3bcd3eea065d0d08e49699af6dbec7c0ff",
      "parents": [
        "84495f496170a73ed79667b7fbf91947b7f47c87"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Mar 07 11:40:08 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: fix inverted crc option logic\n\nCRC\u0027s are computed for all messages between ceph entities.  The CRC\ncomputation for the data portion of message can optionally be\ndisabled using the \"nocrc\" (common) ceph option.  The default is\nfor CRC computation for the data portion to be enabled.\n\nUnfortunately, the code that implements this feature interprets the\nfeature flag wrong, meaning that by default the CRC\u0027s have *not*\nbeen computed (or checked) for the data portion of messages unless\nthe \"nocrc\" option was supplied.\n\nFix this, in write_partial_msg_pages() and read_partial_message().\nAlso change the flag variable in write_partial_msg_pages() to be\n\"no_datacrc\" to match the usage elsewhere in the file.\n\nThis fixes http://tracker.newdream.net/issues/2064\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "84495f496170a73ed79667b7fbf91947b7f47c87",
      "tree": "c36204466b0dc85b39c187f78275c3b25925b15c",
      "parents": [
        "f42299e6c3883c69c14079b8c88fe33815b2dcc3"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:55 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: some simple changes\n\nNothing too big here.\n    - define the size of the buffer used for consuming ignored\n      incoming data using a symbolic constant\n    - simplify the condition determining whether to unmap the page\n      in write_partial_msg_pages(): do it for crc but not if the\n      page is the zero page\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f42299e6c3883c69c14079b8c88fe33815b2dcc3",
      "tree": "f94d09a6438705bff01311dbe7cd426d1a800ff5",
      "parents": [
        "fe3ad593e2c34457ffa6233014ab19f4d36f85f2"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: small refactor in write_partial_kvec()\n\nMake a small change in the code that counts down kvecs consumed by\na ceph_tcp_sendmsg() call.  Same functionality, just blocked out\na little differently.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "fe3ad593e2c34457ffa6233014ab19f4d36f85f2",
      "tree": "eed6ceddbca3021e7492a1baaf658922e2aa8a6c",
      "parents": [
        "a9a0c51af4e7c825c014b40694571456a75ebbc4"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: do crc calculations outside loop\n\nMove blocks of code out of loops in read_partial_message_section()\nand read_partial_message().  They were only was getting called at\nthe end of the last iteration of the loop anyway.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a9a0c51af4e7c825c014b40694571456a75ebbc4",
      "tree": "6df7b2873d21f3c9c5e449aca1d8c16f4dd5fc1d",
      "parents": [
        "bca064d236a2e3162a07c758855221bcbe3c475b"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: separate CRC calculation from byte swapping\n\nCalculate CRC in a separate step from rearranging the byte order\nof the result, to improve clarity and readability.\n\nUse offsetof() to determine the number of bytes to include in the\nCRC calculation.\n\nIn read_partial_message(), switch which value gets byte-swapped,\nsince the just-computed CRC is already likely to be in a register.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "bca064d236a2e3162a07c758855221bcbe3c475b",
      "tree": "49fca3de9007fa6cc5304bd8d7851d28cbe33110",
      "parents": [
        "cffaba15cd95d4a16eb5a6aa5c22a79f67d555ab"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: use \"do\" in CRC-related Boolean variables\n\nChange the name (and type) of a few CRC-related Boolean local\nvariables so they contain the word \"do\", to distingish their purpose\nfrom variables used for holding an actual CRC value.\n\nNote that in the process of doing this I identified a fairly serious\nlogic error in write_partial_msg_pages():  the value of \"do_crc\"\nassigned appears to be the opposite of what it should be.  No\nattempt to fix this is made here; this change preserves the\nerroneous behavior.  The problem I found is documented here:\n    http://tracker.newdream.net/issues/2064\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "cffaba15cd95d4a16eb5a6aa5c22a79f67d555ab",
      "tree": "d752174022e8444c70afb27e798e032163f89ac9",
      "parents": [
        "d3002b974cefbb7c1e325cc296966f768ff76b06"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "ceph: ensure Boolean options support both senses\n\nMany ceph-related Boolean options offer the ability to both enable\nand disable a feature.  For all those that don\u0027t offer this, add\na new option so that they do.\n\nNote that ceph_show_options()--which reports mount options currently\nin effect--only reports the option if it is different from the\ndefault value.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "d3002b974cefbb7c1e325cc296966f768ff76b06",
      "tree": "8685d72f6530959c4e19c4c9f3a12709ec1f4b08",
      "parents": [
        "41617d0c9c9832e030667277ddf6b4ffb4ecdc90"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: a few small changes\n\nThis gathers a number of very minor changes:\n    - use %hu when formatting the a socket address\u0027s address family\n    - null out the ceph_msgr_wq pointer after the queue has been\n      destroyed\n    - drop a needless cast in ceph_write_space()\n    - add a WARN() call in ceph_state_change() in the event an\n      unrecognized socket state is encountered\n    - rearrange the logic in ceph_con_get() and ceph_con_put() so\n      that:\n        - the reference counts are only atomically read once\n\t- the values displayed via dout() calls are known to\n\t  be meaningful at the time they are formatted\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "41617d0c9c9832e030667277ddf6b4ffb4ecdc90",
      "tree": "6f943ada9195e794d84506b818ad3d8f0b9a49b9",
      "parents": [
        "6173d1f02fb19c0fba02857ae4e1109b5ec95034"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: make ceph_tcp_connect() return int\n\nThere is no real need for ceph_tcp_connect() to return the socket\npointer it creates, since it already assigns it to con-\u003esock, which\nis visible to the caller.  Instead, have it return an error code,\nwhich tidies things up a bit.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6173d1f02fb19c0fba02857ae4e1109b5ec95034",
      "tree": "c837bfe920220d138ba99d8fac2ac781bb2a44ac",
      "parents": [
        "e0f43c9419c1900e5b50de4261e9686a45a0a2b8"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:50 2012 -0500"
      },
      "message": "libceph: encapsulate some messenger cleanup code\n\nDefine a helper function to perform various cleanup operations.  Use\nit both in the exit routine and in the init routine in the event of\nan error.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e0f43c9419c1900e5b50de4261e9686a45a0a2b8",
      "tree": "28a0452e2bc223513b376f9db711f878a848bddc",
      "parents": [
        "859eb7994876f26fd9f52d9589fbcab8e2fe8069"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:50 2012 -0500"
      },
      "message": "libceph: make ceph_msgr_wq private\n\nThe messenger workqueue has no need to be public.  So give it static\nscope.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "859eb7994876f26fd9f52d9589fbcab8e2fe8069",
      "tree": "128067d342a4937228ac5c307c153b9b95ec254e",
      "parents": [
        "963be4d7709f84d865f76d12d5b0ec7edad1c498"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:50 2012 -0500"
      },
      "message": "libceph: encapsulate connection kvec operations\n\nEncapsulate the operation of adding a new chunk of data to the next\nopen slot in a ceph_connection\u0027s out_kvec array.  Also add a \"reset\"\noperation to make subsequent add operations start at the beginning\nof the array again.\n\nUse these routines throughout, avoiding duplicate code and ensuring\nall calls are handled consistently.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "963be4d7709f84d865f76d12d5b0ec7edad1c498",
      "tree": "798e98459427acc942228c42a69c3bc4ff3308bd",
      "parents": [
        "32eec68d2f233e8a6ae1cd326022f6862e2b9ce3"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:50 2012 -0500"
      },
      "message": "libceph: move prepare_write_banner()\n\nOne of the arguments to prepare_write_connect() indicates whether it\nis being called immediately after a call to prepare_write_banner().\nMove the prepare_write_banner() call inside prepare_write_connect(),\nand reinterpret (and rename) the \"after_banner\" argument so it\nindicates that prepare_write_connect() should *make* the call\nrather than should know it has already been made.\n\nThis was split out from the next patch to highlight this change in\nlogic.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ee57741c5209154b8ef124bcaa2496da1b69a988",
      "tree": "248a6e7bf259bb849f885f1ff4a82be74ab4913b",
      "parents": [
        "2107978668de13da484f7abc3f03516494c7fca9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Jan 24 10:08:36 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:47 2012 -0500"
      },
      "message": "rbd: make ceph_parse_options() return a pointer\n\nceph_parse_options() takes the address of a pointer as an argument\nand uses it to return the address of an allocated structure if\nsuccessful.  With this interface is not evident at call sites that\nthe pointer is always initialized.  Change the interface to return\nthe address instead (or a pointer-coded error code) to make the\nvalidity of the returned pointer obvious.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "99f0f3b2c4be15784bb4ede33b5f2c3f7861dba7",
      "tree": "356e82e59845aeb418f7975a4f8be1fb34de717e",
      "parents": [
        "bd406145129e8724cc71b65ff2a788dbd4d60c50"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: eliminate some abusive casts\n\nThis fixes some spots where a type cast to (void *) was used as\nas a universal type hiding mechanism.  Instead, properly cast the\ntype to the intended target type.\n\nSigned-off-by: Alex Elder \u003celder@newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "bd406145129e8724cc71b65ff2a788dbd4d60c50",
      "tree": "51ba39087c13296256c0af6e5785dc3345a654f8",
      "parents": [
        "f64a93172b97dcfcfa68f595652220653562f605"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: eliminate some needless casts\n\nThis eliminates type casts in some places where they are not\nrequired.\n\nSigned-off-by: Alex Elder \u003celder@newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f64a93172b97dcfcfa68f595652220653562f605",
      "tree": "7553ae9e69417d41467431e43b2b8e0d0694ded1",
      "parents": [
        "a5bc3129a296fd4663c3ef0be5575e82453739dd"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: kill addr_str_lock spinlock; use atomic instead\n\nA spinlock is used to protect a value used for selecting an array\nindex for a string used for formatting a socket address for human\nconsumption.  The index is reset to 0 if it ever reaches the maximum\nindex value.\n\nInstead, use an ever-increasing atomic variable as a sequence\nnumber, and compute the array index by masking off all but the\nsequence number\u0027s lowest bits.  Make the number of entries in the\narray a power of two to allow the use of such a mask (to avoid jumps\nin the index value when the sequence number wraps).\n\nThe length of these strings is somewhat arbitrarily set at 60 bytes.\nThe worst-case length of a string produced is 54 bytes, for an IPv6\naddress that can\u0027t be shortened, e.g.:\n    [1234:5678:9abc:def0:1111:2222:123.234.210.100]:32767\nChange it so we arbitrarily use 64 bytes instead; if nothing else\nit will make the array of these line up better in hex dumps.\n\nRename a few things to reinforce the distinction between the number\nof strings in the array and the length of individual strings.\n\nSigned-off-by: Alex Elder \u003celder@newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a5bc3129a296fd4663c3ef0be5575e82453739dd",
      "tree": "96024ed3b2cb7afef2fe860da26be030ec483e0b",
      "parents": [
        "5766651971e81298732466c9aa462ff47898ba37"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: make use of \"else\" where appropriate\n\nRearrange ceph_tcp_connect() a bit, making use of \"else\" rather than\nre-testing a value with consecutive \"if\" statements.  Don\u0027t record a\nconnection\u0027s socket pointer unless the connect operation is\nsuccessful.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5766651971e81298732466c9aa462ff47898ba37",
      "tree": "147bfd12f3b335d6b2fdb2af162c582a58c33fe5",
      "parents": [
        "80834312a4da1405a9bc788313c67643de6fcb4c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: use a shared zero page rather than one per messenger\n\nEach messenger allocates a page to be used when writing zeroes\nout in the event of error or other abnormal condition.  Instead,\nuse the kernel ZERO_PAGE() for that purpose.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "64486697771cbe219fffcb5c8e2ed9ca4fdf086c",
      "tree": "a623eebb8105ae8e7585c7faaf171729a9cbadbb",
      "parents": [
        "810339ec2fae5cbd0164b8acde7fb65652755864"
      ],
      "author": {
        "name": "Xi Wang",
        "email": "xi.wang@gmail.com",
        "time": "Thu Feb 16 11:55:48 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "libceph: fix overflow check in crush_decode()\n\nThe existing overflow check (n \u003e ULONG_MAX / b) didn\u0027t work, because\nn \u003d ULONG_MAX / b would both bypass the check and still overflow the\nallocation size a + n * b.\n\nThe correct check should be (n \u003e (ULONG_MAX - a) / b).\n\nSigned-off-by: Xi Wang \u003cxi.wang@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "182fac2689b769a96e7fc9defcd560c5cca92b1e",
      "tree": "1944b5db730a3157cd8f3d2e50fa88db263c5114",
      "parents": [
        "c16fa4f2ad19908a47c63d8fa436a1178438c7e7"
      ],
      "author": {
        "name": "Jim Schutt",
        "email": "jaschut@sandia.gov",
        "time": "Wed Feb 29 08:30:58 2012 -0700"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "net/ceph: Only clear SOCK_NOSPACE when there is sufficient space in the socket buffer\n\nThe Ceph messenger would sometimes queue multiple work items to write\ndata to a socket when the socket buffer was full.\n\nFix this problem by making ceph_write_space() use SOCK_NOSPACE in the\nsame way that net/core/stream.c:sk_stream_write_space() does, i.e.,\nclearing it only when sufficient space is available in the socket buffer.\n\nSigned-off-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nReviewed-by: Alex Elder \u003celder@dreamhost.com\u003e\n"
    },
    {
      "commit": "6c073a7ee250118b8be3a2379c96fd7f78382b06",
      "tree": "b398bd9cad821a3543df835e5a0110f270acafb9",
      "parents": [
        "ff05f603c3238010769787f3ba54c48c290ed3e5",
        "d23a4b3fd6ef70b80411b39b8c8bc548a219ce70"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 02 15:47:33 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 02 15:47:33 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  rbd: fix safety of rbd_put_client()\n  rbd: fix a memory leak in rbd_get_client()\n  ceph: create a new session lock to avoid lock inversion\n  ceph: fix length validation in parse_reply_info()\n  ceph: initialize client debugfs outside of monc-\u003emutex\n  ceph: change \"ceph.layout\" xattr to be \"ceph.file.layout\"\n"
    },
    {
      "commit": "ab434b60ab07f8c44246b6fb0cddee436687a09a",
      "tree": "2a680aca91c4906f28cda57093ac76b1e588de5d",
      "parents": [
        "114fc47492e23d93653e4a16664833e98d62a563"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Jan 13 22:22:03 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 02 12:49:01 2012 -0800"
      },
      "message": "ceph: initialize client debugfs outside of monc-\u003emutex\n\nInitializing debufs under monc-\u003emutex introduces a lock dependency for\nsb-\u003es_type-\u003ei_mutex_key, which (combined with several other dependencies)\nleads to an annoying lockdep warning.  There\u0027s no particular reason to do\nthe debugfs setup under this lock, so move it out.\n\nIt used to be the case that our first monmap could come from the OSD; that\nis no longer the case with recent servers, so we will reliably set up the\nclient entry during the initial authentication.\n\nWe don\u0027t have to worry about racing with debugfs teardown by\nceph_debugfs_client_cleanup() because ceph_destroy_client() calls\nceph_msgr_flush() first, which will wait for the message dispatch work\nto complete (and the debugfs init to complete).\n\nFixes: #1940\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "56e925b677c5293e5aac73dac09e93b23259f907",
      "tree": "4faf6862b427a5dfcd150ec8ebd15a77f9295640",
      "parents": [
        "2ff179e650e95c2b21841b21dc46dc2edefd04cd"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 03 12:34:34 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 08:57:03 2012 -0800"
      },
      "message": "libceph: remove useless return value for osd_client __send_request()\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e11b05d31f21f0ea39ea288af667887cd6c21c80",
      "tree": "59768fe6ec9ef15f5e01817d76257f7489df1d5e",
      "parents": [
        "3d8eb7a94e8f25a33362f708974ac7daae9e84f8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Dec 12 09:35:22 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 08:56:57 2012 -0800"
      },
      "message": "crush: fix force for non-root TAKE\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "186482560f660b8dbf77ee43aa6489cb45d342cd",
      "tree": "313156ea6ce1311fba0c569ac0fc51cafaca9d4b",
      "parents": [
        "805a6af8dba5dfdd35ec35dc52ec0122400b2610"
      ],
      "author": {
        "name": "Thomas Meyer",
        "email": "thomas@m3y3r.de",
        "time": "Thu Nov 10 19:45:21 2011 +0100"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 08:56:54 2012 -0800"
      },
      "message": "ceph: Use kmemdup rather than duplicating its implementation\n\nUse kmemdup rather than duplicating its implementation\n\nThe semantic patch that makes this change is available\nin scripts/coccinelle/api/memdup.cocci.\n\nSigned-off-by: Thomas Meyer \u003cthomas@m3y3r.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "653f42f6b6348652c02737924abd6a5a6426e7ee",
      "tree": "466d9d722742f8f9c553226ffce200dc62f494ab",
      "parents": [
        "4dde6dedad736b86bcea3722abb7d8031aeeaa16",
        "9d5a09e659f8414dd3713e2acbfaf8a9e9794aa1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 13 14:59:42 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 13 14:59:42 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  ceph: add missing spin_unlock at ceph_mdsc_build_path()\n  ceph: fix SEEK_CUR, SEEK_SET regression\n  crush: fix mapping calculation when force argument doesn\u0027t exist\n  ceph: use i_ceph_lock instead of i_lock\n  rbd: remove buggy rollback functionality\n  rbd: return an error when an invalid header is read\n  ceph: fix rasize reporting by ceph_show_options\n"
    },
    {
      "commit": "f1932fc1a6d899c754676b1dd8b17de93b052d43",
      "tree": "97c26910626172e22b8495024f9e0025ba9f2343",
      "parents": [
        "be655596b3de5873f994ddbe205751a5ffb4de39"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Dec 07 09:10:26 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Dec 12 09:09:45 2011 -0800"
      },
      "message": "crush: fix mapping calculation when force argument doesn\u0027t exist\n\nIf the force argument isn\u0027t valid, we should continue calculating a\nmapping as if it weren\u0027t specified.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "c292fe4aae5aa5c089633bc40342d27c8275306a",
      "tree": "84c6898327eb35c3c20c1728eaff8ca19094ddeb",
      "parents": [
        "7758c4d6e9371efa04a1cf1b124bbf9cc43e830e",
        "224736d9113ab4a7cf3f05c05377492bd99b4b02"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Nov 21 12:11:13 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Nov 21 12:11:13 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  libceph: Allocate larger oid buffer in request msgs\n  ceph: initialize root dentry\n  ceph: fix iput race when queueing inode work\n"
    },
    {
      "commit": "224736d9113ab4a7cf3f05c05377492bd99b4b02",
      "tree": "0a8fe8063e904eebc2f591607faf8711b78016f8",
      "parents": [
        "774ac21da76f5c3018428725074e27a3fd40b128"
      ],
      "author": {
        "name": "Stratos Psomadakis",
        "email": "psomas@grnet.gr",
        "time": "Thu Nov 10 15:45:37 2011 +0200"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Nov 11 09:50:19 2011 -0800"
      },
      "message": "libceph: Allocate larger oid buffer in request msgs\n\nceph_osd_request struct allocates a 40-byte buffer for object names.\nRBD image names can be up to 96 chars long (100 with the .rbd suffix),\nwhich results in the object name for the image being truncated, and a\nsubsequent map failure.\n\nIncrease the oid buffer in request messages, in order to avoid the\ntruncation.\n\nSigned-off-by: Stratos Psomadakis \u003cpsomas@grnet.gr\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "bc3b2d7fb9b014d75ebb79ba371a763dbab5e8cf",
      "tree": "b0fd4e724bdb1c0a1783616614ae5a9dec1cfa5c",
      "parents": [
        "d9b9384215e17c68d7b6bd05d6fa409e5d4140d7"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Fri Jul 15 11:47:34 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 19:30:30 2011 -0400"
      },
      "message": "net: Add export.h for EXPORT_SYMBOL/THIS_MODULE to non-modules\n\nThese files are non modular, but need to export symbols using\nthe macros now living in export.h -- call out the include so\nthat things won\u0027t break when we remove the implicit presence\nof module.h from everywhere.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "38d6453ca39ecce442628a93e1bb46d70d547512",
      "tree": "7113a921788a83987e2e561e28eefbecd3733d5a",
      "parents": [
        "ee3b56f265cafb28c9a1b58faed4f1dbdf51af86"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Oct 14 13:33:55 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:17 2011 -0700"
      },
      "message": "libceph: force resend of osd requests if we skip an osdmap\n\nIf we skip over one or more map epochs, we need to resend all osd requests\nbecause it is possible they remapped to other servers and then back.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ee3b56f265cafb28c9a1b58faed4f1dbdf51af86",
      "tree": "9eac33d027174267825a008732ce030e2bfcb5a7",
      "parents": [
        "49d9224c047f23089c49a6749609447abd09ee03"
      ],
      "author": {
        "name": "Noah Watkins",
        "email": "noahwatkins@gmail.com",
        "time": "Fri Sep 23 11:48:42 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:16 2011 -0700"
      },
      "message": "ceph: use kernel DNS resolver\n\nChange ceph_parse_ips to take either names given as\nIP addresses or standard hostnames (e.g. localhost).\nThe DNS lookup is done using the dns_resolver facility\nsimilar to its use in AFS, NFS, and CIFS.\n\nThis patch defines CONFIG_CEPH_LIB_USE_DNS_RESOLVER\nthat controls if this feature is on or off.\n\nSigned-off-by: Noah Watkins \u003cnoahwatkins@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "49d9224c047f23089c49a6749609447abd09ee03",
      "tree": "4e0b057f29b006f8143a5350baf6e056f9c75faf",
      "parents": [
        "a35eca958aa1c7d0b5f993db1a3ded45ae16d59b"
      ],
      "author": {
        "name": "Noah Watkins",
        "email": "noahwatkins@gmail.com",
        "time": "Mon Sep 12 14:51:58 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:16 2011 -0700"
      },
      "message": "ceph: fix ceph_monc_init memory leak\n\nfailure clean up does not consider ceph_auth_init.\n\nSigned-off-by: Noah Watkins \u003cnoahwatkins@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f0ed1b7cef1e801ef470efc501f9c663fe10cebd",
      "tree": "93407439807c8c4324da108bcae39809f3584c2c",
      "parents": [
        "b61c27636fffbaf1980e675282777b9467254a40"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 15:05:07 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:16 2011 -0700"
      },
      "message": "libceph: warn on msg allocation failures\n\nAny non-masked msg allocation failure should generate a warning and stack\ntrace to the console.  All of these need to eventually be replaced by\nsafe preallocation or msgpools.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "b61c27636fffbaf1980e675282777b9467254a40",
      "tree": "bd78cfefda4beb7e3de5fe97dd36fed3dbfa91c1",
      "parents": [
        "f6a2f5be07463ef532b9f4e3cb9e42ab9df85832"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 15:03:46 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "libceph: don\u0027t complain on msgpool alloc failures\n\nThe pool allocation failures are masked by the pool; there is no need to\nspam the console about them.  (That\u0027s the whole point of having the pool\nin the first place.)\n\nMark msg allocations whose failure is safely handled as such.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f6a2f5be07463ef532b9f4e3cb9e42ab9df85832",
      "tree": "2e0bc35d64631705fffded5f93f9345ff0f0587f",
      "parents": [
        "6ab00d465a1c8c02c2216f8220727282f3aa50b5"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 09:27:44 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "libceph: always preallocate mon connection\n\nAllocate the mon connection on init.  We already reuse it across\nreconnects.  Remove now unnecessary (and incomplete) NULL checks.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6ab00d465a1c8c02c2216f8220727282f3aa50b5",
      "tree": "b4cc08e1be5ffe0a60d9090d86f7f0d05b1f6e36",
      "parents": [
        "6a8ea4706adb4b4d8f77a8da5f9778b65fbf6f48"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 09:41:59 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "libceph: create messenger with client\n\nThis simplifies the init/shutdown paths, and makes client-\u003emsgr available\nduring the rest of the setup process.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "92bb062fe36132a04c6dc8b3c51c945730b05224",
      "tree": "fbce384d5ac6ced74a009b1b8eb212bc1696112b",
      "parents": [
        "7409b7132ca96d01b373541d788e8c5893bec1f3",
        "8adc8b3d780363d5df0dd6ace10336e3d7e331a1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 29 19:58:58 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 29 19:58:58 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://github.com/NewDreamNetwork/ceph-client\n\n* \u0027for-linus\u0027 of git://github.com/NewDreamNetwork/ceph-client:\n  libceph: fix pg_temp mapping update\n  libceph: fix pg_temp mapping calculation\n  libceph: fix linger request requeuing\n  libceph: fix parse options memory leak\n  libceph: initialize ack_stamp to avoid unnecessary connection reset\n"
    },
    {
      "commit": "8adc8b3d780363d5df0dd6ace10336e3d7e331a1",
      "tree": "18ea04f84f3138561f5a5d09699271b213827f3e",
      "parents": [
        "782e182e91e97f529a1edb30fdece9f1bef90ecc"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Sep 28 10:11:04 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Sep 28 10:13:35 2011 -0700"
      },
      "message": "libceph: fix pg_temp mapping update\n\nThe incremental map updates have a record for each pg_temp mapping that is\nto be add/updated (len \u003e 0) or removed (len \u003d\u003d 0).  The old code was\nwritten as if the updates were a complete enumeration; that was just wrong.\nUpdate the code to remove 0-length entries and drop the rbtree traversal.\n\nThis avoids misdirected (and hung) requests that manifest as server\nerrors like\n\n[WRN] client4104 10.0.1.219:0/275025290 misdirected client4104.1:129 0.1 to osd0 not [1,0] in e11/11\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "782e182e91e97f529a1edb30fdece9f1bef90ecc",
      "tree": "1a7834111ce59e6cc9136e36e9ad846b0250d5d2",
      "parents": [
        "935b639a049053d0ccbcf7422f2f9cd221642f58"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Sep 28 10:08:27 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Sep 28 10:13:31 2011 -0700"
      },
      "message": "libceph: fix pg_temp mapping calculation\n\nWe need to apply the modulo pg_num calculation before looking up a pgid in\nthe pg_temp mapping rbtree.  This fixes pg_temp mappings, and fixes\n(some) misdirected requests that result in messages like\n\n[WRN] client4104 10.0.1.219:0/275025290 misdirected client4104.1:129 0.1 to osd0 not [1,0] in e11/11\n\non the server and stall make the client block without getting a reply (at\nleast until the pg_temp mapping goes way, but that can take a long long\ntime).\n\nReorder calc_pg_raw() a bit to make more sense.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "935b639a049053d0ccbcf7422f2f9cd221642f58",
      "tree": "cee4fa3f82256314393b26bd5857d9564513ee04",
      "parents": [
        "1cad78932a0d139dceff78e68808e160a224d57a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Sep 16 11:13:17 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Sep 16 11:13:17 2011 -0700"
      },
      "message": "libceph: fix linger request requeuing\n\nThe r_req_lru_item list node moves between several lists, and that cycle\nis not directly related (and does not begin) with __register_request().\nInitialize it in the request constructor, not __register_request(). This\nfixes later badness (below) when OSDs restart underneath an rbd mount.\n\nCrashes we\u0027ve seen due to this include:\n\n[  213.974288] kernel BUG at net/ceph/messenger.c:2193!\n\nand\n\n[  144.035274] BUG: unable to handle kernel NULL pointer dereference at 0000000000000048\n[  144.035278] IP: [\u003cffffffffa036c053\u003e] con_work+0x1463/0x2ce0 [libceph]\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "1cad78932a0d139dceff78e68808e160a224d57a",
      "tree": "04e9f05e82dfdb79b3b8de10962d4ae0aba06e32",
      "parents": [
        "c0d5f9db1c7d1b8a9e2f217706e8ea233bac2754"
      ],
      "author": {
        "name": "Noah Watkins",
        "email": "noahwatkins@gmail.com",
        "time": "Mon Sep 12 14:51:53 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Sep 16 09:19:53 2011 -0700"
      },
      "message": "libceph: fix parse options memory leak\n\nceph_destroy_options does not free opt-\u003emon_addr that\nis allocated in ceph_parse_options.\n\nSigned-off-by: Noah Watkins \u003cnoahwatkins@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "c0d5f9db1c7d1b8a9e2f217706e8ea233bac2754",
      "tree": "1962a9bbd284e32a70486b8cc5a0babd2c7dc131",
      "parents": [
        "aca420bc51f48b0701963ba3a6234442a0cabebd"
      ],
      "author": {
        "name": "Jim Schutt",
        "email": "jaschut@sandia.gov",
        "time": "Fri Sep 16 08:27:31 2011 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Sep 16 09:16:22 2011 -0700"
      },
      "message": "libceph: initialize ack_stamp to avoid unnecessary connection reset\n\nCommit 4cf9d544631c recorded when an outgoing ceph message was ACKed,\nin order to avoid unnecessary connection resets when an OSD is busy.\n\nHowever, ack_stamp is uninitialized, so there is a window between\nwhen the message is sent and when it is ACKed in which handle_timeout()\ninterprets the unitialized value as an expired timeout, and resets\nthe connection unnecessarily.\n\nClose the window by initializing ack_stamp.\n\nSigned-off-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0d20fbbe82dadc43f50a4ca5346e962de23cf950",
      "tree": "b3d63936aff013d6baa57c2cd9aaa3bade22d91c",
      "parents": [
        "0ec26fd0698285b31248e34bf1abb022c00f23d6",
        "aca420bc51f48b0701963ba3a6234442a0cabebd"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 09 15:48:34 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 09 15:48:34 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://ceph.newdream.net/git/ceph-client\n\n* \u0027for-linus\u0027 of git://ceph.newdream.net/git/ceph-client:\n  libceph: fix leak of osd structs during shutdown\n  ceph: fix memory leak\n  ceph: fix encoding of ino only (not relative) paths\n  libceph: fix msgpool\n"
    },
    {
      "commit": "aca420bc51f48b0701963ba3a6234442a0cabebd",
      "tree": "7c9f19bd0f91d012253bed3579ec1fbdfb5ec6b1",
      "parents": [
        "259a187ade45056fd44856654f78aa9e9f0f7c75"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Aug 31 14:45:53 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Aug 31 15:22:46 2011 -0700"
      },
      "message": "libceph: fix leak of osd structs during shutdown\n\nWe want to remove all OSDs, not just those on the idle LRU.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5185352c163a72cf969b2fbbfb89801b398896fd",
      "tree": "1b90d4b7ec1b3b117a43c3c6980c9140bb4b2097",
      "parents": [
        "d79698da32b317e96216236f265a9b72b78ae568"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 14:48:11 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 15:26:17 2011 -0700"
      },
      "message": "libceph: fix msgpool\n\nThere were several problems here:\n\n 1- we weren\u0027t tagging allocations with the pool, so they were never\n    returned to the pool.\n 2- msgpool_put didn\u0027t add back to the mempool, even it were called.\n 3- msgpool_release didn\u0027t clear the pool pointer, so it would have looped\n    had #1 not been broken.\n\nThese may or may not have been responsible for #1136 or #1381 (BUG due to\nnon-empty mempool on umount).  I can\u0027t seem to trigger the crash now using\nthe method I was using before.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ba5b56cb3e3d2cab73d4fee9a022bb69462a8cd9",
      "tree": "eda7ea059a41ae5d68e2ad5a36a87069187ef22a",
      "parents": [
        "243dd2809a5edd2e0e3e62781083aa44049af37d",
        "d79698da32b317e96216236f265a9b72b78ae568"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 13:38:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 13:38:50 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (23 commits)\n  ceph: document unlocked d_parent accesses\n  ceph: explicitly reference rename old_dentry parent dir in request\n  ceph: document locking for ceph_set_dentry_offset\n  ceph: avoid d_parent in ceph_dentry_hash; fix ceph_encode_fh() hashing bug\n  ceph: protect d_parent access in ceph_d_revalidate\n  ceph: protect access to d_parent\n  ceph: handle racing calls to ceph_init_dentry\n  ceph: set dir complete frag after adding capability\n  rbd: set blk_queue request sizes to object size\n  ceph: set up readahead size when rsize is not passed\n  rbd: cancel watch request when releasing the device\n  ceph: ignore lease mask\n  ceph: fix ceph_lookup_open intent usage\n  ceph: only link open operations to directory unsafe list if O_CREAT|O_TRUNC\n  ceph: fix bad parent_inode calc in ceph_lookup_open\n  ceph: avoid carrying Fw cap during write into page cache\n  libceph: don\u0027t time out osd requests that haven\u0027t been received\n  ceph: report f_bfree based on kb_avail rather than diffing.\n  ceph: only queue capsnap if caps are dirty\n  ceph: fix snap writeback when racing with writes\n  ...\n"
    },
    {
      "commit": "4cf9d544631c92809cb94ea680c71df56e9437aa",
      "tree": "419e162dfb25e69ef1a89c56a318ad322cf21053",
      "parents": [
        "8f04d42276048b3baff5a5d8fa769f433c62b63e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:24 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:24 2011 -0700"
      },
      "message": "libceph: don\u0027t time out osd requests that haven\u0027t been received\n\nKeep track of when an outgoing message is ACKed (i.e., the server fully\nreceived it and, presumably, queued it for processing).  Time out OSD\nrequests only if it\u0027s been too long since they\u0027ve been received.\n\nThis prevents timeouts and connection thrashing when the OSDs are simply\nbusy and are throttling the requests they read off the network.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "033b1142f4bd44a116d1356fe4a0510437ceddf9",
      "tree": "d2a971a7dc9f3a1af8035e38419c4c4ad8c22632",
      "parents": [
        "f5caadbb3d8fc0b71533e880c684b2230bdb76ac",
        "e6625fa48e6580a74b7e700efd7e6463e282810b"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jul 21 13:38:42 2011 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jul 21 13:38:42 2011 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6\n\nConflicts:\n\tnet/bluetooth/l2cap_core.c\n"
    },
    {
      "commit": "38be7a79f7c99dd01425f19ef6cf744878b6a94b",
      "tree": "5f31b24e4ecca2564ed01b212e3193ba7b2ed4b6",
      "parents": [
        "d7f124f129a6aea99938e0d4172c741b56fefeda"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 19 11:25:04 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 19 11:25:04 2011 -0700"
      },
      "message": "ceph: fix file mode calculation\n\nopen(2) must always include one of O_RDONLY, O_WRONLY, or O_RDWR.  No need\nfor any O_APPEND special case.\n\nPassing O_WRONLY|O_RDWR is undefined according to the man page, but the\nLinux VFS interprets this as O_RDWR, so we\u0027ll do the same.\n\nThis fixes open(2) with flags O_RDWR|O_APPEND, which was incorrectly being\ntranslated to readonly.\n\nReported-by: Fyodor Ustinov \u003cufm@ufm.su\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6a7ebdf2fd15417e87b4fd02ff411aeaca34da5f",
      "tree": "86b15d8cd3e25c97b348b5a61bdb16c02726a480",
      "parents": [
        "f6b72b6217f8c24f2a54988e58af858b4e66024d",
        "51414d41084496aaefd06d7f19eb8206e8bfac2d"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jul 14 07:56:40 2011 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jul 14 07:56:40 2011 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6\n\nConflicts:\n\tnet/bluetooth/l2cap_core.c\n"
    },
    {
      "commit": "9f6ec8d697c08963d83880ccd35c13c5ace716ea",
      "tree": "ad8d93cf6fcdd09b86ade09f5fcbbc66cdb1cca2",
      "parents": [
        "4aa3a715551c93eda32d79bd52042ce500bd5383",
        "56299378726d5f2ba8d3c8cbbd13cb280ba45e4f"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jun 20 22:29:08 2011 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jun 20 22:29:08 2011 -0700"
      },
      "message": "Merge branch \u0027master\u0027 of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6\n\nConflicts:\n\tdrivers/net/wireless/iwlwifi/iwl-agn-rxon.c\n\tdrivers/net/wireless/rtlwifi/pci.c\n\tnet/netfilter/ipvs/ip_vs_core.c\n"
    },
    {
      "commit": "ea110733874d5176cb56dcf612a629ffac09dbf0",
      "tree": "d079bb9990ecf7dadc326b62605fb4de1f6fad4f",
      "parents": [
        "3c8def9776c3d4636291432522ea312f7a44be95"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Mon Jun 13 16:21:26 2011 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@conan.davemloft.net",
        "time": "Thu Jun 16 23:19:27 2011 -0400"
      },
      "message": "net: Remove casts of void *\n\nUnnecessary casts of void * clutter the code.\n\nThese are the remainder casts after several specific\npatches to remove netdev_priv and dev_priv.\n\nDone via coccinelle script:\n\n$ cat cast_void_pointer.cocci\n@@\ntype T;\nT *pt;\nvoid *pv;\n@@\n\n- pt \u003d (T *)pv;\n+ pt \u003d pv;\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nAcked-by: Paul Moore \u003cpaul.moore@hp.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@conan.davemloft.net\u003e\n"
    },
    {
      "commit": "9bb0ce2b0b734f3325ea5cd6b351856eeac94f78",
      "tree": "afd4c5d343ddfabae8c3b78bff342f6ba6037055",
      "parents": [
        "773e9b442693b250aa6c452cb0cf5a9343f51cef"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Jun 13 16:20:18 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Jun 13 16:26:17 2011 -0700"
      },
      "message": "libceph: fix page calculation for non-page-aligned io\n\nSet the page count correctly for non-page-aligned IO.  We were already\ndoing this correctly for alignment, but not the page count.  Fixes\nDIRECT_IO writes from unaligned pages.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "2584547230ae49b8de91ab3bb5e0a81898905b45",
      "tree": "1f00818bc7075e0898998d4e05c0cd08dd3d85d0",
      "parents": [
        "70b666c3b4cb2b96098d80e6f515e4bc6d37db5a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Jun 03 09:37:09 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jun 07 21:34:13 2011 -0700"
      },
      "message": "ceph: fix sync vs canceled write\n\nIf we cancel a write, trigger the safe completions to prevent a sync from\nblocking indefinitely in ceph_osdc_sync().\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "cd634fb6eec72ef8e6dd677546b8d0ffdd2501eb",
      "tree": "7f0213063830d24d77a1ad0a6a9abfa4f83a5d7d",
      "parents": [
        "7662d8ff57d2b00ce8f7fe0b60a85efbb2c05652"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 09:29:18 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 11:52:11 2011 -0700"
      },
      "message": "libceph: subscribe to osdmap when cluster is full\n\nWhen the cluster is marked full, subscribe to subsequent map updates to\nensure we find out promptly when it is no longer full.  This will prevent\nus from spewing ENOSPC for (much) longer than necessary.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "7662d8ff57d2b00ce8f7fe0b60a85efbb2c05652",
      "tree": "c87fd023ab2d4749ea32619034bcc813cba9504a",
      "parents": [
        "9db4b3e32778400555d5cc6fb61d4058902d37f7"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 03 12:52:05 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 11:52:09 2011 -0700"
      },
      "message": "libceph: handle new osdmap down/state change encoding\n\nOld incrementals encode a 0 value (nearly always) when an osd goes down.\nChange that to allow any state bit(s) to be flipped.  Special case 0 to\nmean flip the CEPH_OSD_UP bit to mimic the old behavior.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "9d6fcb081a4770c3772c51c59c7251c22716d7bb",
      "tree": "8827d90aff9d7f463cb429aff1ecd22dde6a77a6",
      "parents": [
        "6b4a3b517a767c483d16a200730b2967e0e23b83"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 15:48:16 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:25:05 2011 -0700"
      },
      "message": "ceph: check return value for start_request in writepages\n\nSince we pass the nofail arg, we should never get an error; BUG if we do.\n(And fix the function to not return an error if __map_request fails.)\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a2a79609c044d3ddb540671d5029a41c90c57251",
      "tree": "641da035ab11341e8e7e08fee7bf2fde8d6e0214",
      "parents": [
        "04177882265bc5014300a631e7384f8fe6b6aa0f"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 15:34:24 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:25:05 2011 -0700"
      },
      "message": "libceph: add missing breaks in addr_set_port\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "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": "31456665a02148353a83fec84d3182700e356588",
      "tree": "406b6eada9dfaa7fdf6daf121d0c0bab11ffbdf2",
      "parents": [
        "3540303f87115cbdae6ed2cab44ce6a7676d48d3"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 15:18:43 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:25:03 2011 -0700"
      },
      "message": "libceph: fix osdmap timestamp assignment\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": "2dab036b8c349d747f447ac98c8eb40c769727a8",
      "tree": "ab502f1a05ae17f5f6cbbd7bdb2731a051d15580",
      "parents": [
        "ae598083015e22d1802617c18d3408971b1bddc0"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 14:29:51 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:25:02 2011 -0700"
      },
      "message": "libceph: use snprintf for formatting object name\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": "4ad12621e442b7a072e81270808f617cb65c5672",
      "tree": "eecdd1d51f525b9b07c70f8fbcf08c9ede3b8f79",
      "parents": [
        "8c71897be2ddfd84969412635ca42fa9e137f7b6"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 03 09:23:36 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 03 09:28:13 2011 -0700"
      },
      "message": "libceph: fix ceph_osdc_alloc_request error checks\n\nceph_osdc_alloc_request returns NULL on failure.\n\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": "e6d28318344535331d9473548b210dd267fe7b7e",
      "tree": "90a4c7dab77900ec531b73151503b4b2e00132d1",
      "parents": [
        "e27e6151b154ff6e5e8162efa291bc60196d29ea",
        "77f38e0eeac290827f41fd2215ab82546b8f73b8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 14 19:02:55 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 14 19:02:55 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  libceph: fix linger request requeueing\n"
    },
    {
      "commit": "42933bac11e811f02200c944d8562a15f8ec4ff0",
      "tree": "fcdd9afe56eb0e746565ddd1f92f22d36678b843",
      "parents": [
        "2b9accbee563f535046ff2cd382d0acaa92e130c",
        "25985edcedea6396277003854657b5f3cb31a628"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 07 11:14:49 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6\n\n* \u0027for-linus2\u0027 of git://git.profusion.mobi/users/lucas/linux-2.6:\n  Fix common misspellings\n"
    },
    {
      "commit": "77f38e0eeac290827f41fd2215ab82546b8f73b8",
      "tree": "f3fe7b7989188f39c7618848ac30754c41c6eee0",
      "parents": [
        "4b2a58abd1e17c0ee53c8dded879e015917cca67"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Apr 06 09:09:16 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Apr 06 09:09:16 2011 -0700"
      },
      "message": "libceph: fix linger request requeueing\n\nFix the request transition from linger -\u003e normal request.  The key is to\npreserve r_osd and requeue on the same OSD.  Reregister as a normal request,\nadd the request to the proper queues, then unregister the linger.  Fix the\nunregister helper to avoid clearing r_osd (and also simplify the parallel\ncheck in __unregister_request()).\n\nReported-by: Henry Chang \u003chenry.cy.chang@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "4b2a58abd1e17c0ee53c8dded879e015917cca67",
      "tree": "585a02b8e3e36f7e6069d43000355e75aba097d3",
      "parents": [
        "e2c3d29b4295c3eec18294bc34f0c99a7b9ae413"
      ],
      "author": {
        "name": "Tommi Virtanen",
        "email": "tommi.virtanen@dreamhost.com",
        "time": "Mon Mar 28 14:59:38 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 29 12:11:24 2011 -0700"
      },
      "message": "libceph: Create a new key type \"ceph\".\n\nThis allows us to use existence of the key type as a feature test,\nfrom userspace.\n\nSigned-off-by: Tommi Virtanen \u003ctommi.virtanen@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e2c3d29b4295c3eec18294bc34f0c99a7b9ae413",
      "tree": "29fbffeeed7e2774a4f87883ae01798079d85ed2",
      "parents": [
        "8323c3aa74cd92465350294567142d12ffdcc963"
      ],
      "author": {
        "name": "Tommi Virtanen",
        "email": "tommi.virtanen@dreamhost.com",
        "time": "Fri Mar 25 16:40:48 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 29 12:11:19 2011 -0700"
      },
      "message": "libceph: Get secret from the kernel keys api when mounting with key\u003dNAME.\n\nSigned-off-by: Tommi Virtanen \u003ctommi.virtanen@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "8323c3aa74cd92465350294567142d12ffdcc963",
      "tree": "052e7374393994eea8d534f98ee1bc7acea4c2d9",
      "parents": [
        "fbdb9190482fd83a3eb20cdeb0da454759f479d7"
      ],
      "author": {
        "name": "Tommi Virtanen",
        "email": "tommi.virtanen@dreamhost.com",
        "time": "Fri Mar 25 16:32:57 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 29 12:11:16 2011 -0700"
      },
      "message": "ceph: Move secret key parsing earlier.\n\nThis makes the base64 logic be contained in mount option parsing,\nand prepares us for replacing the homebew key management with the\nkernel key retention service.\n\nSigned-off-by: Tommi Virtanen \u003ctommi.virtanen@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "fbdb9190482fd83a3eb20cdeb0da454759f479d7",
      "tree": "bf83dcd6ea13c9a1feedb2a8f79744de93f9fecd",
      "parents": [
        "234af26ff123dfb2aa48772124721b1354c8e0a5"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 29 12:11:06 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 29 12:11:06 2011 -0700"
      },
      "message": "libceph: fix null dereference when unregistering linger requests\n\nWe should only clear r_osd if we are neither registered as a linger or a\nregular request.  We may unregister as a linger while still registered as\na regular request (e.g., in reset_osd).  Incorrectly clearing r_osd there\nleads to a null pointer dereference in __send_request.\n\nAlso simplify the parallel check in __unregister_request() where we just\nremoved r_osd_item and know it\u0027s empty.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "234af26ff123dfb2aa48772124721b1354c8e0a5",
      "tree": "9dfaaeb25a5b1265269796ebc48cab93d64fc1f2",
      "parents": [
        "6b0ae4097c1ebad98c7b33f83b4ca7e93890ed12"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Tue Mar 29 06:25:59 2011 +0300"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 29 08:59:54 2011 -0700"
      },
      "message": "ceph: unlock on error in ceph_osdc_start_request()\n\nThere was a missing unlock on the error path if __map_request() failed.\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6b0ae4097c1ebad98c7b33f83b4ca7e93890ed12",
      "tree": "27db559925e8e3f08522d83f4a6f3b7d32a9f2fa",
      "parents": [
        "ef550f6f4f6c9345a27ec85d98f4f7de1adce79c"
      ],
      "author": {
        "name": "Mariusz Kozlowski",
        "email": "mk@lab.zgora.pl",
        "time": "Sat Mar 26 19:29:34 2011 +0100"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Mar 26 13:41:20 2011 -0700"
      },
      "message": "ceph: fix possible NULL pointer dereference\n\nThis patch fixes \u0027event_work\u0027 dereference before it is checked for NULL.\n\nSigned-off-by: Mariusz Kozlowski \u003cmk@lab.zgora.pl\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ef550f6f4f6c9345a27ec85d98f4f7de1adce79c",
      "tree": "dafd71f3e7fe46ed685b5ab3fd62c2bb7d3cb679",
      "parents": [
        "59c2be1e4d42c0d4949cecdeef3f37070a1fbc13"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 25 13:27:48 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 25 13:27:48 2011 -0700"
      },
      "message": "ceph: flush msgr_wq during mds_client shutdown\n\nThe release method for mds connections uses a backpointer to the\nmds_client, so we need to flush the workqueue of any pending work (and\nceph_connection references) prior to freeing the mds_client.  This fixes\nan oops easily triggered under UML by\n\n while true ; do mount ... ; umount ... ; done\n\nAlso fix an outdated comment: the flush in ceph_destroy_client only flushes\nOSD connections out.  This bug is basically an artifact of the ceph -\u003e\nceph+libceph conversion.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a40c4f10e3fb96030358e49abd010c1f08446fa3",
      "tree": "1aa1f6ca618cd021d944f7da7caeb5b182beaee4",
      "parents": [
        "55b00bae111030bd0dfcc898a920e54725aed1bf"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Mon Mar 21 15:07:16 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 22 11:33:55 2011 -0700"
      },
      "message": "libceph: add lingering request and watch/notify event framework\n\nLingering requests are requests that are sent to the OSD normally but\ntracked also after we get a successful request.  This keeps the OSD\nconnection open and resends the original request if the object moves to\nanother OSD.  The OSD can then send notification messages back to us\nif another client initiates a notify.\n\nThis framework will be used by RBD so that the client gets notification\nwhen a snapshot is created by another node or tool.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6f6c7006755b667f9f6c1f3b6f08cd65f75cc471",
      "tree": "233e96acdc3b627c97267992368ae1cb6cd66a5f",
      "parents": [
        "09adc80c611bb8902daa8ccfe34dbbc009d6befe"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Jan 17 20:34:08 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 21 12:24:19 2011 -0700"
      },
      "message": "libceph: fix osd request queuing on osdmap updates\n\nIf we send a request to osd A, and the request\u0027s pg remaps to osd B and\nthen back to A in quick succession, we need to resend the request to A. The\nold code was only calling kick_requests after processing all incremental\nmaps in a message, so it was very possible to not resend a request that\nneeded to be resent.  This would make the osd eventually time out (at least\nwith the current default of osd timeouts enabled).\n\nThe correct approach is to scan requests on every map incremental.  This\npatch refactors the kick code in a few ways:\n - all requests are either on req_lru (in flight), req_unsent (ready to\n   send), or req_notarget (currently map to no up osd)\n - mapping always done by map_request (previous map_osds)\n - if the mapping changes, we requeue.  requests are resent only after all\n   map incrementals are processed.\n - some osd reset code is moved out of kick_requests into a separate\n   function\n - the \"kick this osd\" functionality is moved to kick_osd_requests, as it\n   is unrelated to scanning for request-\u003epg-\u003eosd mapping changes\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "b09734b1f4abd86e046777f0f268215b4ef1b523",
      "tree": "991e7a2d61dc8c950dbbe6082cbb10dfc3786e75",
      "parents": [
        "521cb40b0c44418a4fd36dc633f575813d59a43d"
      ],
      "author": {
        "name": "Tommi Virtanen",
        "email": "tommi.virtanen@dreamhost.com",
        "time": "Wed Feb 02 11:39:32 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 15 09:14:02 2011 -0700"
      },
      "message": "libceph: Fix base64-decoding when input ends in newline.\n\nIt used to return -EINVAL because it thought the end was not aligned\nto 4 bytes.\n\nClean up superfluous src \u003c end test in if, the while itself guarantees\nthat.\n\nSigned-off-by: Tommi Virtanen \u003ctommi.virtanen@dreamhost.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": "38815b780285a4957852c5c9dbe94991c0b26c56",
      "tree": "032d882544ef73d2e99208de7a6e6340df3d31ea",
      "parents": [
        "16a8b70a5a757db513f036bbcc73309f6c507d81"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Mar 02 16:55:21 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 03 13:47:39 2011 -0800"
      },
      "message": "libceph: fix handling of short returns from get_user_pages\n\nget_user_pages() can return fewer pages than we ask for.  We were returning\na bogus pointer/error code in that case.  Instead, loop until we get all\nthe pages we want or get an error we can return to the caller.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "8bd89ca22010847e85de37b77d9f19f16b1962ad",
      "tree": "0bcee2ae6a85443177a6d95ed960301e0f4c9d57",
      "parents": [
        "b08b69a110bd981909c248f89997dcdcdfd5a39c",
        "97d79b403ef03f729883246208ef5d8a2ebc4d68"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Feb 21 15:01:38 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Feb 21 15:01:38 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  ceph: keep reference to parent inode on ceph_dentry\n  ceph: queue cap_snaps once per realm\n  libceph: fix socket write error handling\n  libceph: fix socket read error handling\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": "a1703154200c390ab03c10224c586e815d3e31e8",
      "tree": "df90865eed3cfdf7af8664b5453a90e09d17480a",
      "parents": [
        "67b5ad9a63caa2ce56ddd2b22b802dae00d72c13",
        "766fc43973b16f9becb6b7402b3e052dbb84adee"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:25:24 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:25:24 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  rbd: fix cleanup when trying to mount inexistent image\n  net/ceph: make ceph_msgr_wq non-reentrant\n  ceph: fsc-\u003e*_wq\u0027s aren\u0027t used in memory reclaim path\n  ceph: Always free allocated memory in osdmap_decode()\n  ceph: Makefile: Remove unnessary code\n  ceph: associate requests with opening sessions\n  ceph: drop redundant r_mds field\n  ceph: implement DIRLAYOUTHASH feature to get dir layout from MDS\n  ceph: add dir_layout to inode\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": "b0aee3516d84c05240065a53f238ba7a718f56b9",
      "tree": "13877be944725cd055782289fe0260ac69cb87f8",
      "parents": [
        "582c86e69045f37da8be445c265f72a7a73b18c6"
      ],
      "author": {
        "name": "Jesper Juhl",
        "email": "jj@chaosbits.net",
        "time": "Fri Dec 24 23:01:12 2010 +0100"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Jan 12 15:15:14 2011 -0800"
      },
      "message": "ceph: Always free allocated memory in osdmap_decode()\n\nAlways free memory allocated to \u0027pi\u0027 in\nnet/ceph/osdmap.c::osdmap_decode().\n\nSigned-off-by: Jesper Juhl \u003cjj@chaosbits.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6c0f3af72cb1622a66962a1180c36ef8c41be8e2",
      "tree": "66e415bf31ea31a3e9360c0ce624fd20b6050c89",
      "parents": [
        "3c0eee3fe6a3a1c745379547c7e7c904aa64f6d5"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Nov 16 11:14:34 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Jan 12 15:15:12 2011 -0800"
      },
      "message": "ceph: add dir_layout to inode\n\nAdd a ceph_dir_layout to the inode, and calculate dentry hash values based\non the parent directory\u0027s specified dir_hash function.  This is needed\nbecause the old default Linux dcache hash function is extremely week and\nleads to a poor distribution of files among dir fragments.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "17f7f4d9fcce8f1b75b5f735569309dee7665968",
      "tree": "14d7e49ca0053a0fcab3c33b5023bf3f90c5c08a",
      "parents": [
        "041110a439e21cd40709ead4ffbfa8034619ad77",
        "d7c1255a3a21e98bdc64df8ccf005a174d7e6289"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Dec 26 22:37:05 2010 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Dec 26 22:37:05 2010 -0800"
      },
      "message": "Merge branch \u0027master\u0027 of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6\n\nConflicts:\n\tnet/ipv4/fib_frontend.c\n"
    }
  ],
  "next": "9d5004fcf6e4e8caa9efbc25c9f85059b165329c"
}
