)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "4d6b250bf18d44571d69a0f4afec4b6a1969729f",
      "tree": "8f357c6f3a8871ff678cb6a9e024d1282f8c5dfb",
      "parents": [
        "e8afad656cbcd06d02a7bacd4b318fa0e2907de0"
      ],
      "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: drop snapid in ceph_calc_raw_layout()\n\nA snapshot id must be provided to ceph_calc_raw_layout() even though\nit is not needed at all for calculating the layout.\n\nWhere the snapshot id *is* needed is when building the request\nmessage for an osd operation.\n\nDrop the snapid parameter from ceph_calc_raw_layout() and pass\nthat value instead in ceph_osdc_build_request().\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "e8afad656cbcd06d02a7bacd4b318fa0e2907de0",
      "tree": "800e3e84158606a74c2b0c2ecf1e48581aca16ed",
      "parents": [
        "0120be3c60d46d6d55f4bf7a3d654cc705eb0c54"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Nov 14 09:38:19 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 17 15:52:04 2013 -0600"
      },
      "message": "libceph: pass length to ceph_calc_file_object_mapping()\n\nceph_calc_file_object_mapping() takes (among other things) a \"file\"\noffset and length, and based on the layout, determines the object\nnumber (\"bno\") backing the affected portion of the file\u0027s data and\nthe offset into that object where the desired range begins.  It also\ncomputes the size that should be used for the request--either the\namount requested or something less if that would exceed the end of\nthe object.\n\nThis patch changes the input length parameter in this function so it\nis used only for input.  That is, the argument will be passed by\nvalue rather than by address, so the value provided won\u0027t get\nupdated by the function.\n\nThe value would only get updated if the length would surpass the\ncurrent object, and in that case the value it got updated to would\nbe exactly that returned in *oxlen.\n\nOnly one of the two callers is affected by this change.  Update\nceph_calc_raw_layout() so it records any updated value.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "0120be3c60d46d6d55f4bf7a3d654cc705eb0c54",
      "tree": "5cb52ab14873ee0e33a6a2bc6115373b305114bb",
      "parents": [
        "5b9d1b1cd46aa6c8abf891f25c15aee31538da7e"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Nov 14 09:38:19 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 17 15:52:04 2013 -0600"
      },
      "message": "libceph: pass length to ceph_osdc_build_request()\n\nThe len argument to ceph_osdc_build_request() is set up to be\npassed by address, but that function never updates its value\nso there\u0027s no need to do this.  Tighten up the interface by\npassing the length directly.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "c885837f7d4f8c4f5cb2a744cc6929bc078e9dc0",
      "tree": "2b4e60e8e7aee98e8f4e8c56119978160ba85cfd",
      "parents": [
        "7c3d22cf16f1bbcb37a73e88338c042bb49ff112"
      ],
      "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:03 2013 -0600"
      },
      "message": "libceph: always allow trail in osd request\n\nAn osd request structure contains an optional trail portion, which\nif present will contain data to be passed in the payload portion of\nthe message containing the request.  The trail field is a\nceph_pagelist pointer, and if null it indicates there is no trail.\n\nA ceph_pagelist structure contains a length field, and it can\nlegitimately hold value 0.  Make use of this to change the\ninterpretation of the \"trail\" of an osd request so that every osd\nrequest has trailing data, it just might have length 0.\n\nThis means we change the r_trail field in a ceph_osd_request\nstructure from a pointer to a structure that is always initialized.\n\nNote that in ceph_osdc_start_request(), the trail pointer (or now\naddress of that structure) is assigned to a ceph message\u0027s trail\nfield.  Here\u0027s why that\u0027s still OK (looking at net/ceph/messenger.c):\n    - What would have resulted in a null pointer previously will now\n      refer to a 0-length page list.  That message trail pointer\n      is used in two functions, write_partial_msg_pages() and\n      out_msg_pos_next().\n    - In write_partial_msg_pages(), a null page list pointer is\n      handled the same as a message with 0-length trail, and both\n      result in a \"in_trail\" variable set to false.  The trail\n      pointer is only used if in_trail is true.\n    - The only other place the message trail pointer is used is\n      out_msg_pos_next().  That function is only called by\n      write_partial_msg_pages() and only touches the trail pointer\n      if the in_trail value it is passed is true.\nTherefore a null ceph_msg-\u003etrail pointer is equivalent to a non-null\npointer referring to a 0-length page list structure.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "af77f26caa35a95af09d1dac5c513b3901de7e37",
      "tree": "9c5efeda0e8eead5ece30957f88d6155f677cb0c",
      "parents": [
        "0ec8ce87f3bb5e4a561190f5320934e003405b6f"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Nov 09 08:43:15 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 17 15:52:01 2013 -0600"
      },
      "message": "rbd: drop oid parameters from ceph_osdc_build_request()\n\nThe last two parameters to ceph_osd_build_request() describe the\nobject id, but the values passed always come from the osd request\nstructure whose address is also provided.  Get rid of those last\ntwo parameters.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "dd5f049dbdf973d9bceebef1fd73647a5ede6732",
      "tree": "6dc55e8e88ac00c7fb1b150269e90bc0c231dfa5",
      "parents": [
        "4caf35f9ecdca1feef1d2e5e223b78e52ffbea87"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Nov 01 08:39:27 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 17 14:09:08 2013 -0600"
      },
      "message": "ceph: define ceph_encode_8_safe()\n\nIt\u0027s kind of a silly macro, but ceph_encode_8_safe() is the only one\nmissing from an otherwise pretty complete set.  It\u0027s not used, but\nneither are a couple of the others in this set.\n\nWhile in there, insert some whitespace to tidy up the alignment of\nthe line-terminating backslashes in some of the macro definitions.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Dan Mick \u003cdan.mick@inktank.com\u003e\n"
    },
    {
      "commit": "1604f488ac2dcce33c8218e75a000e8c5fb57e61",
      "tree": "084b399c1c9be245e62543a024d727241f7a9ad4",
      "parents": [
        "390306c38dd43908f7f7730229999790a773d1d5"
      ],
      "author": {
        "name": "Jim Schutt",
        "email": "jaschut@sandia.gov",
        "time": "Fri Nov 30 09:15:25 2012 -0700"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 17 12:42:39 2013 -0600"
      },
      "message": "libceph: for chooseleaf rules, retry CRUSH map descent from root if leaf is failed\n\nAdd libceph support for a new CRUSH tunable recently added to Ceph servers.\n\nConsider the CRUSH rule\n  step chooseleaf firstn 0 type \u003cnode_type\u003e\n\nThis rule means that \u003cn\u003e replicas will be chosen in a manner such that\neach chosen leaf\u0027s branch will contain a unique instance of \u003cnode_type\u003e.\n\nWhen an object is re-replicated after a leaf failure, if the CRUSH map uses\na chooseleaf rule the remapped replica ends up under the \u003cnode_type\u003e bucket\nthat held the failed leaf.  This causes uneven data distribution across the\nstorage cluster, to the point that when all the leaves but one fail under a\nparticular \u003cnode_type\u003e bucket, that remaining leaf holds all the data from\nits failed peers.\n\nThis behavior also limits the number of peers that can participate in the\nre-replication of the data held by the failed leaf, which increases the\ntime required to re-replicate after a failure.\n\nFor a chooseleaf CRUSH rule, the tree descent has two steps: call them the\ninner and outer descents.\n\nIf the tree descent down to \u003cnode_type\u003e is the outer descent, and the descent\nfrom \u003cnode_type\u003e down to a leaf is the inner descent, the issue is that a\ndown leaf is detected on the inner descent, so only the inner descent is\nretried.\n\nIn order to disperse re-replicated data as widely as possible across a\nstorage cluster after a failure, we want to retry the outer descent. So,\nfix up crush_choose() to allow the inner descent to return immediately on\nchoosing a failed leaf.  Wire this up as a new CRUSH tunable.\n\nNote that after this change, for a chooseleaf rule, if the primary OSD\nin a placement group has failed, choosing a replacement may result in\none of the other OSDs in the PG colliding with the new primary.  This\nrequires that OSD\u0027s data for that PG to need moving as well.  This\nseems unavoidable but should be relatively rare.\n\nThis corresponds to ceph.git commit 88f218181a9e6d2292e2697fc93797d0f6d6e5dc.\n\nSigned-off-by: Jim Schutt \u003cjaschut@sandia.gov\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "6e8575faa8fa680d59404a4d58d12190667be815",
      "tree": "702820d6f2acc31fcb8a6efd18471d390a54e962",
      "parents": [
        "79aec9844de339531f05b019644ccaf5dd777144"
      ],
      "author": {
        "name": "Sam Lang",
        "email": "sam.lang@inktank.com",
        "time": "Fri Dec 28 09:56:46 2012 -0800"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jan 17 12:42:36 2013 -0600"
      },
      "message": "ceph: Check for created flag in response from mds\n\nThe mds now sends back a created inode if the create request\nperformed the create.  If the file already existed, no inode is\nreturned in the reply.  This allows ceph to set the created flag\nin atomic_open so that permissions are properly checked in the case\nthat the file wasn\u0027t created by the create call to the mds.\n\nTo ensure compability with previous kernels, a feature for sending\nback the inode in the create reply was added, so that the mds will\nonly send back the inode if the client indicates it supports the\nfeature.\n\nSigned-off-by: Sam Lang \u003csam.lang@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "40889e8d9fc6355980cf2bc94ef4356c10dec4ec",
      "tree": "c03f4e218477052c665cd9b01352f83e32c4a593",
      "parents": [
        "1ca22254b32657d65315af261ae0e699b8427fb7",
        "c3e946ce7276faf0b302acd25c7b874edbeba661"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 20 14:00:13 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 20 14:00:13 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\nPull Ceph update from Sage Weil:\n \"There are a few different groups of commits here.  The largest is\n  Alex\u0027s ongoing work to enable the coming RBD features (cloning,\n  striping).  There is some cleanup in libceph that goes along with it.\n\n  Cyril and David have fixed some problems with NFS reexport (leaking\n  dentries and page locks), and there is a batch of patches from Yan\n  fixing problems with the fs client when running against a clustered\n  MDS.  There are a few bug fixes mixed in for good measure, many of\n  which will be going to the stable trees once they\u0027re upstream.\n\n  My apologies for the late pull.  There is still a gremlin in the rbd\n  map/unmap code and I was hoping to include the fix for that as well,\n  but we haven\u0027t been able to confirm the fix is correct yet; I\u0027ll send\n  that in a separate pull once it\u0027s nailed down.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (68 commits)\n  rbd: get rid of rbd_{get,put}_dev()\n  libceph: register request before unregister linger\n  libceph: don\u0027t use rb_init_node() in ceph_osdc_alloc_request()\n  libceph: init event-\u003enode in ceph_osdc_create_event()\n  libceph: init osd-\u003eo_node in create_osd()\n  libceph: report connection fault with warning\n  libceph: socket can close in any connection state\n  rbd: don\u0027t use ENOTSUPP\n  rbd: remove linger unconditionally\n  rbd: get rid of RBD_MAX_SEG_NAME_LEN\n  libceph: avoid using freed osd in __kick_osd_requests()\n  ceph: don\u0027t reference req after put\n  rbd: do not allow remove of mounted-on image\n  libceph: Unlock unprocessed pages in start_read() error path\n  ceph: call handle_cap_grant() for cap import message\n  ceph: Fix __ceph_do_pending_vmtruncate\n  ceph: Don\u0027t add dirty inode to dirty list if caps is in migration\n  ceph: Fix infinite loop in __wake_requests\n  ceph: Don\u0027t update i_max_size when handling non-auth cap\n  bdi_register: add __printf verification, fix arg mismatch\n  ...\n"
    },
    {
      "commit": "83aff95eb9d60aff5497e9f44a2ae906b86d8e88",
      "tree": "b191a3640990e4b7cc13b2db423449b90086f71b",
      "parents": [
        "cfc84c9f73ab8a6933bd4f36efac1196cddad581"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed Nov 28 12:28:24 2012 -0800"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Dec 13 08:13:06 2012 -0600"
      },
      "message": "libceph: remove \u0027osdtimeout\u0027 option\n\nThis would reset a connection with any OSD that had an outstanding\nrequest that was taking more than N seconds.  The idea was that if the\nOSD was buggy, the client could compensate by resending the request.\n\nIn reality, this only served to hide server bugs, and we haven\u0027t\nactually seen such a bug in quite a while.  Moreover, the userspace\nclient code never did this.\n\nMore importantly, often the request is taking a long time because the\nOSD is trying to recover, or overloaded, and killing the connection\nand retrying would only make the situation worse by giving the OSD\nmore work to do.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "72afc71ffca0f444ee0e1ef8c7e34ab209bb48b3",
      "tree": "c9849491d6f31db1ef1be5a8f7fe186c108830aa",
      "parents": [
        "86b00e0da6be7bbc16412f126c5b548ac5d91d50"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue Oct 30 19:40:33 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Nov 01 07:55:42 2012 -0500"
      },
      "message": "libceph: define ceph_pg_pool_name_by_id()\n\nDefine and export function ceph_pg_pool_name_by_id() to supply\nthe name of a pg pool whose id is given.  This will be used by\nthe next patch.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "86b00e0da6be7bbc16412f126c5b548ac5d91d50",
      "tree": "466c0dcecd75ca707f33b18265be969e385f366c",
      "parents": [
        "a92ffdf8a9b09f8fae9a8f418f87f30a5e459570"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Oct 25 23:34:42 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Nov 01 07:55:42 2012 -0500"
      },
      "message": "rbd: get parent spec for version 2 images\n\nAdd support for getting the the information identifying the parent\nimage for rbd images that have them.  The child image holds a\nreference to its parent image specification structure.  Create a new\nentry \"parent\" in /sys/bus/rbd/image/N/ to report the identifying\ninformation for the parent image, if any.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "7035cdf36d5c4d913f68ff97e1c2e5603500d946",
      "tree": "eee5680c16771cb23bc6d3a47bc7b6f350171b22",
      "parents": [
        "6432f2128414edbea5fd4f6c4fa4c28d0e1c6151",
        "6285bc231277419255f3498d3eb5ddc9f8e7fe79"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 08 06:38:18 2012 +0900"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 08 06:38:18 2012 +0900"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\nPull ceph updates from Sage Weil:\n \"The bulk of this pull is a series from Alex that refactors and cleans\n  up the RBD code to lay the groundwork for supporting the new image\n  format and evolving feature set.  There are also some cleanups in\n  libceph, and for ceph there\u0027s fixed validation of file striping\n  layouts and a bugfix in the code handling a shrinking MDS cluster.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (71 commits)\n  ceph: avoid 32-bit page index overflow\n  ceph: return EIO on invalid layout on GET_DATALOC ioctl\n  rbd: BUG on invalid layout\n  ceph: propagate layout error on osd request creation\n  libceph: check for invalid mapping\n  ceph: convert to use le32_add_cpu()\n  ceph: Fix oops when handling mdsmap that decreases max_mds\n  rbd: update remaining header fields for v2\n  rbd: get snapshot name for a v2 image\n  rbd: get the snapshot context for a v2 image\n  rbd: get image features for a v2 image\n  rbd: get the object prefix for a v2 rbd image\n  rbd: add code to get the size of a v2 rbd image\n  rbd: lay out header probe infrastructure\n  rbd: encapsulate code that gets snapshot info\n  rbd: add an rbd features field\n  rbd: don\u0027t use index in __rbd_add_snap_dev()\n  rbd: kill create_snap sysfs entry\n  rbd: define rbd_dev_image_id()\n  rbd: define some new format constants\n  ...\n"
    },
    {
      "commit": "a1ce39288e6fbefdd8d607021d02384eb4a20b99",
      "tree": "c72e67f0c9d828420788f9086a19df1b9a7e39ae",
      "parents": [
        "760285e7e7ab282c25b5e90816f7c47000557f4f"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Oct 02 18:01:25 2012 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Oct 02 18:01:25 2012 +0100"
      },
      "message": "UAPI: (Scripted) Convert #include \"...\" to #include \u003cpath/...\u003e in kernel system headers\n\nConvert #include \"...\" to #include \u003cpath/...\u003e in kernel system headers.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nAcked-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nAcked-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nAcked-by: Dave Jones \u003cdavej@redhat.com\u003e\n"
    },
    {
      "commit": "d63b77f4c552cc3a20506871046ab0fcbc332609",
      "tree": "a428fe42c092c0f6126a99fbc788ae96e8922a97",
      "parents": [
        "b905a7f8b7a61c192927d0324f2ea6c998f451ba"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Sep 24 20:59:48 2012 -0700"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Oct 01 17:20:00 2012 -0500"
      },
      "message": "libceph: check for invalid mapping\n\nIf we encounter an invalid (e.g., zeroed) mapping, return an error\nand avoid a divide by zero.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "290e33593d76d1cebf873da50e036559c4820af9",
      "tree": "e277993f8ce1d8dcc0b368662e71435d71d6654e",
      "parents": [
        "c98f533c9497e285109a047bfb955d683f33f7e4"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Aug 17 09:47:49 2012 -0700"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Mon Oct 01 14:30:49 2012 -0500"
      },
      "message": "libceph: remove unused monc-\u003ehave_fsid\n\nThis is unused; use monc-\u003eclient-\u003ehave_fsid.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "4a8616920860920abaa51193146fe36b38ef09aa",
      "tree": "306a64ebcfaaae76b1b45d8f8916e6f68a190255",
      "parents": [
        "8dacc7da69a491c515851e68de6036f21b5663ce"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jul 20 17:29:55 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 18:16:01 2012 -0700"
      },
      "message": "libceph: clean up con flags\n\nRename flags with CON_FLAG prefix, move the definitions into the c file,\nand (better) document their meaning.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "8dacc7da69a491c515851e68de6036f21b5663ce",
      "tree": "72e96abb5bc27d2a185cdea2f08a090302f0ede3",
      "parents": [
        "d7353dd5aaf22ed611fbcd0d4a4a12fb30659290"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jul 20 17:24:40 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 18:16:00 2012 -0700"
      },
      "message": "libceph: replace connection state bits with states\n\nUse a simple set of 6 enumerated values for the socket states (CON_STATE_*)\nand use those instead of the state bits.  All of the con-\u003estate checks are\nnow under the protection of the con mutex, so this is safe.  It also\nsimplifies many of the state checks because we can check for anything other\nthan the expected state instead of various bits for races we can think of.\n\nThis appears to hold up well to stress testing both with and without socket\nfailure injection on the server side.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "aa711ee3402ad10ffd5b70ce0417fadc9a95cccf",
      "tree": "2400f84b9bc87fbd989844c4e2462809f69e9a96",
      "parents": [
        "bd919d45aa61c19d9ed82548d6deb06bcae31153"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Jul 13 20:35:11 2012 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 18:15:47 2012 -0700"
      },
      "message": "ceph: define snap counts as u32 everywhere\n\nThere are two structures in which a count of snapshots are\nmaintained:\n\n    struct ceph_snap_context {\n\t...\n        u32 num_snaps;\n\t...\n    }\nand\n    struct ceph_snap_realm {\n\t...\n        u32 num_prior_parent_snaps;   /*  had prior to parent_since */\n\t...\n        u32 num_snaps;\n\t...\n    }\n\nThese fields never take on negative values (e.g., to hold special\nmeaning), and so are really inherently unsigned.  Furthermore they\ntake their value from over-the-wire or on-disk formatted 32-bit\nvalues.\n\nSo change their definition to have type u32, and change some spots\nelsewhere in the code to account for this change.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "546f04ef716dd49521774653d8b032a7d64c05d9",
      "tree": "162f548fc7a81b05eb1db715997b3a04693c1bcc",
      "parents": [
        "1fe60e51a3744528f3939b1b1167ca909133d9ae"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 18:15:23 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 18:15:23 2012 -0700"
      },
      "message": "libceph: support crush tunables\n\nThe server side recently added support for tuning some magic\ncrush variables. Decode these variables if they are present, or use the\ndefault values if they are not present.\n\nCorresponds to ceph.git commit 89af369c25f274fe62ef730e5e8aad0c54f1e5a5.\n\nSigned-off-by: caleb miles \u003ccaleb.miles@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\n"
    },
    {
      "commit": "1fe60e51a3744528f3939b1b1167ca909133d9ae",
      "tree": "06ca8731f1be425ffbd6ffcdfd9e94b89b05ceec",
      "parents": [
        "d1f57ea66369b5c34bd42f104b8070db409447f9"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 16:23:22 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 16:23:22 2012 -0700"
      },
      "message": "libceph: move feature bits to separate header\n\nThis is simply cleanup that will keep things more closely synced with the\nuserland code.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\n"
    },
    {
      "commit": "f8c36c58accd5c53a472b5c289910565b3df9f9d",
      "tree": "905ff1a9df30c0200732af71b806c39145dcd641",
      "parents": [
        "ad4f232f28e8059fa1de51f3127d8a6a2759ef16"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed Jul 11 08:24:45 2012 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 09:29:57 2012 -0700"
      },
      "message": "libceph: define ceph_extract_encoded_string()\n\nThis adds a new utility routine which will return a dynamically-\nallocated buffer containing a string that has been decoded from ceph\nover-the-wire format.  It also returns the length of the string\nif the address of a size variable is supplied to receive it.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "c61a1abd215c1ccd6fa73104c79e79987ed3aa98",
      "tree": "bd3e97181584049386a85f338623b76cf5d83952",
      "parents": [
        "8842b3be96c376f174ae0d4f282d14728ad5febf"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue Jul 03 16:01:18 2012 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 09:29:55 2012 -0700"
      },
      "message": "libceph: fix off-by-one bug in ceph_encode_filepath()\n\nThere is a BUG_ON() call that doesn\u0027t account for the single byte\nstructure version at the start of an encoded filepath in\nceph_encode_filepath().  Fix that.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nReviewed-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e\n"
    },
    {
      "commit": "a2a3258417eb6a1799cf893350771428875a8287",
      "tree": "f8906aa980d79af72e7e02d5592512a914c4b721",
      "parents": [
        "a16cb1f70799c851410d9dca0a24122e258df06c"
      ],
      "author": {
        "name": "Guanjun He",
        "email": "gjhe@suse.com",
        "time": "Sun Jul 08 19:50:33 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 09:29:53 2012 -0700"
      },
      "message": "libceph: prevent the race of incoming work during teardown\n\nAdd an atomic variable \u0027stopping\u0027 as flag in struct ceph_messenger,\nset this flag to 1 in function ceph_destroy_client(), and add the condition code\nin function ceph_data_ready() to test the flag value, if true(1), just return.\n\nSigned-off-by: Guanjun He \u003cgjhe@suse.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "a16cb1f70799c851410d9dca0a24122e258df06c",
      "tree": "0290805d3594d770da3937da7fa68841c1e294ac",
      "parents": [
        "cd43045c2de60f40a0aea49bfb252a2eafe58f8c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Tue Jul 10 11:53:34 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 09:29:52 2012 -0700"
      },
      "message": "libceph: fix messenger retry\n\nIn ancient times, the messenger could both initiate and accept connections.\nAn artifact if that was data structures to store/process an incoming\nceph_msg_connect request and send an outgoing ceph_msg_connect_reply.\nSadly, the negotiation code was referencing those structures and ignoring\nimportant information (like the peer\u0027s connect_seq) from the correct ones.\n\nAmong other things, this fixes tight reconnect loops where the server sends\nRETRY_SESSION and we (the client) retries with the same connect_seq as last\ntime.  This bug pretty easily triggered by injecting socket failures on the\nMDS and running some fs workload like workunits/direct_io/test_sync_io.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "d50b409fb8698571d8209e5adfe122e287e31290",
      "tree": "1cd91dd0bc9964e115253a0d58bbef6a12f8f015",
      "parents": [
        "fbb85a478f6d4cce6942f1c25c6a68ec5b1e7e7f"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 09 14:22:34 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon Jul 30 09:29:50 2012 -0700"
      },
      "message": "libceph: initialize msgpool message types\n\nInitialize the type field for messages in a msgpool.  The caller was doing\nthis for osd ops, but not for the reply messages.\n\nReported-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "b7a9e5dd40f17a48a72f249b8bbc989b63bae5fd",
      "tree": "f4951e53776e2ec45f9b539b786be67c8a7f42a2",
      "parents": [
        "261030215d970c62f799e6e508e3c68fc7ec2aa9"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Wed Jun 27 12:24:08 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Thu Jul 05 21:14:35 2012 -0700"
      },
      "message": "libceph: set peer name on con_open, not init\n\nThe peer name may change on each open attempt, even when the connection is\nreused.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "261030215d970c62f799e6e508e3c68fc7ec2aa9",
      "tree": "b62f453d7e1b7901560c0ea4431870e005270362",
      "parents": [
        "bc18f4b1c850ab355e38373fbb60fd28568d84b5"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Thu Jun 21 12:49:23 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Thu Jul 05 21:14:34 2012 -0700"
      },
      "message": "libceph: drop declaration of ceph_con_get()\n\nFor some reason the declaration of ceph_con_get() and\nceph_con_put() did not get deleted in this commit:\n    d59315ca libceph: drop ceph_con_get/put helpers and nref member\n\nClean that up.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\n"
    },
    {
      "commit": "e27947c767f5bed15048f4e4dad3e2eb69133697",
      "tree": "7521d46e58b360930d95f7eeb86396d4f729db57",
      "parents": [
        "3ec50d1868a9e0493046400bb1fdd054c7f64ebd"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 23 14:35:23 2012 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Thu Jul 05 21:14:27 2012 -0700"
      },
      "message": "libceph: define and use an explicit CONNECTED state\n\nThere is no state explicitly defined when a ceph connection is fully\noperational.  So define one.\n\nIt\u0027s set when the connection sequence completes successfully, and is\ncleared when the connection gets closed.\n\nBe a little more careful when examining the old state when a socket\ndisconnect event is reported.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "d59315ca8c0de00df9b363f94a2641a30961ca1c",
      "tree": "b2e8a2fe8633d6ac194d41e08a8c854719a6fb23",
      "parents": [
        "36eb71aa57e6a33d61fd90a2fd87f00c6844bc86"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Thu Jun 21 12:49:23 2012 -0700"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Jun 22 08:13:45 2012 -0500"
      },
      "message": "libceph: drop ceph_con_get/put helpers and nref member\n\nThese are no longer used.  Every ceph_connection instance is embedded in\nanother structure, and refcounts manipulated via the get/put ops.\n\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "9a64e8e0ace51b309fdcff4b4754b3649250382a",
      "tree": "1f0d75c196c5ab0408c55ed6cf3a152f1f921e15",
      "parents": [
        "f3dea7edd3d449fe7a6d402c1ce56a294b985261",
        "f8f5701bdaf9134b1f90e5044a82c66324d2073f"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jun 15 12:32:04 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Fri Jun 15 12:32:04 2012 -0700"
      },
      "message": "Merge tag \u0027v3.5-rc1\u0027\n\nLinux 3.5-rc1\n\nConflicts:\n\tnet/ceph/messenger.c\n"
    },
    {
      "commit": "8921d114f5574c6da2cdd00749d185633ecf88f3",
      "tree": "fcbb7ffc4061c9ea0260f5b8643abf3096d7267e",
      "parents": [
        "6740a845b2543cc46e1902ba21bac743fbadd0dc"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Jun 01 14:56:43 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Jun 06 09:23:55 2012 -0500"
      },
      "message": "libceph: make ceph_con_revoke_message() a msg op\n\nceph_con_revoke_message() is passed both a message and a ceph\nconnection.  A ceph_msg allocated for incoming messages on a\nconnection always has a pointer to that connection, so there\u0027s no\nneed to provide the connection when revoking such a message.\n\nNote that the existing logic does not preclude the message supplied\nbeing a null/bogus message pointer.  The only user of this interface\nis the OSD client, and the only value an osd client passes is a\nrequest\u0027s r_reply field.  That is always non-null (except briefly in\nan error path in ceph_osdc_alloc_request(), and that drops the\nonly reference so the request won\u0027t ever have a reply to revoke).\nSo we can safely assume the passed-in message is non-null, but add a\nBUG_ON() to make it very obvious we are imposing this restriction.\n\nRename the function ceph_msg_revoke_incoming() to reflect that it is\nreally an operation on an incoming message.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "6740a845b2543cc46e1902ba21bac743fbadd0dc",
      "tree": "c59f9b2eaf77083a1432ee1c24ffbffc081b9c0d",
      "parents": [
        "92ce034b5a740046cc643a21ea21eaad589e0043"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Jun 01 14:56:43 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Jun 06 09:23:54 2012 -0500"
      },
      "message": "libceph: make ceph_con_revoke() a msg operation\n\nceph_con_revoke() is passed both a message and a ceph connection.\nNow that any message associated with a connection holds a pointer\nto that connection, there\u0027s no need to provide the connection when\nrevoking a message.\n\nThis has the added benefit of precluding the possibility of the\nproviding the wrong connection pointer.  If the message\u0027s connection\npointer is null, it is not being tracked by any connection, so\nrevoking it is a no-op.  This is supported as a convenience for\nupper layers, so they can revoke a message that is not actually\n\"in flight.\"\n\nRename the function ceph_msg_revoke() to reflect that it is really\nan operation on a message, not a connection.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "38941f8031bf042dba3ced6394ba3a3b16c244ea",
      "tree": "575613cf05d5a0f652fb0cd337d110590c465cb2",
      "parents": [
        "1c20f2d26795803fc4f5155fe4fca5717a5944b6"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Fri Jun 01 14:56:43 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Jun 06 09:23:54 2012 -0500"
      },
      "message": "libceph: have messages point to their connection\n\nWhen a ceph message is queued for sending it is placed on a list of\npending messages (ceph_connection-\u003eout_queue).  When they are\nactually sent over the wire, they are moved from that list to\nanother (ceph_connection-\u003eout_sent).  When acknowledgement for the\nmessage is received, it is removed from the sent messages list.\n\nDuring that entire time the message is \"in the possession\" of a\nsingle ceph connection.  Keep track of that connection in the\nmessage.  This will be used in the next patch (and is a helpful\nbit of information for debugging anyway).\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "1bfd89f4e6e1adc6a782d94aa5d4c53be1e404d7",
      "tree": "32bbe82e2817619bf16516d8531a2e5b79e2528c",
      "parents": [
        "20581c1faf7b15ae1f8b80c0ec757877b0b53151"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Sat May 26 23:26:43 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Jun 06 09:23:54 2012 -0500"
      },
      "message": "libceph: fully initialize connection in con_init()\n\nMove the initialization of a ceph connection\u0027s private pointer,\noperations vector pointer, and peer name information into\nceph_con_init().  Rearrange the arguments so the connection pointer\nis first.  Hide the byte-swapping of the peer entity number inside\nceph_con_init()\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "67130934fb579fdf0f2f6d745960264378b57dc8",
      "tree": "5b0f5eaa9d3fd24ba30368911c3a157acd2b9e33",
      "parents": [
        "0d47766f14211a73eaf54cab234db134ece79f49"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Sat May 26 23:26:43 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Jun 06 09:23:54 2012 -0500"
      },
      "message": "libceph: embed ceph connection structure in mon_client\n\nA monitor client has a pointer to a ceph connection structure in it.\nThis is the only one of the three ceph client types that do it this\nway; the OSD and MDS clients embed the connection into their main\nstructures.  There is always exactly one ceph connection for a\nmonitor client, so there is no need to allocate it separate from the\nmonitor client structure.\n\nSo switch the ceph_mon_client structure to embed its\nceph_connection structure.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "ce2c8903e76e690846a00a0284e4bd9ee954d680",
      "tree": "883ce31b9da920f7e4d68302569fd0143d14b264",
      "parents": [
        "928443cd9644e7cfd46f687dbeffda2d1a357ff9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue May 22 22:15:49 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Fri Jun 01 08:37:56 2012 -0500"
      },
      "message": "libceph: start tracking connection socket state\n\nStart explicitly keeping track of the state of a ceph connection\u0027s\nsocket, separate from the state of the connection itself.  Create\nplaceholder functions to encapsulate the state transitions.\n\n    --------\n    | NEW* |  transient initial state\n    --------\n        | con_sock_state_init()\n        v\n    ----------\n    | CLOSED |  initialized, but no socket (and no\n    ----------  TCP connection)\n     ^      \\\n     |       \\ con_sock_state_connecting()\n     |        ----------------------\n     |                              \\\n     + con_sock_state_closed()       \\\n     |\\                               \\\n     | \\                               \\\n     |  -----------                     \\\n     |  | CLOSING |  socket event;       \\\n     |  -----------  await close          \\\n     |       ^                            |\n     |       |                            |\n     |       + con_sock_state_closing()   |\n     |      / \\                           |\n     |     /   ---------------            |\n     |    /                   \\           v\n     |   /                    --------------\n     |  /    -----------------| CONNECTING |  socket created, TCP\n     |  |   /                 --------------  connect initiated\n     |  |   | con_sock_state_connected()\n     |  |   v\n    -------------\n    | CONNECTED |  TCP connection established\n    -------------\n\nMake the socket state an atomic variable, reinforcing that it\u0027s a\ndistinct transtion with no possible \"intermediate/both\" states.\nThis is almost certainly overkill at this point, though the\ntransitions into CONNECTED and CLOSING state do get called via\nsocket callback (the rest of the transitions occur with the\nconnection mutex held).  We can back out the atomicity later.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil\u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "928443cd9644e7cfd46f687dbeffda2d1a357ff9",
      "tree": "09112335af82c7ce01d93caa55567341f9468c3f",
      "parents": [
        "15d9882c336db2db73ccf9871ae2398e452f694c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue May 22 11:41:43 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Fri Jun 01 08:37:56 2012 -0500"
      },
      "message": "libceph: start separating connection flags from state\n\nA ceph_connection holds a mixture of connection state (as in \"state\nmachine\" state) and connection flags in a single \"state\" field.  To\nmake the distinction more clear, define a new \"flags\" field and use\nit rather than the \"state\" field to hold Boolean flag values.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil\u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "15d9882c336db2db73ccf9871ae2398e452f694c",
      "tree": "cfa0c726a69b68f51b344d50114a2961019c1231",
      "parents": [
        "e22004235a900213625acd6583ac913d5a30c155"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Sat May 26 23:26:43 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Fri Jun 01 08:37:56 2012 -0500"
      },
      "message": "libceph: embed ceph messenger structure in ceph_client\n\nA ceph client has a pointer to a ceph messenger structure in it.\nThere is always exactly one ceph messenger for a ceph client, so\nthere is no need to allocate it separate from the ceph client\nstructure.\n\nSwitch the ceph_client structure to embed its ceph_messenger\nstructure.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "6384bb8b8e88a9c6bf2ae0d9517c2c0199177c34",
      "tree": "1f01bca1df2e7bfaed20654dfc6d483be4d7c2cd",
      "parents": [
        "e5e372da9a469dfe3ece40277090a7056c566838"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue May 29 21:47:38 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Fri Jun 01 08:37:55 2012 -0500"
      },
      "message": "libceph: kill bad_proto ceph connection op\n\nNo code sets a bad_proto method in its ceph connection operations\nvector, so just get rid of it.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\n"
    },
    {
      "commit": "e5e372da9a469dfe3ece40277090a7056c566838",
      "tree": "8124bc58f5d841aa6572b5e3c01f7a62646fcf4c",
      "parents": [
        "28c0254ede13ab575d2df5c6585ed3d4817c3e6b"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Tue May 22 11:41:43 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Fri Jun 01 08:37:55 2012 -0500"
      },
      "message": "libceph: eliminate connection state \"DEAD\"\n\nThe ceph connection state \"DEAD\" is never set and is therefore not\nneeded.  Eliminate it.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@inktank.com\u003e\n"
    },
    {
      "commit": "af56e0aa35f3ae2a4c1a6d1000702df1dd78cb76",
      "tree": "304bd85e5db2d07efa2913aa7c6313b918cfbfdb",
      "parents": [
        "65a50c951a38e9827dd9655b6e686bde912e799b",
        "6bd9adbdf9ca6a052b0b7455ac67b925eb38cfad"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 30 11:17:19 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed May 30 11:17:19 2012 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\nPull ceph updates from Sage Weil:\n \"There are some updates and cleanups to the CRUSH placement code, a bug\n  fix with incremental maps, several cleanups and fixes from Josh Durgin\n  in the RBD block device code, a series of cleanups and bug fixes from\n  Alex Elder in the messenger code, and some miscellaneous bounds\n  checking and gfp cleanups/fixes.\"\n\nFix up trivial conflicts in net/ceph/{messenger.c,osdmap.c} due to the\nnetworking people preferring \"unsigned int\" over just \"unsigned\".\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (45 commits)\n  libceph: fix pg_temp updates\n  libceph: avoid unregistering osd request when not registered\n  ceph: add auth buf in prepare_write_connect()\n  ceph: rename prepare_connect_authorizer()\n  ceph: return pointer from prepare_connect_authorizer()\n  ceph: use info returned by get_authorizer\n  ceph: have get_authorizer methods return pointers\n  ceph: ensure auth ops are defined before use\n  ceph: messenger: reduce args to create_authorizer\n  ceph: define ceph_auth_handshake type\n  ceph: messenger: check return from get_authorizer\n  ceph: messenger: rework prepare_connect_authorizer()\n  ceph: messenger: check prepare_write_connect() result\n  ceph: don\u0027t set WRITE_PENDING too early\n  ceph: drop msgr argument from prepare_write_connect()\n  ceph: messenger: send banner in process_connect()\n  ceph: messenger: reset connection kvec caller\n  libceph: don\u0027t reset kvec in prepare_write_banner()\n  ceph: ignore preferred_osd field\n  ceph: fully initialize new layout\n  ...\n"
    },
    {
      "commit": "8f43fb53894079bf0caab6e348ceaffe7adc651a",
      "tree": "248ffc7366b569d13049a31e2cb1c88750d45ead",
      "parents": [
        "a3530df33eb91d787d08c7383a0a9982690e42d0"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:13 2012 -0500"
      },
      "message": "ceph: use info returned by get_authorizer\n\nRather than passing a bunch of arguments to be filled in with the\ncontent of the ceph_auth_handshake buffer now returned by the\nget_authorizer method, just use the returned information in the\ncaller, and drop the unnecessary arguments.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "a3530df33eb91d787d08c7383a0a9982690e42d0",
      "tree": "3022fc82ea661654bfca48fae32a7a1584dba1e8",
      "parents": [
        "a255651d4cad89f1a606edd36135af892ada4f20"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:13 2012 -0500"
      },
      "message": "ceph: have get_authorizer methods return pointers\n\nHave the get_authorizer auth_client method return a ceph_auth\npointer rather than an integer, pointer-encoding any returned\nerror value.  This is to pave the way for making use of the\nreturned value in an upcoming patch.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "74f1869f76d043bad12ec03b4d5f04a8c3d1f157",
      "tree": "fcce410d255e2660fc82532c70de1b2f60a956c6",
      "parents": [
        "6c4a19158b96ea1fb8acbe0c1d5493d9dcd2f147"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:39 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "ceph: messenger: reduce args to create_authorizer\n\nMake use of the new ceph_auth_handshake structure in order to reduce\nthe number of arguments passed to the create_authorizor method in\nceph_auth_client_ops.  Use a local variable of that type as a\nshorthand in the get_authorizer method definitions.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "6c4a19158b96ea1fb8acbe0c1d5493d9dcd2f147",
      "tree": "5fe6418eb57bf4e84f1eda9606a4a045ff08dcba",
      "parents": [
        "ed96af646011412c2bf1ffe860db170db355fae5"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@inktank.com",
        "time": "Wed May 16 15:16:38 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu May 17 08:18:12 2012 -0500"
      },
      "message": "ceph: define ceph_auth_handshake type\n\nThe definitions for the ceph_mds_session and ceph_osd both contain\nfive fields related only to \"authorizers.\"  Encapsulate those fields\ninto their own struct type, allowing for better isolation in some\nupcoming patches.\n\nFix the #includes in \"linux/ceph/osd_client.h\" to lay out their more\ncomplete canonical path.\n\nSigned-off-by: Alex Elder \u003celder@inktank.com\u003e\nReviewed-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "76aa542fb90e3e91edb1146d10ca7cf2cae8e7e9",
      "tree": "d01a137e60126d140790c64f1a3994c62792b61e",
      "parents": [
        "065a68f9167e20f321a62d044cb2c3024393d455"
      ],
      "author": {
        "name": "Xi Wang",
        "email": "xi.wang@gmail.com",
        "time": "Fri Apr 20 15:49:44 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon May 14 12:12:27 2012 -0500"
      },
      "message": "ceph: fix bounds check in ceph_decode_need and ceph_encode_need\n\nGiven a large n, the bounds check (*p + n \u003e end) can be bypassed due to\npointer wraparound.  A safer check is (n \u003e end - *p).\n\n[elder@dreamhost.com: inverted test and renamed ceph_has_room()]\n\nSigned-off-by: Xi Wang \u003cxi.wang@gmail.com\u003e\nReviewed-by: Alex Elder \u003celder@dreamhost.com\u003e\n"
    },
    {
      "commit": "3469ac1aa3a2f1e2586a412923c414779a0af854",
      "tree": "b271456518130622e6d394cf50939c132f1a1d0d",
      "parents": [
        "cd9d9f5df6098c50726200d4185e9e8da32785b3"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:33:36 2012 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@inktank.com",
        "time": "Mon May 07 15:33:36 2012 -0700"
      },
      "message": "ceph: drop support for preferred_osd pgs\n\nThis was an ill-conceived feature that has been removed from Ceph.  Do\nthis gracefully:\n\n - reject attempts to specify a preferred_osd via the ioctl\n - stop exposing this information via virtual xattrs\n - always fill in -1 for requests, in case we talk to an older server\n - don\u0027t calculate preferred_osd placements/pgids\n\nReviewed-by: Alex Elder \u003celder@inktank.com\u003e\nSigned-off-by: Sage Weil \u003csage@inktank.com\u003e\n"
    },
    {
      "commit": "56b59b429b4c26e5e730bc8c3d837de9f7d0a966",
      "tree": "191bf87e438a3985ccb7e3c5382fab8d31f94edb",
      "parents": [
        "9a7259d5c8978bbeb5fdcf64b168f8470d8208a6",
        "c666601a935b94cc0f3310339411b6940de751ba"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 10:01:29 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 10:01:29 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\nPull Ceph updates for 3.4-rc1 from Sage Weil:\n \"Alex has been busy.  There are a range of rbd and libceph cleanups,\n  especially surrounding device setup and teardown, and a few critical\n  fixes in that code.  There are more cleanups in the messenger code,\n  virtual xattrs, a fix for CRC calculation/checks, and lots of other\n  miscellaneous stuff.\n\n  There\u0027s a patch from Amon Ott to make inos behave a bit better on\n  32-bit boxes, some decode check fixes from Xi Wang, and network\n  throttling fix from Jim Schutt, and a couple RBD fixes from Josh\n  Durgin.\n\n  No new functionality, just a lot of cleanup and bug fixing.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (65 commits)\n  rbd: move snap_rwsem to the device, rename to header_rwsem\n  ceph: fix three bugs, two in ceph_vxattrcb_file_layout()\n  libceph: isolate kmap() call in write_partial_msg_pages()\n  libceph: rename \"page_shift\" variable to something sensible\n  libceph: get rid of zero_page_address\n  libceph: only call kernel_sendpage() via helper\n  libceph: use kernel_sendpage() for sending zeroes\n  libceph: fix inverted crc option logic\n  libceph: some simple changes\n  libceph: small refactor in write_partial_kvec()\n  libceph: do crc calculations outside loop\n  libceph: separate CRC calculation from byte swapping\n  libceph: use \"do\" in CRC-related Boolean variables\n  ceph: ensure Boolean options support both senses\n  libceph: a few small changes\n  libceph: make ceph_tcp_connect() return int\n  libceph: encapsulate some messenger cleanup code\n  libceph: make ceph_msgr_wq private\n  libceph: encapsulate connection kvec operations\n  libceph: move prepare_write_banner()\n  ...\n"
    },
    {
      "commit": "bca064d236a2e3162a07c758855221bcbe3c475b",
      "tree": "49fca3de9007fa6cc5304bd8d7851d28cbe33110",
      "parents": [
        "cffaba15cd95d4a16eb5a6aa5c22a79f67d555ab"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "libceph: use \"do\" in CRC-related Boolean variables\n\nChange the name (and type) of a few CRC-related Boolean local\nvariables so they contain the word \"do\", to distingish their purpose\nfrom variables used for holding an actual CRC value.\n\nNote that in the process of doing this I identified a fairly serious\nlogic error in write_partial_msg_pages():  the value of \"do_crc\"\nassigned appears to be the opposite of what it should be.  No\nattempt to fix this is made here; this change preserves the\nerroneous behavior.  The problem I found is documented here:\n    http://tracker.newdream.net/issues/2064\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e0f43c9419c1900e5b50de4261e9686a45a0a2b8",
      "tree": "28a0452e2bc223513b376f9db711f878a848bddc",
      "parents": [
        "859eb7994876f26fd9f52d9589fbcab8e2fe8069"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Feb 14 14:05:33 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:50 2012 -0500"
      },
      "message": "libceph: make ceph_msgr_wq private\n\nThe messenger workqueue has no need to be public.  So give it static\nscope.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ee57741c5209154b8ef124bcaa2496da1b69a988",
      "tree": "248a6e7bf259bb849f885f1ff4a82be74ab4913b",
      "parents": [
        "2107978668de13da484f7abc3f03516494c7fca9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Jan 24 10:08:36 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:47 2012 -0500"
      },
      "message": "rbd: make ceph_parse_options() return a pointer\n\nceph_parse_options() takes the address of a pointer as an argument\nand uses it to return the address of an allocated structure if\nsuccessful.  With this interface is not evident at call sites that\nthe pointer is always initialized.  Change the interface to return\nthe address instead (or a pointer-coded error code) to make the\nvalidity of the returned pointer obvious.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5766651971e81298732466c9aa462ff47898ba37",
      "tree": "147bfd12f3b335d6b2fdb2af162c582a58c33fe5",
      "parents": [
        "80834312a4da1405a9bc788313c67643de6fcb4c"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: use a shared zero page rather than one per messenger\n\nEach messenger allocates a page to be used when writing zeroes\nout in the event of error or other abnormal condition.  Instead,\nuse the kernel ZERO_PAGE() for that purpose.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "187f1882b5b0748b3c4c22274663fdb372ac0452",
      "tree": "36283f258cf65f03599a045d48bb05d0ec27f3f9",
      "parents": [
        "50af5ead3b44ccf8bd2b4d2a50c1b610f557c480"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Wed Nov 23 20:12:59 2011 -0500"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Sun Mar 04 17:54:34 2012 -0500"
      },
      "message": "BUG: headers with BUG/BUG_ON etc. need linux/bug.h\n\nIf a header file is making use of BUG, BUG_ON, BUILD_BUG_ON, or any\nother BUG variant in a static inline (i.e. not in a #define) then\nthat header really should be including \u003clinux/bug.h\u003e and not just\nexpecting it to be implicitly present.\n\nWe can make this change risk-free, since if the files using these\nheaders didn\u0027t have exposure to linux/bug.h already, they would have\nbeen causing compile failures/warnings.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "224736d9113ab4a7cf3f05c05377492bd99b4b02",
      "tree": "0a8fe8063e904eebc2f591607faf8711b78016f8",
      "parents": [
        "774ac21da76f5c3018428725074e27a3fd40b128"
      ],
      "author": {
        "name": "Stratos Psomadakis",
        "email": "psomas@grnet.gr",
        "time": "Thu Nov 10 15:45:37 2011 +0200"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Nov 11 09:50:19 2011 -0800"
      },
      "message": "libceph: Allocate larger oid buffer in request msgs\n\nceph_osd_request struct allocates a 40-byte buffer for object names.\nRBD image names can be up to 96 chars long (100 with the .rbd suffix),\nwhich results in the object name for the image being truncated, and a\nsubsequent map failure.\n\nIncrease the oid buffer in request messages, in order to avoid the\ntruncation.\n\nSigned-off-by: Stratos Psomadakis \u003cpsomas@grnet.gr\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "97d2eb13a019ec09cc1a7ea2d3705c0b117b3c0d",
      "tree": "86f6382941f8cfc41647d33d87bec7bc1407c18c",
      "parents": [
        "68d99b2c8efcb6ed3807a55569300c53b5f88be5",
        "339573406737461cfb17bebabf7ba536a302d841"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 28 16:42:18 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 28 16:42:18 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://ceph.newdream.net/git/ceph-client\n\n* \u0027for-linus\u0027 of git://ceph.newdream.net/git/ceph-client:\n  libceph: fix double-free of page vector\n  ceph: fix 32-bit ino numbers\n  libceph: force resend of osd requests if we skip an osdmap\n  ceph: use kernel DNS resolver\n  ceph: fix ceph_monc_init memory leak\n  ceph: let the set_layout ioctl set single traits\n  Revert \"ceph: don\u0027t truncate dirty pages in invalidate work thread\"\n  ceph: replace leading spaces with tabs\n  libceph: warn on msg allocation failures\n  libceph: don\u0027t complain on msgpool alloc failures\n  libceph: always preallocate mon connection\n  libceph: create messenger with client\n  ceph: document ioctls\n  ceph: implement (optional) max read size\n  ceph: rename rsize -\u003e rasize\n  ceph: make readpages fully async\n"
    },
    {
      "commit": "b61c27636fffbaf1980e675282777b9467254a40",
      "tree": "bd78cfefda4beb7e3de5fe97dd36fed3dbfa91c1",
      "parents": [
        "f6a2f5be07463ef532b9f4e3cb9e42ab9df85832"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 15:03:46 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "libceph: don\u0027t complain on msgpool alloc failures\n\nThe pool allocation failures are masked by the pool; there is no need to\nspam the console about them.  (That\u0027s the whole point of having the pool\nin the first place.)\n\nMark msg allocations whose failure is safely handled as such.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6ab00d465a1c8c02c2216f8220727282f3aa50b5",
      "tree": "b4cc08e1be5ffe0a60d9090d86f7f0d05b1f6e36",
      "parents": [
        "6a8ea4706adb4b4d8f77a8da5f9778b65fbf6f48"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 09:41:59 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "libceph: create messenger with client\n\nThis simplifies the init/shutdown paths, and makes client-\u003emsgr available\nduring the rest of the setup process.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e060c38434b2caa78efe7cedaff4191040b65a15",
      "tree": "407361230bf6733f63d8e788e4b5e6566ee04818",
      "parents": [
        "10e4ac572eeffe5317019bd7330b6058a400dfc2",
        "cc39c6a9bbdebfcf1a7dee64d83bf302bc38d941"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Sep 15 15:08:05 2011 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Sep 15 15:08:18 2011 +0200"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n\nFast-forward merge with Linus to be able to merge patches\nbased on more recent version of the tree.\n"
    },
    {
      "commit": "e81b15168e2d3d1ab56b13782fe8ad0cb362379d",
      "tree": "d7bfedf53a60d7c09d5a1bf3ce9465b89b3e8af5",
      "parents": [
        "c9bab38f70414918d414a1672d908f6447880075"
      ],
      "author": {
        "name": "Jesper Juhl",
        "email": "jj@chaosbits.net",
        "time": "Mon Aug 01 23:04:30 2011 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Sep 15 14:57:06 2011 +0200"
      },
      "message": "Remove unneeded version.h includes from include/\n\nIt was pointed out by \u0027make versioncheck\u0027 that some includes of\nlinux/version.h are not needed in include/.\nThis patch removes them.\n\nWhen I last posted the patch, the ceph bit was ACK\u0027ed by Sage Weil, so\nI\u0027ve added that below.\n\nThe pwc-ioctl change generated quite a bit of discussion about V4L version\nnumbers in general, but as far as I can tell, no concensus was reached on\nwhat the long term solution should be, so in the mean time I think we\ncould start by just removing the unneeded include, which is why I\u0027m\nresending the patch with that hunk still included.\n\nSigned-off-by: Jesper Juhl \u003cjj@chaosbits.net\u003e\nAcked-by: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "ba5b56cb3e3d2cab73d4fee9a022bb69462a8cd9",
      "tree": "eda7ea059a41ae5d68e2ad5a36a87069187ef22a",
      "parents": [
        "243dd2809a5edd2e0e3e62781083aa44049af37d",
        "d79698da32b317e96216236f265a9b72b78ae568"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 13:38:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 13:38:50 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (23 commits)\n  ceph: document unlocked d_parent accesses\n  ceph: explicitly reference rename old_dentry parent dir in request\n  ceph: document locking for ceph_set_dentry_offset\n  ceph: avoid d_parent in ceph_dentry_hash; fix ceph_encode_fh() hashing bug\n  ceph: protect d_parent access in ceph_d_revalidate\n  ceph: protect access to d_parent\n  ceph: handle racing calls to ceph_init_dentry\n  ceph: set dir complete frag after adding capability\n  rbd: set blk_queue request sizes to object size\n  ceph: set up readahead size when rsize is not passed\n  rbd: cancel watch request when releasing the device\n  ceph: ignore lease mask\n  ceph: fix ceph_lookup_open intent usage\n  ceph: only link open operations to directory unsafe list if O_CREAT|O_TRUNC\n  ceph: fix bad parent_inode calc in ceph_lookup_open\n  ceph: avoid carrying Fw cap during write into page cache\n  libceph: don\u0027t time out osd requests that haven\u0027t been received\n  ceph: report f_bfree based on kb_avail rather than diffing.\n  ceph: only queue capsnap if caps are dirty\n  ceph: fix snap writeback when racing with writes\n  ...\n"
    },
    {
      "commit": "4cf9d544631c92809cb94ea680c71df56e9437aa",
      "tree": "419e162dfb25e69ef1a89c56a318ad322cf21053",
      "parents": [
        "8f04d42276048b3baff5a5d8fa769f433c62b63e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:24 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:24 2011 -0700"
      },
      "message": "libceph: don\u0027t time out osd requests that haven\u0027t been received\n\nKeep track of when an outgoing message is ACKed (i.e., the server fully\nreceived it and, presumably, queued it for processing).  Time out OSD\nrequests only if it\u0027s been too long since they\u0027ve been received.\n\nThis prevents timeouts and connection thrashing when the OSDs are simply\nbusy and are throttling the requests they read off the network.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "497888cf69bf607ac1fe061a6437e0a670b0022f",
      "tree": "ac0897eff214f09c89d5f4fbc3c03ef9d010a83c",
      "parents": [
        "06b72d06d6b182bdaaaec686dbd8b602949521ee"
      ],
      "author": {
        "name": "Phil Carmody",
        "email": "ext-phil.2.carmody@nokia.com",
        "time": "Thu Jul 14 15:07:13 2011 +0300"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Jul 21 14:10:00 2011 +0200"
      },
      "message": "treewide: fix potentially dangerous trailing \u0027;\u0027 in #defined values/expressions\n\nAll these are instances of\n  #define NAME value;\nor\n  #define NAME(params_opt) value;\n\nThese of course fail to build when used in contexts like\n  if(foo $OP NAME)\n  while(bar $OP NAME)\nand may silently generate the wrong code in contexts such as\n  foo \u003d NAME + 1;    /* foo \u003d value; + 1; */\n  bar \u003d NAME - 1;    /* bar \u003d value; - 1; */\n  baz \u003d NAME \u0026 quux; /* baz \u003d value; \u0026 quux; */\n\nReported on comp.lang.c,\nMessage-ID: \u003cab0d55fe-25e5-482b-811e-c475aa6065c3@c29g2000yqd.googlegroups.com\u003e\nInitial analysis of the dangers provided by Keith Thompson in that thread.\n\nThere are many more instances of more complicated macros having unnecessary\ntrailing semicolons, but this pile seems to be all of the cases of simple\nvalues suffering from the problem. (Thus things that are likely to be found\nin one of the contexts above, more complicated ones aren\u0027t.)\n\nSigned-off-by: Phil Carmody \u003cext-phil.2.carmody@nokia.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "3c454cf21645bc96668e286f6352ac2c4c895fa2",
      "tree": "9ad5d408a07819d3e1155fb98df44c92f86a0eb5",
      "parents": [
        "aedfec59eed37d1ff7ce09b303b668234e9a7f8e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Apr 06 09:31:40 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 11:52:05 2011 -0700"
      },
      "message": "ceph: use LOOKUPINO to make unconnected nfs fh more reliable\n\nIf we are unable to locate an inode by ino, ask the MDS using the new\nLOOKUPINO command.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "8323c3aa74cd92465350294567142d12ffdcc963",
      "tree": "052e7374393994eea8d534f98ee1bc7acea4c2d9",
      "parents": [
        "fbdb9190482fd83a3eb20cdeb0da454759f479d7"
      ],
      "author": {
        "name": "Tommi Virtanen",
        "email": "tommi.virtanen@dreamhost.com",
        "time": "Fri Mar 25 16:32:57 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 29 12:11:16 2011 -0700"
      },
      "message": "ceph: Move secret key parsing earlier.\n\nThis makes the base64 logic be contained in mount option parsing,\nand prepares us for replacing the homebew key management with the\nkernel key retention service.\n\nSigned-off-by: Tommi Virtanen \u003ctommi.virtanen@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a40c4f10e3fb96030358e49abd010c1f08446fa3",
      "tree": "1aa1f6ca618cd021d944f7da7caeb5b182beaee4",
      "parents": [
        "55b00bae111030bd0dfcc898a920e54725aed1bf"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Mon Mar 21 15:07:16 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 22 11:33:55 2011 -0700"
      },
      "message": "libceph: add lingering request and watch/notify event framework\n\nLingering requests are requests that are sent to the OSD normally but\ntracked also after we get a successful request.  This keeps the OSD\nconnection open and resends the original request if the object moves to\nanother OSD.  The OSD can then send notification messages back to us\nif another client initiates a notify.\n\nThis framework will be used by RBD so that the client gets notification\nwhen a snapshot is created by another node or tool.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "80456f8672f7e69d05c01627da03587dc1ea1603",
      "tree": "8351eb6c340a54357fc38df32335a87afefd875f",
      "parents": [
        "ad1fee96cbaf873520064252c5dc3212c9844861"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 10 13:33:26 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 21 12:24:23 2011 -0700"
      },
      "message": "ceph: move readahead default to fs/ceph from libceph\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "483fac71485e5063ff4033b6dc7d91567f1b6ff1",
      "tree": "77c4a567f6b39850751917fa4e62753fa2e6651b",
      "parents": [
        "21f3b5f1bbc3c27e82a8c9fc9861fa20bcb31f26"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Thu Jan 20 16:36:06 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 21 12:24:21 2011 -0700"
      },
      "message": "ceph: update common header files\n\nThis updates the common header files used by the different ceph\nrelated modules. Specifically it adds definitions required by\nthe rbd watch/notify feature.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\n"
    },
    {
      "commit": "6f6c7006755b667f9f6c1f3b6f08cd65f75cc471",
      "tree": "233e96acdc3b627c97267992368ae1cb6cd66a5f",
      "parents": [
        "09adc80c611bb8902daa8ccfe34dbbc009d6befe"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Jan 17 20:34:08 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 21 12:24:19 2011 -0700"
      },
      "message": "libceph: fix osd request queuing on osdmap updates\n\nIf we send a request to osd A, and the request\u0027s pg remaps to osd B and\nthen back to A in quick succession, we need to resend the request to A. The\nold code was only calling kick_requests after processing all incremental\nmaps in a message, so it was very possible to not resend a request that\nneeded to be resent.  This would make the osd eventually time out (at least\nwith the current default of osd timeouts enabled).\n\nThe correct approach is to scan requests on every map incremental.  This\npatch refactors the kick code in a few ways:\n - all requests are either on req_lru (in flight), req_unsent (ready to\n   send), or req_notarget (currently map to no up osd)\n - mapping always done by map_request (previous map_osds)\n - if the mapping changes, we requeue.  requests are resent only after all\n   map incrementals are processed.\n - some osd reset code is moved out of kick_requests into a separate\n   function\n - the \"kick this osd\" functionality is moved to kick_osd_requests, as it\n   is unrelated to scanning for request-\u003epg-\u003eosd mapping changes\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e76661d0a59e53e5cc4dccbe4b755d1dc8a968ec",
      "tree": "371ed08c5d00dbcdcf6f18e5cf36d798bcc51180",
      "parents": [
        "60bf8bf8815e6adea4c1d0423578c3b8000e2ec8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 03 10:10:15 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 04 12:24:31 2011 -0800"
      },
      "message": "libceph: fix msgr keepalive flag\n\nThere was some broken keepalive code using a dead variable.  Shift to using\nthe proper bit flag.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "60bf8bf8815e6adea4c1d0423578c3b8000e2ec8",
      "tree": "ce7140c32a3f177816f4029a88eb99e15bda6943",
      "parents": [
        "692d20f576fb26f62c83f80dbf3ea899998391b7"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 04 12:24:28 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 04 12:24:28 2011 -0800"
      },
      "message": "libceph: fix msgr backoff\n\nWith commit f363e45f we replaced a bunch of hacky workqueue mutual\nexclusion logic with the WQ_NON_REENTRANT flag.  One pieces of fallout is\nthat the exponential backoff breaks in certain cases:\n\n * con_work attempts to connect.\n * we get an immediate failure, and the socket state change handler queues\n   immediate work.\n * con_work calls con_fault, we decide to back off, but can\u0027t queue delayed\n   work.\n\nIn this case, we add a BACKOFF bit to make con_work reschedule delayed work\nnext time it runs (which should be immediately).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f363e45fd1184219b472ea549cb7e192e24ef4d2",
      "tree": "1332feb2f7a0a47ce482a0fd4ee9afb547a27090",
      "parents": [
        "01e6acc4ea4c284c44bfb3d46c76f4ae580c6435"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 03 14:49:46 2011 +0100"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Jan 12 15:15:14 2011 -0800"
      },
      "message": "net/ceph: make ceph_msgr_wq non-reentrant\n\nceph messenger code does a rather complex dancing around multithread\nworkqueue to make sure the same work item isn\u0027t executed concurrently\non different CPUs.  This restriction can be provided by workqueue with\nWQ_NON_REENTRANT.\n\nMake ceph_msgr_wq non-reentrant workqueue with the default concurrency\nlevel and remove the QUEUED/BUSY logic.\n\n* This removes backoff handling in con_work() but it couldn\u0027t reliably\n  block execution of con_work() to begin with - queue_con() can be\n  called after the work started but before BUSY is set.  It seems that\n  it was an optimization for a rather cold path and can be safely\n  removed.\n\n* The number of concurrent work items is bound by the number of\n  connections and connetions are independent from each other.  With\n  the default concurrency level, different connections will be\n  executed independently.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Sage Weil \u003csage@newdream.net\u003e\nCc: ceph-devel@vger.kernel.org\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    }
  ],
  "next": "6c0f3af72cb1622a66962a1180c36ef8c41be8e2"
}
