)]}'
{
  "log": [
    {
      "commit": "8b8cf8917f9b5d74e04f281272d8719ce335a497",
      "tree": "88ea0cf5716642ebfe06e4235252a55b584914a7",
      "parents": [
        "61c5d6bf7074ee32d014dcdf7698dc8c59eb712d"
      ],
      "author": {
        "name": "Josh Durgin",
        "email": "josh.durgin@inktank.com",
        "time": "Fri Jun 28 13:13:16 2013 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Jul 09 12:18:06 2013 -0700"
      },
      "message": "libceph: fix invalid unsigned-\u003esigned conversion for timespec encoding\n\n__kernel_time_t is a long, which cannot hold a U32_MAX on 32-bit\narchitectures.  Just drop this check as it has limited value.\n\nThis fixes a crash like:\n\n[  957.905812] kernel BUG at /srv/autobuild-ceph/gitbuilder.git/build/include/linux/ceph/decode.h:164!\n[  957.914849] Internal error: Oops - BUG: 0 [#1] SMP ARM\n[  957.919978] Modules linked in: rbd libceph libcrc32c ipmi_devintf ipmi_si ipmi_msghandler nfsd nfs_acl auth_rpcgss nfs fscache lockd sunrpc\n[  957.932547] CPU: 1    Tainted: G        W     (3.9.0-ceph-19bb6a83-highbank #1)\n[  957.939881] PC is at ceph_osdc_build_request+0x8c/0x4f8 [libceph]\n[  957.945967] LR is at 0xec520904\n[  957.949103] pc : [\u003cbf13e76c\u003e]    lr : [\u003cec520904\u003e]    psr: 20000153\n[  957.949103] sp : ec753df8  ip : 00000001  fp : ec53e100\n[  957.960571] r10: ebef25c0  r9 : ec5fa400  r8 : ecbcc000\n[  957.965788] r7 : 00000000  r6 : 00000000  r5 : ffffffff  r4 : 00000020\n[  957.972307] r3 : 51cc8143  r2 : ec520900  r1 : ec753e58  r0 : ec520908\n[  957.978827] Flags: nzCv  IRQs on  FIQs off  Mode SVC_32  ISA ARM  Segment user\n[  957.986039] Control: 10c5387d  Table: 2c59c04a  DAC: 00000015\n[  957.991777] Process rbd (pid: 2138, stack limit \u003d 0xec752238)\n[  957.997514] Stack: (0xec753df8 to 0xec754000)\n[  958.001864] 3de0:                                                       00000001 00000001\n[  958.010032] 3e00: 00000001 bf139744 ecbcc000 ec55a0a0 00000024 00000000 ebef25c0 fffffffe\n[  958.018204] 3e20: ffffffff 00000000 00000000 00000001 ec5fa400 ebef25c0 ec53e100 bf166b68\n[  958.026377] 3e40: 00000000 0000220f fffffffe ffffffff ec753e58 bf13ff24 51cc8143 05b25ed2\n[  958.034548] 3e60: 00000001 00000000 00000000 bf1688d4 00000001 00000000 00000000 00000000\n[  958.042720] 3e80: 00000001 00000060 ec5fa400 ed53d200 ed439600 ed439300 00000001 00000060\n[  958.050888] 3ea0: ec5fa400 ed53d200 00000000 bf16a320 00000000 ec53e100 00000040 ec753eb8\n[  958.059059] 3ec0: ec51df00 ed53d7c0 ed53d200 ed53d7c0 00000000 ed53d7c0 ec5fa400 bf16ed70\n[  958.067230] 3ee0: 00000000 00000060 00000002 ed53d200 00000000 bf16acf4 ed53d7c0 ec752000\n[  958.075402] 3f00: ed980e50 e954f5d8 00000000 00000060 ed53d240 ed53d258 ec753f80 c04f44a8\n[  958.083574] 3f20: edb7910c ec664700 01ade920 c02e4c44 00000060 c016b3dc ec51de40 01adfb84\n[  958.091745] 3f40: 00000060 ec752000 ec753f80 ec752000 00000060 c0108444 00000007 ec51de48\n[  958.099914] 3f60: ed0eb8c0 00000000 00000000 ec51de40 01adfb84 00000001 00000060 c0108858\n[  958.108085] 3f80: 00000000 00000000 51cc8143 00000060 01adfb84 00000007 00000004 c000dd68\n[  958.116257] 3fa0: 00000000 c000dbc0 00000060 01adfb84 00000007 01adfb84 00000060 01adfb80\n[  958.124429] 3fc0: 00000060 01adfb84 00000007 00000004 beded1a8 00000000 01adf2f0 01ade920\n[  958.132599] 3fe0: 00000000 beded180 b6811324 b6811334 800f0010 00000007 2e7f5821 2e7f5c21\n[  958.140815] [\u003cbf13e76c\u003e] (ceph_osdc_build_request+0x8c/0x4f8 [libceph]) from [\u003cbf166b68\u003e] (rbd_osd_req_format_write+0x50/0x7c [rbd])\n[  958.152739] [\u003cbf166b68\u003e] (rbd_osd_req_format_write+0x50/0x7c [rbd]) from [\u003cbf1688d4\u003e] (rbd_dev_header_watch_sync+0xe0/0x204 [rbd])\n[  958.164486] [\u003cbf1688d4\u003e] (rbd_dev_header_watch_sync+0xe0/0x204 [rbd]) from [\u003cbf16a320\u003e] (rbd_dev_image_probe+0x23c/0x850 [rbd])\n[  958.175967] [\u003cbf16a320\u003e] (rbd_dev_image_probe+0x23c/0x850 [rbd]) from [\u003cbf16acf4\u003e] (rbd_add+0x3c0/0x918 [rbd])\n[  958.185975] [\u003cbf16acf4\u003e] (rbd_add+0x3c0/0x918 [rbd]) from [\u003cc02e4c44\u003e] (bus_attr_store+0x20/0x2c)\n[  958.194850] [\u003cc02e4c44\u003e] (bus_attr_store+0x20/0x2c) from [\u003cc016b3dc\u003e] (sysfs_write_file+0x168/0x198)\n[  958.203984] [\u003cc016b3dc\u003e] (sysfs_write_file+0x168/0x198) from [\u003cc0108444\u003e] (vfs_write+0x9c/0x170)\n[  958.212768] [\u003cc0108444\u003e] (vfs_write+0x9c/0x170) from [\u003cc0108858\u003e] (sys_write+0x3c/0x70)\n[  958.220768] [\u003cc0108858\u003e] (sys_write+0x3c/0x70) from [\u003cc000dbc0\u003e] (ret_fast_syscall+0x0/0x30)\n[  958.229199] Code: e59d1058 e5913000 e3530000 ba000114 (e7f001f2)\n\nCC: stable@vger.kernel.org  # 3.4+\nSigned-off-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "eb845ff13a44477f8a411baedbf11d678b9daf0a",
      "tree": "409c6c763ff1e03b3b9c2a166444d635317bdf0d",
      "parents": [
        "d552c6191bcd952991ffdfff585c8849e8be911d"
      ],
      "author": {
        "name": "Yan, Zheng",
        "email": "zheng.z.yan@intel.com",
        "time": "Fri May 31 15:54:44 2013 +0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed Jul 03 15:32:44 2013 -0700"
      },
      "message": "libceph: fix safe completion\n\nhandle_reply() calls complete_request() only if the first OSD reply\nhas ONDISK flag.\n\nSigned-off-by: Yan, Zheng \u003czheng.z.yan@intel.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "5522ae0b68421e2645303ff010e27afc5292e0ab",
      "tree": "200ec4895513e032a6ce9e844a457150f22b0708",
      "parents": [
        "81b36be4c56299ac4c4c786908cb117ad232b62e"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 01 12:43:04 2013 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu May 02 11:58:41 2013 -0500"
      },
      "message": "libceph: use slab cache for osd client requests\n\nCreate a slab cache to manage allocation of ceph_osdc_request\nstructures.\n\nThis resolves:\n    http://tracker.ceph.com/issues/3926\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "4f0dcb10cf1454a1c38aeaa04cb2757535e4905e",
      "tree": "1637c6a8961c95bdf02b7326cea79ca9b0b8e07f",
      "parents": [
        "b536f69a3a589113992c32982bf2981c8225c9da"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue Apr 30 00:44:32 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:20:08 2013 -0700"
      },
      "message": "libceph: create source file \"net/ceph/snapshot.c\"\n\nThis creates a new source file \"net/ceph/snapshot.c\" to contain\nutility routines related to ceph snapshot contexts.  The main\nmotivation was to define ceph_create_snap_context() as a common way\nto create these structures, but I\u0027ve moved the definitions of\nceph_get_snap_context() and ceph_put_snap_context() there too.\n(The benefit of inlining those is very small, and I\u0027d rather\nkeep this collection of functions together.)\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "c3f56102f28d90946171ae51753bd417b003fd42",
      "tree": "7c96c0c4818fa655c6ba4fe61e7de2f1b6915a6a",
      "parents": [
        "b587398a4ff6520753f9a58da294c80ee22443a5"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 19 15:34:50 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:19:17 2013 -0700"
      },
      "message": "libceph: validate timespec conversions\n\nA ceph timespec contains 32-bit unsigned values for its seconds and\nnanoseconds components.  For a standard timespec, both fields are\nsigned, and the seconds field is almost surely 64 bits.\n\nAdd some explicit casts so the fact that this conversion is taking\nplace is obvious.  Also trip a bug if we ever try to put out of\nrange (negative or too big) values into a ceph timespec.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "b587398a4ff6520753f9a58da294c80ee22443a5",
      "tree": "3b484127a6c612977b8656d4506ef62a7d277bd7",
      "parents": [
        "a9e8ba2cb3eb64cf6cfa509d096ef79bc1c827ae"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 19 15:34:50 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:19:16 2013 -0700"
      },
      "message": "libceph: add signed type limits\n\nFlesh out the limits defined in \u003clinux/ceph/decode.h\u003e to include the\nmaximum and minimum values for signed type S8, S16, S32, and S64.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "6c57b5545d46e276381a15a59283c984cf3f94e3",
      "tree": "426b0aae89ea8f70df73fbd607d829fd8ed92f81",
      "parents": [
        "a51b272e9e99f912e8e07d4c9f58c1d433afea7c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 19 15:34:49 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:19:06 2013 -0700"
      },
      "message": "libceph: support pages for class request data\n\nAdd the ability to provide an array of pages as outbound request\ndata for object class method calls.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "49719778bfa5371ec9b5a7d989bb29000e3ac5df",
      "tree": "89e02e651d419c04b18bc8eb419576f0132769b4",
      "parents": [
        "863c7eb590c154c7c2cfac40914f5bedcad1a166"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 11 12:33:24 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:19:00 2013 -0700"
      },
      "message": "libceph: support raw data requests\n\nAllow osd request ops that aren\u0027t otherwise structured (not class,\nextent, or watch ops) to specify \"raw\" data to be used to hold\nincoming data for the op.  Make use of this capability for the osd\nSTAT op.\n\nPrefix the name of the private function osd_req_op_init() with \"_\",\nand expose a new function by that (earlier) name whose purpose is to\ninitialize osd ops with (only) implied data.\n\nFor now we\u0027ll just support the use of a page array for an osd op\nwith incoming raw data.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "406e2c9f9286fc93ae2191a7abf477dea05aadc9",
      "tree": "121034644585b0171bfd436d77fe988ad1704753",
      "parents": [
        "ac7f29bf2ee4a526efb68f947475ff77a43028de"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Apr 15 14:50:36 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:58 2013 -0700"
      },
      "message": "libceph: kill off osd data write_request parameters\n\nIn the incremental move toward supporting distinct data items in an\nosd request some of the functions had \"write_request\" parameters to\nindicate, basically, whether the data belonged to in_data or the\nout_data.  Now that we maintain the data fields in the op structure\nthere is no need to indicate the direction, so get rid of the\n\"write_request\" parameters.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "26be88087ae8a04a5b576aa2f490597b649fc132",
      "tree": "de16ba5b5b9fe678546fe82f0d6801a2ef441b0d",
      "parents": [
        "7d7d51ce14fde491a6d0677d9bded9b3bd0d21d9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Apr 15 11:20:42 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:52 2013 -0700"
      },
      "message": "libceph: change how \"safe\" callback is used\n\nAn osd request currently has two callbacks.  They inform the\ninitiator of the request when we\u0027ve received confirmation for the\ntarget osd that a request was received, and when the osd indicates\nall changes described by the request are durable.\n\nThe only time the second callback is used is in the ceph file system\nfor a synchronous write.  There\u0027s a race that makes some handling of\nthis case unsafe.  This patch addresses this problem.  The error\nhandling for this callback is also kind of gross, and this patch\nchanges that as well.\n\nIn ceph_sync_write(), if a safe callback is requested we want to add\nthe request on the ceph inode\u0027s unsafe items list.  Because items on\nthis list must have their tid set (by ceph_osd_start_request()), the\nrequest added *after* the call to that function returns.  The\nproblem with this is that there\u0027s a race between starting the\nrequest and adding it to the unsafe items list; the request may\nalready be complete before ceph_sync_write() even begins to put it\non the list.\n\nTo address this, we change the way the \"safe\" callback is used.\nRather than just calling it when the request is \"safe\", we use it to\nnotify the initiator the bounds (start and end) of the period during\nwhich the request is *unsafe*.  So the initiator gets notified just\nbefore the request gets sent to the osd (when it is \"unsafe\"), and\nagain when it\u0027s known the results are durable (it\u0027s no longer\nunsafe).  The first call will get made in __send_request(), just\nbefore the request message gets sent to the messenger for the first\ntime.  That function is only called by __send_queued(), which is\nalways called with the osd client\u0027s request mutex held.\n\nWe then have this callback function insert the request on the ceph\ninode\u0027s unsafe list when we\u0027re told the request is unsafe.  This\nwill avoid the race because this call will be made under protection\nof the osd client\u0027s request mutex.  It also nicely groups the setup\nand cleanup of the state associated with managing unsafe requests.\n\nThe name of the \"safe\" callback field is changed to \"unsafe\" to\nbetter reflect its new purpose.  It has a Boolean \"unsafe\" parameter\nto indicate whether the request is becoming unsafe or is now safe.\nBecause the \"msg\" parameter wasn\u0027t used, we drop that.\n\nThis resolves the original problem reportedin:\n    http://tracker.ceph.com/issues/4706\n\nReported-by: Yan, Zheng \u003czheng.z.yan@intel.com\u003e\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yan, Zheng \u003czheng.z.yan@intel.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "04017e29bbcf0673d8a6af616c56e395d05f5971",
      "tree": "09bd1c613cf85e4410755e2931cf3c21fa5da488",
      "parents": [
        "90af36022aecdeeb1b9c0755461187de717c86dd"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 05 14:46:02 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:35 2013 -0700"
      },
      "message": "libceph: make method call data be a separate data item\n\nRight now the data for a method call is specified via a pointer and\nlength, and it\u0027s copied--along with the class and method name--into\na pagelist data item to be sent to the osd.  Instead, encode the\ndata in a data item separate from the class and method names.\n\nThis will allow large amounts of data to be supplied to methods\nwithout copying.  Only rbd uses the class functionality right now,\nand when it really needs this it will probably need to use a page\narray rather than a page list.  But this simple implementation\ndemonstrates the functionality on the osd client, and that\u0027s enough\nfor now.\n\nThis resolves:\n    http://tracker.ceph.com/issues/4104\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "90af36022aecdeeb1b9c0755461187de717c86dd",
      "tree": "275c653789249a7499165cb36ddb608b5b4bc6df",
      "parents": [
        "ca8b3a69174b04376722672d7dd6b666a7f17c50"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 05 14:46:01 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:34 2013 -0700"
      },
      "message": "libceph: add, don\u0027t set data for a message\n\nChange the names of the functions that put data on a pagelist to\nreflect that we\u0027re adding to whatever\u0027s already there rather than\njust setting it to the one thing.  Currently only one data item is\never added to a message, but that\u0027s about to change.\n\nThis resolves:\n    http://tracker.ceph.com/issues/2770\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "ca8b3a69174b04376722672d7dd6b666a7f17c50",
      "tree": "68c78a604897ae23ff10d971d511b8e2690e2f58",
      "parents": [
        "5240d9f95dfe0f0701b35fbff1cb5b70825ad23f"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 05 14:46:01 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:33 2013 -0700"
      },
      "message": "libceph: implement multiple data items in a message\n\nThis patch adds support to the messenger for more than one data item\nin its data list.\n\nA message data cursor has two more fields to support this:\n    - a count of the number of bytes left to be consumed across\n      all data items in the list, \"total_resid\"\n    - a pointer to the head of the list (for validation only)\n\nThe cursor initialization routine has been split into two parts: the\nouter one, which initializes the cursor for traversing the entire\nlist of data items; and the inner one, which initializes the cursor\nto start processing a single data item.\n\nWhen a message cursor is first initialized, the outer initialization\nroutine sets total_resid to the length provided.  The data pointer\nis initialized to the first data item on the list.  From there, the\ninner initialization routine finishes by setting up to process the\ndata item the cursor points to.\n\nAdvancing the cursor consumes bytes in total_resid.  If the resid\nfield reaches zero, it means the current data item is fully\nconsumed.  If total_resid indicates there is more data, the cursor\nis advanced to point to the next data item, and then the inner\ninitialization routine prepares for using that.  (A check is made at\nthis point to make sure we don\u0027t wrap around the front of the list.)\n\nThe type-specific init routines are modified so they can be given a\nlength that\u0027s larger than what the data item can support.  The resid\nfield is initialized to the smaller of the provided length and the\nlength of the entire data item.\n\nWhen total_resid reaches zero, we\u0027re done.\n\nThis resolves:\n    http://tracker.ceph.com/issues/3761\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "5240d9f95dfe0f0701b35fbff1cb5b70825ad23f",
      "tree": "570f8f274803e56bb86e43180b230f3d70a61649",
      "parents": [
        "8ae4f4f5c056150d5480710ab356801e84d01a3d"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Mar 14 14:09:06 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:32 2013 -0700"
      },
      "message": "libceph: replace message data pointer with list\n\nIn place of the message data pointer, use a list head which links\nthrough message data items.  For now we only support a single entry\non that list.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "8ae4f4f5c056150d5480710ab356801e84d01a3d",
      "tree": "8e468e214e55cb4f6f0858d127bc7f5cfa5569fb",
      "parents": [
        "36153ec9dd6287d7cedf6afb51453c445d946cee"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Mar 14 14:09:06 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:30 2013 -0700"
      },
      "message": "libceph: have cursor point to data\n\nRather than having a ceph message data item point to the cursor it\u0027s\nassociated with, have the cursor point to a data item.  This will\nallow a message cursor to be used for more than one data item.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "36153ec9dd6287d7cedf6afb51453c445d946cee",
      "tree": "71f690eef5012f3d3c5df2723cc776701d57dc84",
      "parents": [
        "c851c49591ebf000c610711e39eea7da5ff05b21"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Mar 14 14:09:06 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:29 2013 -0700"
      },
      "message": "libceph: move cursor into message\n\nA message will only be processing a single data item at a time, so\nthere\u0027s no need for each data item to have its own cursor.\n\nMove the cursor embedded in the message data structure into the\nmessage itself.  To minimize the impact, keep the data-\u003ecursor\nfield, but make it be a pointer to the cursor in the message.\n\nMove the definition of ceph_msg_data above ceph_msg_data_cursor so\nthe cursor can point to the data without a forward definition rather\nthan vice-versa.\n\nThis and the upcoming patches are part of:\n    http://tracker.ceph.com/issues/3761\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "c851c49591ebf000c610711e39eea7da5ff05b21",
      "tree": "917451c570fae240e1902085a75d7ff970deb981",
      "parents": [
        "f759ebb968dbf185fc079dd2e824b1aa3a3d71aa"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 05 14:46:01 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:28 2013 -0700"
      },
      "message": "libceph: record bio length\n\nThe bio is the only data item type that doesn\u0027t record its full\nlength.  Fix that.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "ea96571f7b865edaf1acd472e6f2cddc9fb67892",
      "tree": "f77ecb81c70e9e63ab875b53c2954780f70ddb84",
      "parents": [
        "5476492fba9fd0b4118aacf5b924dd29b8cca56c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 05 14:46:01 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:26 2013 -0700"
      },
      "message": "libceph: fix possible CONFIG_BLOCK build problem\n\nThis patch:\n    15a0d7b libceph: record message data length\ndid not enclose some bio-specific code inside CONFIG_BLOCK as\nit should have.  Fix that.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "5476492fba9fd0b4118aacf5b924dd29b8cca56c",
      "tree": "e012b546f1f0d33bd016f8af278f79e4ae1df4da",
      "parents": [
        "ec9123c56787fa7fb2608f05b19d21c5e1912d87"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 05 01:27:12 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:25 2013 -0700"
      },
      "message": "libceph: kill off osd request r_data_in and r_data_out\n\nFinally!  Convert the osd op data pointers into real structures, and\nmake the switch over to using them instead of having all ops share\nthe in and/or out data structures in the osd request.\n\nSet up a new function to traverse the set of ops and release any\ndata associated with them (pages).\n\nThis and the patches leading up to it resolve:\n    http://tracker.ceph.com/issues/4657\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "ec9123c56787fa7fb2608f05b19d21c5e1912d87",
      "tree": "84eb73a2dbb596c7aba369d42cd37146330fd2d4",
      "parents": [
        "a4ce40a9a7c1053ac2a41cf64255e44e356e5522"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 05 01:27:12 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:24 2013 -0700"
      },
      "message": "libceph: set the data pointers when encoding ops\n\nStill using the osd request r_data_in and r_data_out pointer, but\nwe\u0027re basically only referring to it via the data pointers in the\nosd ops.  And we\u0027re transferring that information to the request\nor reply message only when the op indicates it\u0027s needed, in\nosd_req_encode_op().\n\nTo avoid a forward reference, ceph_osdc_msg_data_set() was moved up\nin the file.\n\nDon\u0027t bother calling ceph_osd_data_init(), in ceph_osd_alloc(),\nbecause the ops array will already be zeroed anyway.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "a4ce40a9a7c1053ac2a41cf64255e44e356e5522",
      "tree": "de1aeb42625f19f6cfe8806db333ec853de0f5b7",
      "parents": [
        "39b44cbe86db42e70693787b2ede81c309925d0b"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 05 01:27:12 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:23 2013 -0700"
      },
      "message": "libceph: combine initializing and setting osd data\n\nThis ends up being a rather large patch but what it\u0027s doing is\nsomewhat straightforward.\n\nBasically, this is replacing two calls with one.  The first of the\ntwo calls is initializing a struct ceph_osd_data with data (either a\npage array, a page list, or a bio list); the second is setting an\nosd request op so it associates that data with one of the op\u0027s\nparameters.  In place of those two will be a single function that\ninitializes the op directly.\n\nThat means we sort of fan out a set of the needed functions:\n    - extent ops with pages data\n    - extent ops with pagelist data\n    - extent ops with bio list data\nand\n    - class ops with page data for receiving a response\n\nWe also have define another one, but it\u0027s only used internally:\n    - class ops with pagelist data for request parameters\n\nNote that we *still* haven\u0027t gotten rid of the osd request\u0027s\nr_data_in and r_data_out fields.  All the osd ops refer to them for\ntheir data.  For now, these data fields are pointers assigned to the\nappropriate r_data_* field when these new functions are called.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "5f562df5f59340eae4272501b974903f48d2ad92",
      "tree": "6dccede3254a6878526da788febbddd8eac27462",
      "parents": [
        "2169238dd3a01bc06670fb9c85635cbe97338ff8"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 05 01:27:12 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:19 2013 -0700"
      },
      "message": "libceph: format class info at init time\n\nAn object class method is formatted using a pagelist which contains\nthe class name, the method name, and the data concatenated into an\nosd request\u0027s outbound data.\n\nCurrently when a class op is initialized in osd_req_op_cls_init(),\nthe lengths of and pointers to these three items are recorded.\nLater, when the op is getting formatted into the request message, a\nnew pagelist is created and that is when these items get copied into\nthe pagelist.\n\nThis patch makes it so the pagelist to hold these items is created\nwhen the op is initialized instead.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "c99d2d4abb6c405ef52e9bc1da87b382b8f41739",
      "tree": "073ad414ec82f706a38300d38fe5c5a710d3098a",
      "parents": [
        "8c042b0df99cd06ef8473ef6e204b87b3dc80158"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Apr 05 01:27:11 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:15 2013 -0700"
      },
      "message": "libceph: specify osd op by index in request\n\nAn osd request now holds all of its source op structures, and every\nplace that initializes one of these is in fact initializing one\nof the entries in the the osd request\u0027s array.\n\nSo rather than supplying the address of the op to initialize, have\ncaller specify the osd request and an indication of which op it\nwould like to initialize.  This better hides the details the\nop structure (and faciltates moving the data pointers they use).\n\nSince osd_req_op_init() is a common routine, and it\u0027s not used\noutside the osd client code, give it static scope.  Also make\nit return the address of the specified op (so all the other\ninit routines don\u0027t have to repeat that code).\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "8c042b0df99cd06ef8473ef6e204b87b3dc80158",
      "tree": "234f410f3253401efa7266cdd67a6e87b22e8bac",
      "parents": [
        "54d5064912649e296552f298e6472ffd37cd8f90"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Apr 03 01:28:58 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:14 2013 -0700"
      },
      "message": "libceph: add data pointers in osd op structures\n\nAn extent type osd operation currently implies that there will\nbe corresponding data supplied in the data portion of the request\n(for write) or response (for read) message.  Similarly, an osd class\nmethod operation implies a data item will be supplied to receive\nthe response data from the operation.\n\nAdd a ceph_osd_data pointer to each of those structures, and assign\nit to point to eithre the incoming or the outgoing data structure in\nthe osd message.  The data is not always available when an op is\ninitially set up, so add two new functions to allow setting them\nafter the op has been initialized.\n\nBegin to make use of the data item pointer available in the osd\noperation rather than the request data in or out structure in\nplaces where it\u0027s convenient.  Add some assertions to verify\npointers are always set the way they\u0027re expected to be.\n\nThis is a sort of stepping stone toward really moving the data\ninto the osd request ops, to allow for some validation before\nmaking that jump.\n\nThis is the first in a series of patches that resolve:\n    http://tracker.ceph.com/issues/4657\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "54d5064912649e296552f298e6472ffd37cd8f90",
      "tree": "1fd2997fff2c1fb959e22d329a14ae9a4822ee11",
      "parents": [
        "79528734f3ae4699a2886f62f55e18fb34fb3651"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Apr 03 01:28:58 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:13 2013 -0700"
      },
      "message": "libceph: rename data out field in osd request op\n\nThere are fields \"indata\" and \"indata_len\" defined the ceph osd\nrequest op structure.  The \"in\" part is with from the point of view\nof the osd server, but is a little confusing here on the client\nside.  Change their names to use \"request\" instead of \"in\" to\nindicate that it defines data provided with the request (as opposed\nthe data returned in the response).\n\nRename the local variable in osd_req_encode_op() to match.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "79528734f3ae4699a2886f62f55e18fb34fb3651",
      "tree": "51905378486b592fc2d4037d67ef3b577fe4eaa7",
      "parents": [
        "430c28c3cb7f3dbd87de266ed52d65928957ff78"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Apr 03 21:32:51 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:12 2013 -0700"
      },
      "message": "libceph: keep source rather than message osd op array\n\nAn osd request keeps a pointer to the osd operations (ops) array\nthat it builds in its request message.\n\nIn order to allow each op in the array to have its own distinct\ndata, we will need to keep track of each op\u0027s data, and that\ninformation does not go over the wire.\n\nAs long as we\u0027re tracking the data we might as well just track the\nentire (source) op definition for each of the ops.  And if we\u0027re\ndoing that, we\u0027ll have no more need to keep a pointer to the\nwire-encoded version.\n\nThis patch makes the array of source ops be kept with the osd\nrequest structure, and uses that instead of the version encoded in\nthe message in places where that was previously used.  The array\nwill be embedded in the request structure, and the maximum number of\nops we ever actually use is currently 2.  So reduce CEPH_OSD_MAX_OP\nto 2 to reduce the size of the structure.\n\nThe result of doing this sort of ripples back up, and as a result\nvarious function parameters and local variables become unnecessary.\n\nMake r_num_ops be unsigned, and move the definition of struct\nceph_osd_req_op earlier to ensure it\u0027s defined where needed.\n\nIt does not yet add per-op data, that\u0027s coming soon.\n\nThis resolves:\n    http://tracker.ceph.com/issues/4656\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "43bfe5de9fa78e07248b70992ce50321efec622c",
      "tree": "8aa7ce9ad14551bdfcb1bf166a90b65a3dab7c02",
      "parents": [
        "9fc6e0647180f72392f03a29863b6602e22aa024"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Apr 03 01:28:57 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:06 2013 -0700"
      },
      "message": "libceph: define osd data initialization helpers\n\nDefine and use functions that encapsulate the initializion of a\nceph_osd_data structure.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "e5975c7c8eb6aeab8d2f76a98c368081082795e0",
      "tree": "438c42affdf77297070e981eba8a96ff0ee3bbdb",
      "parents": [
        "02ee07d3002e6c0b0c4ea1982cd7e6aeca203ed6"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Mar 14 14:09:05 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:18:02 2013 -0700"
      },
      "message": "ceph: build osd request message later for writepages\n\nHold off building the osd request message in ceph_writepages_start()\nuntil just before it will be submitted to the osd client for\nexecution.\n\nWe\u0027ll still create the request and allocate the page pointer array\nafter we learn we have at least one page to write.  A local variable\nwill be used to keep track of the allocated array of pages.  Wait\nuntil just before submitting the request for assigning that page\narray pointer to the request message.\n\nCreate ands use a new function osd_req_op_extent_update() whose\npurpose is to serve this one spot where the length value supplied\nwhen an osd request\u0027s op was initially formatted might need to get\nchanged (reduced, never increased) before submitting the request.\n\nPreviously, ceph_writepages_start() assigned the message header\u0027s\ndata length because of this update.  That\u0027s no longer necessary,\nbecause ceph_osdc_build_request() will recalculate the right\nvalue to use based on the content of the ops in the request.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "acead002b200569273bed331c93c4a91d25e10b8",
      "tree": "779bf689da149acf73bd75f51641f3700469f6b7",
      "parents": [
        "a19308048182d5f9e16b03b1d1c038d9346c7589"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Mar 14 14:09:05 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:58 2013 -0700"
      },
      "message": "libceph: don\u0027t build request in ceph_osdc_new_request()\n\nThis patch moves the call to ceph_osdc_build_request() out of\nceph_osdc_new_request() and into its caller.\n\nThis is in order to defer formatting osd operation information into\nthe request message until just before request is started.\n\nThe only unusual (ab)user of ceph_osdc_build_request() is\nceph_writepages_start(), where the final length of write request may\nchange (downward) based on the current inode size or the oldest\nsnapshot context with dirty data for the inode.\n\nThe remaining callers don\u0027t change anything in the request after has\nbeen built.\n\nThis means the ops array is now supplied by the caller.  It also\nmeans there is no need to pass the mtime to ceph_osdc_new_request()\n(it gets provided to ceph_osdc_build_request()).  And rather than\npassing a do_sync flag, have the number of ops in the ops array\nsupplied imply adding a second STARTSYNC operation after the READ or\nWRITE requested.\n\nThis and some of the patches that follow are related to having the\nmessenger (only) be responsible for filling the content of the\nmessage header, as described here:\n    http://tracker.ceph.com/issues/4589\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "a19308048182d5f9e16b03b1d1c038d9346c7589",
      "tree": "1395d1027753afa2ab5caec1808385f3a68893be",
      "parents": [
        "fdce58ccb5df621695b079378c619046acabc778"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Mar 14 14:09:06 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:57 2013 -0700"
      },
      "message": "libceph: record message data length\n\nKeep track of the length of the data portion for a message in a\nseparate field in the ceph_msg structure.  This information has\nbeen maintained in wire byte order in the message header, but\nthat\u0027s going to change soon.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "fdce58ccb5df621695b079378c619046acabc778",
      "tree": "ec1f5349bd40393ba124dc976fc122dd46428fc0",
      "parents": [
        "ace6d3a96f00c271b3f337adcde8e8cbe39c3820"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Mar 14 14:09:06 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:56 2013 -0700"
      },
      "message": "libceph: record length of bio list with bio\n\nWhen assigning a bio pointer to an osd request, we don\u0027t have an\nefficient way of knowing the total length bytes in the bio list.\nThat information is available at the point it\u0027s set up by the rbd\ncode, so record it with the osd data when it\u0027s set.\n\nThis and the next patch are related to maintaining the length of a\nmessage\u0027s data independent of the message header, as described here:\n    http://tracker.ceph.com/issues/4589\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "ace6d3a96f00c271b3f337adcde8e8cbe39c3820",
      "tree": "cb93ac34e892b61ee9303e051384bb64ed925caa",
      "parents": [
        "25d71cb92d8eb48df9cbd8cc4bb28e88ee8e88d9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Apr 01 16:12:14 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:54 2013 -0700"
      },
      "message": "libceph: drop ceph_osd_request-\u003er_con_filling_msg\n\nA field in an osd request keeps track of whether a connection is\ncurrently filling the request\u0027s reply message.  This patch gets rid\nof that field.\n\nAn osd request includes two messages--a request and a reply--and\nthey\u0027re both associated with the connection that existed to its\nthe target osd at the time the request was created.\n\nAn osd request can be dropped early, even when it\u0027s in flight.\nAnd at that time both messages are released.  It\u0027s possible the\nreply message has been supplied to its connection to receive\nan incoming response message at the time the osd request gets\ndropped.  So ceph_osdc_release_request() revokes that message\nfrom the connection before releasing it so things get cleaned up\nproperly.\n\nPreviously this may have caused a problem, because the connection\nthat a message was associated with might have gone away before the\nrevoke request.  And to avoid any problems using that connection,\nthe osd client held a reference to it when it supplies its response\nmessage.\n\nHowever since this commit:\n    38941f80 libceph: have messages point to their connection\nall messages hold a reference to the connection they are associated\nwith whenever the connection is actively operating on the message\n(i.e. while the message is queued to send or sending, and when it\ndata is being received into it).  And if a message has no connection\nassociated with it, ceph_msg_revoke_incoming() won\u0027t do anything\nwhen asked to revoke it.\n\nAs a result, there is no need to keep an additional reference to the\nconnection associated with a message when we hand the message to the\nmessenger when it calls our alloc_msg() method to receive something.\nIf the connection *were* operating on it, it would have its own\nreference, and if not, there\u0027s no work to be done when we need to\nrevoke it.\n\nSo get rid of the osd request\u0027s r_con_filling_msg field.\n\nThis resolves:\n    http://tracker.ceph.com/issues/4647\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "ef4859d6479d19bcc65c3156cf3b7dd747355c29",
      "tree": "83a977e35c7dd32834d707f93173c1e00da06384",
      "parents": [
        "8058fd45039724695d5b67a574544452635d64a9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Apr 01 18:58:26 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:52 2013 -0700"
      },
      "message": "libceph: define ceph_decode_pgid() only once\n\nThere are two basically identical definitions of __decode_pgid()\nin libceph, one in \"net/ceph/osdmap.c\" and the other in\n\"net/ceph/osd_client.c\".  Get rid of both, and instead define\na single inline version in \"include/linux/ceph/osdmap.h\".\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "33803f3300265661b5c5d20a9811c6a2a157d545",
      "tree": "192ee4eb2d726fee466eb667f6fe938ba4a41a1e",
      "parents": [
        "a8dd0a37bc016cfb3ac75cf8484428573bb8d862"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Mar 13 20:50:00 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:45 2013 -0700"
      },
      "message": "libceph: define source request op functions\n\nThe rbd code has a function that allocates and populates a\nceph_osd_req_op structure (the in-core version of an osd request\noperation).  When reviewed, Josh suggested two things: that the\nbig varargs function might be better split into type-specific\nfunctions; and that this functionality really belongs in the osd\nclient rather than rbd.\n\nThis patch implements both of Josh\u0027s suggestions.  It breaks\nup the rbd function into separate functions and defines them\nin the osd client module as exported interfaces.  Unlike the\nrbd version, however, the functions don\u0027t allocate an osd_req_op\nstructure; they are provided the address of one and that is\ninitialized instead.\n\nThe rbd function has been eliminated and calls to it have been\nreplaced by calls to the new routines.  The rbd code now now use a\nstack (struct) variable to hold the op rather than allocating and\nfreeing it each time.\n\nFor now only the capabilities used by rbd are implemented.\nImplementing all the other osd op types, and making the rest of the\ncode use it will be done separately, in the next few patches.\n\nNote that only the extent, cls, and watch portions of the\nceph_osd_req_op structure are currently used.  Delete the others\n(xattr, pgls, and snap) from its definition so nobody thinks it\u0027s\nactually implemented or needed.  We can add it back again later\nif needed, when we know it\u0027s been tested.\n\nThis (and a few follow-on patches) resolves:\n    http://tracker.ceph.com/issues/3861\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "adfe695a25e92e3a4597807fbc7f9a8105218776",
      "tree": "8356e0eafe1bd0e5817bca6e56f80e80c62b9482",
      "parents": [
        "0baa1bd9b6da7161dc1773b1dfce3adfd37d675f"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Mar 13 20:50:00 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:42 2013 -0700"
      },
      "message": "ceph: move max constant definitions\n\nMove some definitions for max integer values out of the rbd code and\ninto the more central \"decode.h\" header file.  These really belong\nin a Linux (or libc) header somewhere, but I haven\u0027t gotten around\nto proposing that yet.\n\nThis is in preparation for moving some code out of rbd.c and into\nthe osd client.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "6644ed7b7e04f8e588aebdaa58cededb9416ab95",
      "tree": "2770308c0a48245b81754238f0c37e87605fde3b",
      "parents": [
        "8ea299bcbc85aeaf5348d99614b35433287bec6b"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Mar 11 23:34:24 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:37 2013 -0700"
      },
      "message": "libceph: make message data be a pointer\n\nBegin the transition from a single message data item to a list of\nthem by replacing the \"data\" structure in a message with a pointer\nto a ceph_msg_data structure.\n\nA null pointer will indicate the message has no data; replace the\nuse of ceph_msg_has_data() with a simple check for a null pointer.\n\nCreate functions ceph_msg_data_create() and ceph_msg_data_destroy()\nto dynamically allocate and free a data item structure of a given type.\n\nWhen a message has its data item \"set,\" allocate one of these to\nhold the data description, and free it when the last reference to\nthe message is dropped.\n\nThis partially resolves:\n    http://tracker.ceph.com/issues/4429\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "f5db90bcf2c69d099f9d828a8104796f41de6bc5",
      "tree": "e0f5e2c76beeea42d41c47f5ebb9b8130bf8a171",
      "parents": [
        "859a35d5523e8e6a5c3568c12febe2e1270bc3a1"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Mar 11 23:34:23 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:34 2013 -0700"
      },
      "message": "libceph: kill last of ceph_msg_pos\n\nThe only remaining field in the ceph_msg_pos structure is\ndid_page_crc.  In the new cursor model of things that flag (or\nsomething like it) belongs in the cursor.\n\nDefine a new field \"need_crc\" in the cursor (which applies to all\ntypes of data) and initialize it to true whenever a cursor is\ninitialized.\n\nIn write_partial_message_data(), the data CRC still will be computed\nas before, but it will check the cursor-\u003eneed_crc field to determine\nwhether it\u0027s needed.  Any time the cursor is advanced to a new piece\nof a data item, need_crc will be set, and this will cause the crc\nfor that entire piece to be accumulated into the data crc.\n\nIn write_partial_message_data() the intermediate crc value is now\nheld in a local variable so it doesn\u0027t have to be byte-swapped so\nmany times.  In read_partial_msg_data() we do something similar\n(but mainly for consistency there).\n\nWith that, the ceph_msg_pos structure can go away,  and it no longer\nneeds to be passed as an argument to prepare_message_data().\n\nThis cleanup is related to:\n    http://tracker.ceph.com/issues/4428\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "859a35d5523e8e6a5c3568c12febe2e1270bc3a1",
      "tree": "0aab4623ec39fd01e229c24a97f04a46e9179efd",
      "parents": [
        "643c68a4a990612720479078f3450d5b766da9f2"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Mar 11 23:34:23 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:33 2013 -0700"
      },
      "message": "libceph: kill most of ceph_msg_pos\n\nAll but one of the fields in the ceph_msg_pos structure are now\nnever used (only assigned), so get rid of them.  This allows\nseveral small blocks of code to go away.\n\nThis is cleanup of old code related to:\n    http://tracker.ceph.com/issues/4428\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "4c59b4a278f9b7a418ad8af933fd7b341df64393",
      "tree": "8f42d880e2ed3fb97c64ea293b42ff08f891537a",
      "parents": [
        "686be20875db63c6103573565c63db20153ee6e1"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Mar 11 23:34:23 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:30 2013 -0700"
      },
      "message": "libceph: collapse all data items into one\n\nIt turns out that only one of the data item types is ever used at\nany one time in a single message (currently).\n    - A page array is used by the osd client (on behalf of the file\n      system) and by rbd.  Only one osd op (and therefore at most\n      one data item) is ever used at a time by rbd.  And the only\n      time the file system sends two, the second op contains no\n      data.\n    - A bio is only used by the rbd client (and again, only one\n      data item per message)\n    - A page list is used by the file system and by rbd for outgoing\n      data, but only one op (and one data item) at a time.\n\nWe can therefore collapse all three of our data item fields into a\nsingle field \"data\", and depend on the messenger code to properly\nhandle it based on its type.\n\nThis allows us to eliminate quite a bit of duplicated code.\n\nThis is related to:\n    http://tracker.ceph.com/issues/4429\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "6518be47f910f62a98cb6044dbb457af55241f95",
      "tree": "6d1244367ec16ee602b44573a7b84646d416214a",
      "parents": [
        "463207aa40cf2cadcae84866b3f85ccaa7022ee8"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Mar 11 23:34:23 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:26 2013 -0700"
      },
      "message": "libceph: kill ceph message bio_iter, bio_seg\n\nThe bio_iter and bio_seg fields in a message are no longer used, we\nuse the cursor instead.  So get rid of them and the functions that\noperate on them them.\n\nThis is related to:\n    http://tracker.ceph.com/issues/4428\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "25aff7c559c8b54a810bc094d59fe037cfed6b18",
      "tree": "93db1b7a4941ab629abc36e31f8af51aa134aa3e",
      "parents": [
        "28a89ddece39890c255a0c41baf622731a08c288"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Mar 11 23:34:22 2013 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:24 2013 -0700"
      },
      "message": "libceph: record residual bytes for all message data types\n\nAll of the data types can use this, not just the page array.  Until\nnow, only the bio type doesn\u0027t have it available, and only the\ninitiator of the request (the rbd client) is able to supply the\nlength of the full request without re-scanning the bio list.  Change\nthe cursor init routines so the length is supplied based on the\nmessage header \"data_len\" field, and use that length to intiialize\nthe \"resid\" field of the cursor.\n\nIn addition, change the way \"last_piece\" is defined so it is based\non the residual number of bytes in the original request.  This is\nnecessary (at least for bio messages) because it is possible for\na read request to succeed without consuming all of the space\navailable in the data buffer.\n\nThis resolves:\n    http://tracker.ceph.com/issues/4427\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "e9966076cdd952e19f2dd4854cd719be0d7cbebc",
      "tree": "c65c356996fcb0b58c5a9353011ae1cdc54ac577",
      "parents": [
        "27859f9773e4a0b2042435b13400ee2c891a61f4"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Mar 25 10:26:30 2013 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:15 2013 -0700"
      },
      "message": "libceph: wrap auth methods in a mutex\n\nThe auth code is called from a variety of contexts, include the mon_client\n(protected by the monc\u0027s mutex) and the messenger callbacks (currently\nprotected by nothing).  Avoid chaos by protecting all auth state with a\nmutex.  Nothing is blocking, so this should be simple and lightweight.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "27859f9773e4a0b2042435b13400ee2c891a61f4",
      "tree": "28b8e7133959c88f4de89cc98eee2016874b1ca6",
      "parents": [
        "0bed9b5c523d577378b6f83eab5835fe30c27208"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Mar 25 10:26:14 2013 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:14 2013 -0700"
      },
      "message": "libceph: wrap auth ops in wrapper functions\n\nUse wrapper functions that check whether the auth op exists so that callers\ndo not need a bunch of conditional checks.  Simplifies the external\ninterface.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "0bed9b5c523d577378b6f83eab5835fe30c27208",
      "tree": "ab35e0fdeedf883e029cedab7a0ecbce71376426",
      "parents": [
        "4b8e8b5d78b8322351d44487c1b76f7e9d3412bc"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Mar 25 10:26:01 2013 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:13 2013 -0700"
      },
      "message": "libceph: add update_authorizer auth method\n\nCurrently the messenger calls out to a get_authorizer con op, which will\ncreate a new authorizer if it doesn\u0027t yet have one.  In the meantime, when\nwe rotate our service keys, the authorizer doesn\u0027t get updated.  Eventually\nit will be rejected by the server on a new connection attempt and get\ninvalidated, and we will then rebuild a new authorizer, but this is not\nideal.\n\nInstead, if we do have an authorizer, call a new update_authorizer op that\nwill verify that the current authorizer is using the latest secret.  If it\nis not, we will build a new one that does.  This avoids the transient\nfailure.\n\nThis fixes one of the sorry sequence of events for bug\n\n\thttp://tracker.ceph.com/issues/4282\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "3a23083bda56850a1dc0e1c6d270b1f5dc789f07",
      "tree": "ddd52f6a7c8da4334d68ae3e28825d89155d29a0",
      "parents": [
        "022f3e2ee2354599faccf5a764a5a24a5dd194c9"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Mar 25 08:47:40 2013 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:09 2013 -0700"
      },
      "message": "libceph: implement RECONNECT_SEQ feature\n\nThis is an old protocol extension that allows the client and server to\navoid resending old messages after a reconnect (following a socket error).\nInstead, the exchange their sequence numbers during the handshake.  This\navoids sending a bunch of useless data over the socket.\n\nIt has been supported in the server code since v0.22 (Sep 2010).\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "9d2a06c2750177dca5f8d0e89884c1d409d64bbc",
      "tree": "0423695d2b76161c2c537b331464a207ea25d832",
      "parents": [
        "95e072eb38f99c724739d91a1f12bb8bfe1619b5"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 08 13:35:36 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:05 2013 -0700"
      },
      "message": "libceph: kill message trail\n\nThe wart that is the ceph message trail can now be removed, because\nits only user was the osd client, and the previous patch made that\nno longer the case.\n\nThe result allows write_partial_msg_pages() to be simplified\nconsiderably.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "95e072eb38f99c724739d91a1f12bb8bfe1619b5",
      "tree": "8408a57ce11d519590850ddeb3479a0d15d4371a",
      "parents": [
        "9a5e6d09ddd0cd68ce64c3aa54095e4a0e85b089"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 08 13:35:36 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:04 2013 -0700"
      },
      "message": "libceph: kill osd request r_trail\n\nThe osd trail is a pagelist, used only for a CALL osd operation\nto hold the class and method names, along with any input data for\nthe call.\n\nIt is only currently used by the rbd client, and when it\u0027s used it\nis the only bit of outbound data in the osd request.  Since we\nalready support (non-trail) pagelist data in a message, we can\njust save this outbound CALL data in the \"normal\" pagelist rather\nthan the trail, and get rid of the trail entirely.\n\nThe existing pagelist support depends on the pagelist being\ndynamically allocated, and ownership of it is passed to the\nmessenger once it\u0027s been attached to a message.  (That is to say,\nthe messenger releases and frees the pagelist when it\u0027s done with\nit).  That means we need to dynamically allocate the pagelist also.\n\nNote that we simply assert that the allocation of a pagelist\nstructure succeeds.  Appending to a pagelist might require a dynamic\nallocation, so we\u0027re already assuming we won\u0027t run into trouble\ndoing so (we\u0027re just ignore any failures--and that should be fixed\nat some point).\n\nThis resolves:\n    http://tracker.ceph.com/issues/4407\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "9a5e6d09ddd0cd68ce64c3aa54095e4a0e85b089",
      "tree": "9bf530bb090cb6135c5be31705c5fb69ba4f6139",
      "parents": [
        "175face2ba31025b0dcd6da4e711fca7764287fa"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 08 13:35:36 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:03 2013 -0700"
      },
      "message": "libceph: have osd requests support pagelist data\n\nAdd support for recording a ceph pagelist as data associated with an\nosd request.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "175face2ba31025b0dcd6da4e711fca7764287fa",
      "tree": "8da146e3a923614defe47d78e0e262a1671b7f1a",
      "parents": [
        "e766d7b55e10f93c7bab298135a4e90dcc46620d"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 08 13:35:36 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:02 2013 -0700"
      },
      "message": "libceph: let osd ops determine request data length\n\nThe length of outgoing data in an osd request is dependent on the\nosd ops that are embedded in that request.  Each op is encoded into\na request message using osd_req_encode_op(), so that should be used\nto determine the amount of outgoing data implied by the op as it\nis encoded.\n\nHave osd_req_encode_op() return the number of bytes of outgoing data\nimplied by the op being encoded, and accumulate and use that in\nceph_osdc_build_request().\n\nAs a result, ceph_osdc_build_request() no longer requires its \"len\"\nparameter, so get rid of it.\n\nUsing the sum of the op lengths rather than the length provided is\na valid change because:\n    - The only callers of osd ceph_osdc_build_request() are\n      rbd and the osd client (in ceph_osdc_new_request() on\n      behalf of the file system).\n    - When rbd calls it, the length provided is only non-zero for\n      write requests, and in that case the single op has the\n      same length value as what was passed here.\n    - When called from ceph_osdc_new_request(), (it\u0027s not all that\n      easy to see, but) the length passed is also always the same\n      as the extent length encoded in its (single) write op if\n      present.\n\nThis resolves:\n    http://tracker.ceph.com/issues/4406\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "e766d7b55e10f93c7bab298135a4e90dcc46620d",
      "tree": "0b3bebb5ee06c1a63d2155c6ba3ce52f83d63fe7",
      "parents": [
        "6aaa4511deb4b0fd776d1153dc63a89cdc024fb8"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Mar 07 15:38:28 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:17:01 2013 -0700"
      },
      "message": "libceph: implement pages array cursor\n\nImplement and use cursor routines for page array message data items\nfor outbound message data.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "6aaa4511deb4b0fd776d1153dc63a89cdc024fb8",
      "tree": "455fb4334de3518e411daaa7e3ff1d9aef187cd8",
      "parents": [
        "7fe1e5e57b84eab98ff352519aa66e86dac5bf61"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Mar 06 23:39:39 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:59 2013 -0700"
      },
      "message": "libceph: implement bio message data item cursor\n\nImplement and use cursor routines for bio message data items for\noutbound message data.\n\n(See the previous commit for reasoning in support of the changes\nin out_msg_pos_next().)\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "dd236fcb65d7b6b80c408cb5f66aab55f4594284",
      "tree": "426afba9ffbe61535085b76066c08db217b3a12d",
      "parents": [
        "fe38a2b67bc6b3a60da82a23e9082256a30e39d9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Mar 06 23:39:39 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:57 2013 -0700"
      },
      "message": "libceph: prepare for other message data item types\n\nThis just inserts some infrastructure in preparation for handling\nother types of ceph message data items.  No functional changes,\njust trying to simplify review by separating out some noise.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "fe38a2b67bc6b3a60da82a23e9082256a30e39d9",
      "tree": "956555bf1b5ea405d77045bd9d7743879d60438e",
      "parents": [
        "437945094fed0deb1810e8da95465c8f26bc6f80"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Mar 06 23:39:39 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:56 2013 -0700"
      },
      "message": "libceph: start defining message data cursor\n\nThis patch lays out the foundation for using generic routines to\nmanage processing items of message data.\n\nFor simplicity, we\u0027ll start with just the trail portion of a\nmessage, because it stands alone and is only present for outgoing\ndata.\n\nFirst some basic concepts.  We\u0027ll use the term \"data item\" to\nrepresent one of the ceph_msg_data structures associated with a\nmessage.  There are currently four of those, with single-letter\nfield names p, l, b, and t.  A data item is further broken into\n\"pieces\" which always lie in a single page.  A data item will\ninclude a \"cursor\" that will track state as the memory defined by\nthe item is consumed by sending data from or receiving data into it.\n\nWe define three routines to manipulate a data item\u0027s cursor: the\n\"init\" routine; the \"next\" routine; and the \"advance\" routine.  The\n\"init\" routine initializes the cursor so it points at the beginning\nof the first piece in the item.  The \"next\" routine returns the\npage, page offset, and length (limited by both the page and item\nsize) of the next unconsumed piece in the item.  It also indicates\nto the caller whether the piece being returned is the last one in\nthe data item.\n\nThe \"advance\" routine consumes the requested number of bytes in the\nitem (advancing the cursor).  This is used to record the number of\nbytes from the current piece that were actually sent or received by\nthe network code.  It returns an indication of whether the result\nmeans the current piece has been fully consumed.  This is used by\nthe message send code to determine whether it should calculate the\nCRC for the next piece processed.\n\nThe trail of a message is implemented as a ceph pagelist.  The\nroutines defined for it will be usable for non-trail pagelist data\nas well.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "437945094fed0deb1810e8da95465c8f26bc6f80",
      "tree": "afd9e83b01b06bcad1e8933df3b990479bd558fa",
      "parents": [
        "f9e15777afd87585f2222dfd446c2e52deb65eba"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 01 18:00:16 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:55 2013 -0700"
      },
      "message": "libceph: abstract message data\n\nGroup the types of message data into an abstract structure with a\ntype indicator and a union containing fields appropriate to the\ntype of data it represents.  Use this to represent the pages,\npagelist, bio, and trail in a ceph message.\n\nVerify message data is of type NONE in ceph_msg_data_set_*()\nroutines.  Since information about message data of type NONE really\nshould not be interpreted, get rid of the other assertions in those\nfunctions.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "f9e15777afd87585f2222dfd446c2e52deb65eba",
      "tree": "d7f3d460c4384d502a8a7b16bcd530f803a54192",
      "parents": [
        "97fb1c7f6637ee61c90b8bc186d464cfd426b063"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 01 18:00:16 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:54 2013 -0700"
      },
      "message": "libceph: be explicit about message data representation\n\nA ceph message has a data payload portion.  The memory for that data\n(either the source of data to send or the location to place data\nthat is received) is specified in several ways.  The ceph_msg\nstructure includes fields for all of those ways, but this\nmispresents the fact that not all of them are used at a time.\n\nSpecifically, the data in a message can be in:\n    - an array of pages\n    - a list of pages\n    - a list of Linux bios\n    - a second list of pages (the \"trail\")\n(The two page lists are currently only ever used for outgoing data.)\n\nImpose more structure on the ceph message, making the grouping of\nsome of these fields explicit.  Shorten the name of the\n\"page_alignment\" field.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "97fb1c7f6637ee61c90b8bc186d464cfd426b063",
      "tree": "561715682d70fb55c43acbd0fcedca33d0597237",
      "parents": [
        "35b6280899424a0faf5410ce1ee86f9682528e6c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 01 18:00:16 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:53 2013 -0700"
      },
      "message": "libceph: define ceph_msg_has_*() data macros\n\nDefine and use macros ceph_msg_has_*() to determine whether to\noperate on the pages, pagelist, bio, and trail fields of a message.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "4a73ef27ad04f1b8ea23eb55e50b20fcc0530a6f",
      "tree": "5a0a127ca9b3b51a3f388c980f49229245fed361",
      "parents": [
        "ebf18f47093e968105767eed4a0aa155e86b224e"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Mar 07 15:38:26 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:42 2013 -0700"
      },
      "message": "libceph: record message data byte length\n\nRecord the number of bytes of data in a page array rather than the\nnumber of pages in the array.  It can be assumed that the page array\nis of sufficient size to hold the number of bytes indicated (and\noffset by the indicated alignment).\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "27fa83852ba275361eaa1a1283cf6704fa8191a6",
      "tree": "b3a939253a63d3d3d64b339017008733e659108b",
      "parents": [
        "f1baeb2b9fc1c2c87ec02f1bf8cb88e108d4fbce"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Feb 14 12:16:43 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:40 2013 -0700"
      },
      "message": "libceph: isolate other message data fields\n\nDefine ceph_msg_data_set_pagelist(), ceph_msg_data_set_bio(), and\nceph_msg_data_set_trail() to clearly abstract the assignment of the\nremaining data-related fields in a ceph message structure.  Use the\nnew functions in the osd client and mds client.\n\nThis partially resolves:\n    http://tracker.ceph.com/issues/4263\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "f1baeb2b9fc1c2c87ec02f1bf8cb88e108d4fbce",
      "tree": "5ca6b72adeeea2423367ea3313902cf61fd45980",
      "parents": [
        "02afca6ca00b7972887c5cc77068356f33bdfc18"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Mar 07 15:38:26 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:39 2013 -0700"
      },
      "message": "libceph: set page info with byte length\n\nWhen setting page array information for message data, provide the\nbyte length rather than the page count ceph_msg_data_set_pages().\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "02afca6ca00b7972887c5cc77068356f33bdfc18",
      "tree": "a335532b314d8da309bb7313cc84ae973d3f5ab0",
      "parents": [
        "e0c594878e3211b09208c779df5f996f0b831d9e"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Feb 14 12:16:43 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:38 2013 -0700"
      },
      "message": "libceph: isolate message page field manipulation\n\nDefine a function ceph_msg_data_set_pages(), which more clearly\nabstracts the assignment page-related fields for data in a ceph\nmessage structure.  Use this new function in the osd client and mds\nclient.\n\nIdeally, these fields would never be set more than once (with\nBUG_ON() calls to guarantee that).  At the moment though the osd\nclient sets these every time it receives a message, and in the event\nof a communication problem this can happen more than once.  (This\nwill be resolved shortly, but setting up these helpers first makes\nit all a bit easier to work with.)\n\nRearrange the field order in a ceph_msg structure to group those\nthat are used to define the possible data payloads.\n\nThis partially resolves:\n    http://tracker.ceph.com/issues/4263\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "e0c594878e3211b09208c779df5f996f0b831d9e",
      "tree": "4418813382a61eafd7f3216b8efbc63a1d253f37",
      "parents": [
        "9516e45b25d9967c35d2e798496ec5e590aaa24f"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Mar 07 15:38:25 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:36 2013 -0700"
      },
      "message": "libceph: record byte count not page count\n\nRecord the byte count for an osd request rather than the page count.\nThe number of pages can always be derived from the byte count (and\nalignment/offset) but the reverse is not true.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "7b11ba37585595034a91df8869414f732466b800",
      "tree": "7ed58d6ffe58456be69c2c3597426c5c1a5740e0",
      "parents": [
        "4137577ae398837b0d5e47d4d9365320584efdad"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 08 18:51:03 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:29 2013 -0700"
      },
      "message": "libceph: define CEPH_MSG_MAX_MIDDLE_LEN\n\nThis is probably unnecessary but the code read as if it were wrong\nin read_partial_message().\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "0fff87ec798abdb4a99f01cbb0197266bb68c5dc",
      "tree": "33c853319e28ed9dd20835c1f3f066be404b50a1",
      "parents": [
        "2ac2b7a6d4976bd6b5dc0751aa77d12d48d3ac4c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Feb 14 12:16:43 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:27 2013 -0700"
      },
      "message": "libceph: separate read and write data\n\nAn osd request defines information about where data to be read\nshould be placed as well as where data to write comes from.\nCurrently these are represented by common fields.\n\nKeep information about data for writing separate from data to be\nread by splitting these into data_in and data_out fields.\n\nThis is the key patch in this whole series, in that it actually\nidentifies which osd requests generate outgoing data and which\ngenerate incoming data.  It\u0027s less obvious (currently) that an osd\nCALL op generates both outgoing and incoming data; that\u0027s the focus\nof some upcoming work.\n\nThis resolves:\n    http://tracker.ceph.com/issues/4127\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "2ac2b7a6d4976bd6b5dc0751aa77d12d48d3ac4c",
      "tree": "af95ff579ab1719871e8678ef530db46514c0eb7",
      "parents": [
        "2794a82a11cfeae0890741b18b0049ddb55ce646"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Feb 14 12:16:43 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:25 2013 -0700"
      },
      "message": "libceph: distinguish page and bio requests\n\nAn osd request uses either pages or a bio list for its data.  Use a\nunion to record information about the two, and add a data type\ntag to select between them.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "2794a82a11cfeae0890741b18b0049ddb55ce646",
      "tree": "9dc71c4a7d95fceed3942418586c5ced230ecdc2",
      "parents": [
        "153e5167e0e237faaefb7adf82db5748c1452d73"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Feb 14 12:16:43 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:24 2013 -0700"
      },
      "message": "libceph: separate osd request data info\n\nPull the fields in an osd request structure that define the data for\nthe request out into a separate structure.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "153e5167e0e237faaefb7adf82db5748c1452d73",
      "tree": "fa0e5ec90ef466cb7100f64ee4d2b9bf7c4ad69d",
      "parents": [
        "3a42b6c43e4ef65d0edd7d9e5c4366002b4e951d"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 01 18:00:15 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:23 2013 -0700"
      },
      "message": "libceph: don\u0027t assign page info in ceph_osdc_new_request()\n\nCurrently ceph_osdc_new_request() assigns an osd request\u0027s\nr_num_pages and r_alignment fields.  The only thing it does\nafter that is call ceph_osdc_build_request(), and that doesn\u0027t\nneed those fields to be assigned.\n\nMove the assignment of those fields out of ceph_osdc_new_request()\nand into its caller.  As a result, the page_align parameter is no\nlonger used, so get rid of it.\n\nNote that in ceph_sync_write(), the value for req-\u003er_num_pages had\nalready been calculated earlier (as num_pages, and fortunately\nit was computed the same way).  So don\u0027t bother recomputing it,\nbut because it\u0027s not needed earlier, move that calculation after the\ncall to ceph_osdc_new_request().  Hold off making the assignment to\nr_alignment, doing it instead r_pages and r_num_pages are\ngetting set.\n\nSimilarly, in start_read(), nr_pages already holds the number of\npages in the array (and is calculated the same way), so there\u0027s no\nneed to recompute it.  Move the assignment of the page alignment\ndown with the others there as well.\n\nThis and the next few patches are preparation work for:\n    http://tracker.ceph.com/issues/4127\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "41766f87f54cc8bef023b4b0550f48753959345a",
      "tree": "58d11a1e3fcb0aef8d97b6cdc48bcf5811d32001",
      "parents": [
        "ec02a2f2ffae13e038453ae89592a8c6210f7f4d"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 01 18:00:15 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:17 2013 -0700"
      },
      "message": "libceph: rename ceph_calc_object_layout()\n\nThe purpose of ceph_calc_object_layout() is to fill in the pool\nnumber and seed for a ceph_pg structure provided, based on a given\nosd map and target object id.\n\nCurrently that function takes a file layout parameter, but the only\nthing used out of that is its pool number.\n\nChange the function so it takes a pool number rather than the full\nfile layout structure.  Only update the ceph_pg if the pool is found\nin the osd map.  Get rid of few useless lines of code from the\nfunction while there.\n\nSince the function now very clearly just fills in the ceph_pg\nstructure it\u0027s provided, rename it ceph_calc_ceph_pg().\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "ec02a2f2ffae13e038453ae89592a8c6210f7f4d",
      "tree": "9c9d59d61ec2b5516ccfd7da02caf5372bf72e8c",
      "parents": [
        "2a24d1f4bd7995de133c857bfdc77ac82c842300"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 01 18:00:15 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:16 2013 -0700"
      },
      "message": "libceph: kill ceph_msg-\u003epagelist_count\n\nThe pagelist_count field is never actually used, so get rid of it.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "2a24d1f4bd7995de133c857bfdc77ac82c842300",
      "tree": "33d1fa3029e7009f041043ef96cba3c782e475db",
      "parents": [
        "8f63ca2d23c7922b24d7b95e54740ec29c859379"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Mar 01 18:00:15 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:15 2013 -0700"
      },
      "message": "libceph: use (void *) for untyped data in osd ops\n\nTwo of the fields defining osd operations are defined using (char *)\nwhile the data they represent are really untyped, not character\nstrings.  Change them to have type (void *).\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "0d5af1643535508f82d6bcc2b9b93b180e8c3f4b",
      "tree": "723493b46491da26aa66cc60604f11e701d32858",
      "parents": [
        "3f99969f42300e52779ae0656678c2534097f2ea"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Feb 27 10:26:25 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:16:12 2013 -0700"
      },
      "message": "libceph: complete lingering requests only once\n\nAn osd request marked to linger will be re-submitted in the event\na connection to the target osd gets dropped.  Currently, if there\nis a callback function associated with a request it will be called\neach time a request is submitted--which for lingering requests can\nbe more than once.\n\nChange it so a request--including lingering ones--will get completed\n(from the perspective of the user of the osd client) exactly once.\n\nThis resolves:\n    http://tracker.ceph.com/issues/3967\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "d4b515fa10dd52a2aef88df7299e9f3a8ab0957a",
      "tree": "0110566b4e00aeb5215b1b967ff64695cd45eb10",
      "parents": [
        "60cf5992d96dd5b97baf74cd400d6e05f7f2c93e"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 25 17:35:46 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:14:28 2013 -0700"
      },
      "message": "libceph: distinguish page array and pagelist count\n\nUse distinct fields for tracking the number of pages in a message\u0027s\npage array and in a message\u0027s page list.  Currently only one or the\nother is used at a time, but that will be changing soon.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "07c09b725543ff2958c11522d583f90f7fdba735",
      "tree": "e59ccdb0798fb56c4d2d34bbe1952b1de9cfdf6c",
      "parents": [
        "3ff5f385b1449a07372d51fb89ca94dbfb6a3be2"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Feb 15 22:10:17 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed May 01 21:14:23 2013 -0700"
      },
      "message": "libceph: make ceph_msg-\u003ebio_seg be unsigned\n\nThe bio_seg field is used by the ceph messenger in iterating through\na bio.  It should never have a negative value, so make it an\nunsigned.  (I contemplated making it unsigned short to match the\nstruct bio definition, but it offered no benefit.)\n\nChange variables used to hold bio_seg values to all be unsigned as\nwell.  Change two variable names in init_bio_iter() to match the\nconvention used everywhere else.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "83ca14fdd35821554058e5fd4fa7b118ee504a33",
      "tree": "8f105c71b91854c68db4281f255723356e709ccd",
      "parents": [
        "1b83bef24c6746a146d39915a18fb5425f2facb0"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Feb 26 10:39:09 2013 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Feb 26 15:03:06 2013 -0800"
      },
      "message": "libceph: add support for HASHPSPOOL pool flag\n\nThe legacy behavior adds the pgid seed and pool together as the input for\nCRUSH.  That is problematic because each pool\u0027s PGs end up mapping to the\nsame OSDs: 1.5 \u003d\u003d 2.4 \u003d\u003d 3.3 \u003d\u003d ...\n\nInstead, if the HASHPSPOOL flag is set, we has the ps and pool together and\nfeed that into CRUSH.  This ensures that two adjacent pools will map to\nan independent pseudorandom set of OSDs.\n\nAdvertise our support for this via a protocol feature flag.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "1b83bef24c6746a146d39915a18fb5425f2facb0",
      "tree": "a765aeb136f4c7e354c01314e5fdfb776d503fb7",
      "parents": [
        "2169aea649c08374bec7d220a3b8f64712275356"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Feb 25 16:11:12 2013 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Feb 26 15:02:50 2013 -0800"
      },
      "message": "libceph: update osd request/reply encoding\n\nUse the new version of the encoding for osd requests and replies.  In the\nprocess, update the way we are tracking request ops and reply lengths and\nresults in the struct ceph_osd_request.  Update the rbd and fs/ceph users\nappropriately.\n\nThe main changes are:\n - we keep pointers into the request memory for fields we need to update\n   each time the request is sent out over the wire\n - we keep information about the result in an array in the request struct\n   where the users can easily get at it.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "2169aea649c08374bec7d220a3b8f64712275356",
      "tree": "8a287c8239a5e1fc47afae4fbec530a467825706",
      "parents": [
        "4f6a7e5ee1393ec4b243b39dac9f36992d161540"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Feb 25 16:13:08 2013 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Feb 26 15:02:37 2013 -0800"
      },
      "message": "libceph: calculate placement based on the internal data types\n\nInstead of using the old ceph_object_layout struct, update our internal\nceph_calc_object_layout method to use the ceph_pg type.  This allows us to\npass the full 32-bit precision of the pgid.seed to the callers.  It also\nallows some callers to avoid reaching into the request structures for the\nstruct ceph_object_layout fields.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "4f6a7e5ee1393ec4b243b39dac9f36992d161540",
      "tree": "547684ad1dc0e1e3e376e958ab74e164d6972623",
      "parents": [
        "ec73a754989c27628c9037887df919561280519c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Sat Feb 23 10:41:09 2013 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Feb 26 15:02:25 2013 -0800"
      },
      "message": "ceph: update support for PGID64, PGPOOL3, OSDENC protocol features\n\nSupport (and require) the PGID64, PGPOOL3, and OSDENC protocol features.\nThese have been present in ceph.git since v0.42, Feb 2012.  Require these\nfeatures to simplify support; nobody is running older userspace.\n\nNote that the new request and reply encoding is still not in place, so the new\ncode is not yet functional.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "ec73a754989c27628c9037887df919561280519c",
      "tree": "46c7ed58137fb3155a92f6b94620366c3edb7408",
      "parents": [
        "5b191d9914eb68257f47de9d5bfe099b77f0687c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue Feb 26 14:23:07 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Feb 26 15:02:11 2013 -0800"
      },
      "message": "ceph: update \"ceph_features.h\"\n\nThis updates \"include/linux/ceph/ceph_features.h\" so all the feature\nbits defined in the user space code are defined here.\n\nThe features supported by this implementation will still differ so\nthat\u0027s not updated here.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "5b191d9914eb68257f47de9d5bfe099b77f0687c",
      "tree": "2465631736897b02dd16de136ef5b69dadb943f1",
      "parents": [
        "12979354a1d6ef25d86f381e4d5f9e103f29913a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Sat Feb 23 10:38:16 2013 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Feb 26 15:01:57 2013 -0800"
      },
      "message": "libceph: decode into cpu-native ceph_pg type\n\nAlways decode data into our cpu-native ceph_pg type that has the correct\nfield widths.  Limit any remaining uses of ceph_pg_v1 to dealing with the\nlegacy protocol.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "12979354a1d6ef25d86f381e4d5f9e103f29913a",
      "tree": "95a435f9a3d64fbb4a48244db4e1fc7ebce00426",
      "parents": [
        "c47f9371545abe2510ac3b66c3fc180921816f65"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Jan 08 09:15:10 2013 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Feb 26 15:01:41 2013 -0800"
      },
      "message": "libceph: rename ceph_pg -\u003e ceph_pg_v1\n\nRename the old version this type to distinguish it from the new version.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "903bb32e890237ca43ab847e561e5377cfe0fdb3",
      "tree": "a2327dd33fe66cd73b30e298b91829b28a05ea7c",
      "parents": [
        "23ed6e13b320b33decb516cbe66e71b132df488d"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Feb 06 13:11:38 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue Feb 19 19:14:05 2013 -0600"
      },
      "message": "libceph: drop return value from page vector copy routines\n\nThe return values provided for ceph_copy_to_page_vector() and\nceph_copy_from_page_vector() serve no purpose, so get rid of them.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "b324814e8436772cb3367b14149ba003a9954525",
      "tree": "37ab98802744072a3e348623f1c880ae11546203",
      "parents": [
        "9e0eb85d5861d512759caf1301670b36d4c221ed"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Feb 06 13:11:38 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue Feb 19 19:14:04 2013 -0600"
      },
      "message": "libceph: use void pointers in page vector functions\n\nThe functions used for working with ceph page vectors are defined\nwith char pointers, but they\u0027re really intended to operate on\nuntyped data.  Change the types of these function parameters\nto (void *) to reflect this.\n\n(Note that the functions now assume void pointer arithmetic works\nlike arithmetic on char pointers.)\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "dd6f5e105d85e02bc41db0891eb07152b1746ad9",
      "tree": "68f72f5f00ead7b20ba2f240403689d7207b1cc1",
      "parents": [
        "a9f36c3ed48dbfbad4cf8ba92142873b62923300"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Feb 15 11:42:30 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 18 12:20:30 2013 -0600"
      },
      "message": "libceph: update ceph_fs.h\n\nUpdate most of \"include/linux/ceph/ceph_fs.h\" to match its user\nspace counterpart in \"src/include/ceph_fs.h\" in the ceph tree.\n\nEverything that has changed is either:\n    - added definitions (therefore no real effect on existing code)\n    - deleting unused symbols\n    - added or revised comments\n\nThere were some differences between the struct definitions for\nceph_mon_subscribe_item and the open field of ceph_mds_request_args;\nthose differences remain.\n\nThis and the next commit resolve:\n    http://tracker.ceph.com/issues/4165\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "4b568b1aaf23d0ce64b98d01d5ad1bcc7694440a",
      "tree": "ae843df0bdb5f5c4c008fc0dbee36c4608cde905",
      "parents": [
        "0315a7770983bbe69211efed1aaee08324acd54c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Feb 15 11:42:30 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 18 12:20:13 2013 -0600"
      },
      "message": "libceph: add ceph_osd_state_name()\n\nAdd the definition of ceph_osd_state_name(), to match its\ncounterpart in user space.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "0315a7770983bbe69211efed1aaee08324acd54c",
      "tree": "a0cc6d00660c7ec65c23979ab603891865a8d1c7",
      "parents": [
        "2d2f522699fe8b827087941eb31b9a12cf465f17"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Feb 15 11:42:30 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 18 12:20:08 2013 -0600"
      },
      "message": "libceph: update rados.h\n\nUpdate most of \"include/linux/ceph/rados.h\" to match its user space\ncounterpart in \"src/include/rados.h\" in the ceph tree.\n\nAlmost everything that has changed is either:\n    - added or revised comments\n    - added definitions (therefore no real effect on existing code)\n    - defining the same value a different way (e.g., \"1 \u003c\u003c 0\" vs \"1\")\n\nThe only exceptions are:\n    - The declaration of ceph_osd_state_name() was excluded; that\n      will be inserted in the next patch.\n    - ceph_osd_op_mode_read() and ceph_osd_op_mode_modify() are\n      defined differently, but they were never used in the kernel\n    - CEPH_OSD_FLAG_PEERSTAT is now CEPH_OSD_FLAG_PEERSTAT_OLD, but\n      that was never used in the kernel\n\nAnything that was present in this file but not in its user space\ncounterpart was left intact here.  I left the definitions of\nEOLDSNAPC and EBLACKLISTED using numerical values here; I\u0027m\nnot sure the right way to go with those.\n\nThis and the next two commits resolve:\n    http://tracker.ceph.com/issues/4164\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "2d2f522699fe8b827087941eb31b9a12cf465f17",
      "tree": "4661d5115a3bcabd5e4e1cfb38bad58fa8152597",
      "parents": [
        "3c663bbdcdf9296e0fe3362acb9e81f49d7b72c6"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Feb 15 11:42:30 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 18 12:20:05 2013 -0600"
      },
      "message": "libceph: kill ceph_osdc_wait_event()\n\nThere are no actual users of ceph_osdc_wait_event().  This would\nhave been one-shot events, but we no longer support those so just\nget rid of this function.\n\nSince this leaves nothing else that waits for the completion of an\nevent, we can get rid of the completion in a struct ceph_osd_event.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "3c663bbdcdf9296e0fe3362acb9e81f49d7b72c6",
      "tree": "6fe7358d5dfce2d39cde3f0b35a78808ab1b674d",
      "parents": [
        "60e56f138180e72fa8487d4b9c1c916013494f46"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Feb 15 11:42:30 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 18 12:20:00 2013 -0600"
      },
      "message": "libceph: kill ceph_osdc_create_event() \"one_shot\" parameter\n\nThere is only one caller of ceph_osdc_create_event(), and it\nprovides 0 as its \"one_shot\" argument.  Get rid of that argument and\njust use 0 in its place.\n\nReplace the code in handle_watch_notify() that executes if one_shot\nis nonzero in the event with a BUG_ON() call.\n\nWhile modifying \"osd_client.c\", give handle_watch_notify() static\nscope.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "60e56f138180e72fa8487d4b9c1c916013494f46",
      "tree": "e3fb48ffc88d22680167ed51946df024623a463a",
      "parents": [
        "60789380ae833061803030d51952a5a341e4dade"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Feb 15 11:42:29 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 18 12:19:54 2013 -0600"
      },
      "message": "libceph: kill ceph_calc_raw_layout()\n\nThere is no caller of ceph_calc_raw_layout() outside of libceph, so\nthere\u0027s no need to export from the module.\n\nFurthermore, there is only one caller, in calc_layout(), and it\nis not much more than a simple wrapper for that function.\n\nSo get rid of ceph_calc_raw_layout() and embed it instead within\ncalc_layout().\n\nWhile touching \"osd_client.c\", get rid of the unnecessary forward\ndeclaration of __send_request().\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "a3bea47e8bdd51d921e5b2045720d60140612c7c",
      "tree": "b628ec427b829445dfb243cc93e78249fc36efb5",
      "parents": [
        "2480882611e3ab844563dd3d0a822227604ab8fe"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Feb 15 11:42:29 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 18 12:19:39 2013 -0600"
      },
      "message": "ceph: kill ceph_osdc_new_request() \"num_reply\" parameter\n\nThe \"num_reply\" parameter to ceph_osdc_new_request() is never\nused inside that function, so get rid of it.\n\nNote that ceph_sync_write() passes 2 for that argument, while all\nother callers pass 1.  It doesn\u0027t matter, but perhaps someone should\nverify this doesn\u0027t indicate a problem.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "2480882611e3ab844563dd3d0a822227604ab8fe",
      "tree": "3d6aa23e2199a74bca470da02693c73d2a646c6b",
      "parents": [
        "fbf8685fb155e12a9f4d4b966c7b3442ed557687"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Feb 15 11:42:29 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 18 12:19:35 2013 -0600"
      },
      "message": "ceph: kill ceph_osdc_writepages() \"flags\" parameter\n\nThere is only one caller of ceph_osdc_writepages(), and it always\npasses 0 as its \"flags\" argument.  Get rid of that argument and\nreplace its use in ceph_osdc_writepages() with 0.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "fbf8685fb155e12a9f4d4b966c7b3442ed557687",
      "tree": "1dc58ef2dc0ad95b0462d89eaa7dfae1f61d7e42",
      "parents": [
        "87f979d390f9ecfa3d0038a9f9a002a62f8a1895"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Feb 15 11:42:29 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 18 12:19:28 2013 -0600"
      },
      "message": "ceph: kill ceph_osdc_writepages() \"dosync\" parameter\n\nThere is only one caller of ceph_osdc_writepages(), and it always\npasses 0 as its \"dosync\" argument.  Get rid of that argument and\nreplace its use in ceph_osdc_writepages() with 0.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "87f979d390f9ecfa3d0038a9f9a002a62f8a1895",
      "tree": "a1202bf2d1b29541f31875b9445d446d5cf5bfe9",
      "parents": [
        "e7e319a9c51409c7effe34333ea26facf2fab9e1"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Feb 15 11:42:29 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 18 12:19:22 2013 -0600"
      },
      "message": "ceph: kill ceph_osdc_writepages() \"nofail\" parameter\n\nThere is only one caller of ceph_osdc_writepages(), and it always\npasses the value true as its \"nofail\" argument.  Get rid of that\nargument and replace its use in ceph_osdc_writepages() with the\nconstant value true.\n\nThis and a number of cleanup patches that follow resolve:\n    http://tracker.ceph.com/issues/4126\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "e7e319a9c51409c7effe34333ea26facf2fab9e1",
      "tree": "e02db746bd2386ee0e8b82298ba5ec1f455e5217",
      "parents": [
        "077413082f9ade9ca4d9774dbdc81ee7256d8089"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Feb 14 12:16:43 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Feb 18 12:19:07 2013 -0600"
      },
      "message": "libceph: improve packing in struct ceph_osd_req_op\n\nThe layout of struct ceph_osd_req_op leaves lots of holes.\nRearranging things a little for better field alignment\nreduces the size by a third.\n\nThis resolves:\n    http://tracker.ceph.com/issues/4163\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "72fe25e3460c8673984370208e0e6261101372d6",
      "tree": "fae2e1db42c35f14db6c1f952f460b49dcffea89",
      "parents": [
        "b82d167be64b3e88d9434d8a98ce83c83a07aa48"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Jan 30 11:13:33 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed Feb 13 18:29:11 2013 -0800"
      },
      "message": "libceph: add a compatibility check interface\n\nAn upcoming change implements semantic change that could lead to\na crash if an old version of the libceph kernel module is used with\na new version of the rbd kernel module.\n\nIn order to preclude that possibility, this adds a compatibilty\ncheck interface.  If this interface doesn\u0027t exist, the modules are\nobviously not compatible.  But if it does exist, this provides a way\nof letting the caller know whether it will operate properly with\nthis libceph module.\n\nPerhaps confusingly, it returns false right now.  The semantic\nchange mentioned above will make it return true.\n\nThis resolves:\n    http://tracker.ceph.com/issues/3800\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "3ebc21f7bc2f9c0145bbbf0f12430b766a200f9f",
      "tree": "1434bd538dcd99ae38044580b29d83db84a1a06d",
      "parents": [
        "695b711933689ea51af782760f4b1e2c6a42a631"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 31 16:02:01 2013 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed Feb 13 18:27:40 2013 -0800"
      },
      "message": "libceph: fix messenger CONFIG_BLOCK dependencies\n\nThe ceph messenger has a few spots that are only used when\nbio messages are supported, and that\u0027s only when CONFIG_BLOCK\nis defined.  This surrounds a couple of spots with #ifdef\u0027s\nthat would cause a problem if CONFIG_BLOCK were not present\nin the kernel configuration.\n\nThis resolves:\n    http://tracker.ceph.com/issues/3976\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "969e5aa3b0162a02c4f287d48ff58ca2145acf1b",
      "tree": "1af8e8e47e7352c6d3b4abfdb4aea6bd9458666f",
      "parents": [
        "949db153b6466c6f7cad5a427ecea94985927311",
        "1ec3911dbd19076bcdfe5540096ff67f91a6ec02"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Jan 30 07:54:34 2013 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Jan 30 07:54:34 2013 -0600"
      },
      "message": "Merge branch \u0027testing\u0027 of github.com:ceph/ceph-client into v3.8-rc5-testing\n"
    },
    {
      "commit": "2b5fc648af5eec2f4fe984cb6b926214e02c5cf4",
      "tree": "ec260601fdc9cdcbd71a296c61f54fcc0cbf1e82",
      "parents": [
        "30573d680355ca0de4db2113b9080cd078ac726f"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Nov 14 09:38:20 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 17 16:34:58 2013 -0600"
      },
      "message": "rbd: kill ceph_osd_req_op-\u003eflags\n\nThe flags field of struct ceph_osd_req_op is never used, so just get\nrid of it.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "ae7ca4a35b1f5df86e2c32b2cfc01a8d528c7b8c",
      "tree": "a6dfed1fd8f50cf59cd72be27408f51ee621607c",
      "parents": [
        "d07c09589f533db9ab500ac38151bc9f3a4d0648"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue Nov 13 21:11:15 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 17 16:34:57 2013 -0600"
      },
      "message": "libceph: pass num_op with ops\n\nBoth ceph_osdc_alloc_request() and ceph_osdc_build_request() are\nprovided an array of ceph osd request operations.  Rather than just\npassing the number of operations in the array, the caller is\nrequired append an additional zeroed operation structure to signal\nthe end of the array.\n\nAll callers know the number of operations at the time these\nfunctions are called, so drop the silly zero entry and supply that\nnumber directly.  As a result, get_num_ops() is no longer needed.\nThis also means that ceph_osdc_alloc_request() never uses its ops\nargument, so that can be dropped.\n\nAlso rbd_create_rw_ops() no longer needs to add one to reserve room\nfor the additional op.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "54a5400721da7fa5a16cea151aade5bdfee74111",
      "tree": "285ba131da6c5b700c0fda64858de938f45959c6",
      "parents": [
        "d178a9e74006e80f568d87e29f2a68f14fc7cbb1"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue Nov 13 21:11:15 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 17 16:34:57 2013 -0600"
      },
      "message": "libceph: don\u0027t set pages or bio in ceph_osdc_alloc_request()\n\nOnly one of the two callers of ceph_osdc_alloc_request() provides\npage or bio data for its payload.  And essentially all that function\nwas doing with those arguments was assigning them to fields in the\nosd request structure.\n\nSimplify ceph_osdc_alloc_request() by having the caller take care of\nmaking those assignments\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "d178a9e74006e80f568d87e29f2a68f14fc7cbb1",
      "tree": "a7f59f104771c9ad4ed4f2d86d7e3a2299e932a8",
      "parents": [
        "e75b45cf36565fd8ba206a9d80f670a86e61ba2f"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue Nov 13 21:11:15 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 17 15:52:05 2013 -0600"
      },
      "message": "libceph: don\u0027t set flags in ceph_osdc_alloc_request()\n\nThe only thing ceph_osdc_alloc_request() really does with the\nflags value it is passed is assign it to the newly-created\nosd request structure.  Do that in the caller instead.\n\nBoth callers subsequently call ceph_osdc_build_request(), so have\nthat function (instead of ceph_osdc_alloc_request()) issue a warning\nif a request comes through with neither the read nor write flags set.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "e75b45cf36565fd8ba206a9d80f670a86e61ba2f",
      "tree": "1a0c8171814b4fe7acd2e8c1ed719afe8d8a448d",
      "parents": [
        "4d6b250bf18d44571d69a0f4afec4b6a1969729f"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue Nov 13 21:11:14 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 17 15:52:05 2013 -0600"
      },
      "message": "libceph: drop osdc from ceph_calc_raw_layout()\n\nThe osdc parameter to ceph_calc_raw_layout() is not used, so get rid\nof it.  Consequently, the corresponding parameter in calc_layout()\nbecomes unused, so get rid of that as well.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    }
  ],
  "next": "4d6b250bf18d44571d69a0f4afec4b6a1969729f"
}
