)]}'
{
  "log": [
    {
      "commit": "3d14c5d2b6e15c21d8e5467dc62d33127c23a644",
      "tree": "7d123c47847df9d1e865b6b78dc7da3fe739b704",
      "parents": [
        "ae1533b62b3369e6ae32338f4a77d64d0e88f676"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Tue Apr 06 15:14:15 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Oct 20 15:37:28 2010 -0700"
      },
      "message": "ceph: factor out libceph from Ceph file system\n\nThis factors out protocol and low-level storage parts of ceph into a\nseparate libceph module living in net/ceph and include/linux/ceph.  This\nis mostly a matter of moving files around.  However, a few key pieces\nof the interface change as well:\n\n - ceph_client becomes ceph_fs_client and ceph_client, where the latter\n   captures the mon and osd clients, and the fs_client gets the mds client\n   and file system specific pieces.\n - Mount option parsing and debugfs setup is correspondingly broken into\n   two pieces.\n - The mon client gets a generic handler callback for otherwise unknown\n   messages (mds map, in this case).\n - The basic supported/required feature bits can be expanded (and are by\n   ceph_fs_client).\n\nNo functional change, aside from some subtle error handling cases that got\ncleaned up in the refactoring process.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e835124c2be289515b918f2688ced4249e2de566",
      "tree": "1bf9bc86a2d1c3e9508dc304830a3bb42ad7de9b",
      "parents": [
        "ae00d4f37f4df56821331deb1028748110dd6dc9"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Sep 17 08:03:08 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Sep 17 08:03:08 2010 -0700"
      },
      "message": "ceph: only send one flushsnap per cap_snap per mds session\n\nSending multiple flushsnap messages is problematic because we ignore\nthe response if the tid doesn\u0027t match, and the server may only respond to\neach one once.  It\u0027s also a waste.\n\nSo, skip cap_snaps that are already on the flushing list, unless the caller\ntells us to resend (because we are reconnecting).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ae00d4f37f4df56821331deb1028748110dd6dc9",
      "tree": "52437bde7370fc7a21193c27a08dc1d7238cee98",
      "parents": [
        "cfc0bf6640dfd0f43bf8bfec5a475284809baa4d"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Sep 16 16:26:51 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Sep 16 16:26:51 2010 -0700"
      },
      "message": "ceph: fix cap_snap and realm split\n\nThe cap_snap creation/queueing relies on both the current i_head_snapc\n_and_ the i_snap_realm pointers being correct, so that the new cap_snap\ncan properly reference the old context and the new i_head_snapc can be\nupdated to reference the new snaprealm\u0027s context.  To fix this, we:\n\n - move inodes completely to the new (split) realm so that i_snap_realm\n   is correct, and\n - generate the new snapc\u0027s _before_ queueing the cap_snaps in\n   ceph_update_snap_trace().\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "8bef9239ee1a42eb37d3f83bacf6a75f019c028d",
      "tree": "aca21838744fd483b5a2e374315c095b98193647",
      "parents": [
        "467c525109d5d542d7d416b0c11bdd54610fe2f4"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Sep 14 15:45:44 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Sep 14 15:45:44 2010 -0700"
      },
      "message": "ceph: correctly set \u0027follows\u0027 in flushsnap messages\n\nThe \u0027follows\u0027 should match the seq for the snap context for the given snap\ncap, which is the context under which we have been dirtying and writing\ndata and metadata.  The snapshot that _contains_ those updates thus\n_follows_ that context\u0027s seq #.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "7d8cb26d7dcb911f110b7762bd5941e8f009d6c3",
      "tree": "2adf2f6303cc96ff14c951dc6966f68a0fc3cf25",
      "parents": [
        "07a27e226d1ed210d2d4218bd0642b40f5405c6a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 24 08:44:16 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 24 16:24:18 2010 -0700"
      },
      "message": "ceph: maintain i_head_snapc when any caps are dirty, not just for data\n\nWe used to use i_head_snapc to keep track of which snapc the current epoch\nof dirty data was dirtied under.  It is used by queue_cap_snap to set up\nthe cap_snap.  However, since we queue cap snaps for any dirty caps, not\njust for dirty file data, we need to keep a valid i_head_snapc anytime\nwe have dirty|flushing caps.  This fixes a NULL pointer deref in\nqueue_cap_snap when writing back dirty caps without data (e.g.,\nsnaptest-authwb.sh).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ed326044489ed89c740c50a3df5dffc9c3b20b96",
      "tree": "364fb2896488cd2c7964960e01fa123d2b6ecb51",
      "parents": [
        "4a625be47243e0e07dedd0a1a6b94c66c2ab93ba"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Aug 16 13:37:31 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun Aug 22 15:16:47 2010 -0700"
      },
      "message": "ceph: queue cap snap writeback for realm children on snap update\n\nWhen a realm is updated, we need to queue writeback on inodes in that\nrealm _and_ its children.  Otherwise, if the inode gets cowed on the\nserver, we can get a hang later due to out-of-sync cap/snap state.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "4a625be47243e0e07dedd0a1a6b94c66c2ab93ba",
      "tree": "4224efef4f83bcf629934d6da17d2c122b49ba5c",
      "parents": [
        "082afec92d1052305af1195f591602f4d0f44277"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun Aug 22 15:03:56 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun Aug 22 15:16:46 2010 -0700"
      },
      "message": "ceph: include dirty xattrs state in snapped caps\n\nWhen we snapshot dirty metadata that needs to be written back to the MDS,\ninclude dirty xattr metadata.  Make the capsnap reference the encoded\nxattr blob so that it will be written back in the FLUSHSNAP op.\n\nAlso fix the capsnap creation guard to include dirty auth or file bits,\nnot just tests specific to dirty file data or file writes in progress\n(this fixes auth metadata writeback).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "640ef79d27c81b7a3265a344ec1d25644dd463ad",
      "tree": "f5632a0b2a2f6cef7c6f3a513bbb6020d6ac694a",
      "parents": [
        "2d06eeb877581a7f53209af1582c5f66c799f0bd"
      ],
      "author": {
        "name": "Cheng Renquan",
        "email": "crquan@gmail.com",
        "time": "Fri Mar 26 17:40:33 2010 +0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:17 2010 -0700"
      },
      "message": "ceph: use ceph_sb_to_client instead of ceph_client\n\nceph_sb_to_client and ceph_client are really identical, we need to dump\none; while function ceph_client is confusing with \"struct ceph_client\",\nceph_sb_to_client\u0027s definition is more clear; so we\u0027d better switch all\ncall to ceph_sb_to_client.\n\n  -static inline struct ceph_client *ceph_client(struct super_block *sb)\n  -{\n  -\treturn sb-\u003es_fs_info;\n  -}\n\nSigned-off-by: Cheng Renquan \u003ccrquan@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "91dee39eebcfb47085c4d457a584b0e9723b6ca0",
      "tree": "52bdeb4795c3b60b1d23460cada8c813c94fb7a9",
      "parents": [
        "c10f5e12bafde7f7a2f9b75d76f7a68d62154e91"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Apr 19 10:15:44 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 03 10:49:23 2010 -0700"
      },
      "message": "ceph: fix snap realm splits\n\nThe snap realm split was checking i_snap_realm, not the list_head, to\ndetermine if an inode belonged in the new realm.  The check always failed,\nwhich meant we always moved the inode, corrupting the old realm\u0027s list and\ncausing various crashes.\n\nAlso wait to release old realm reference to avoid possibility of use after\nfree.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "96e35b40c0d6206f56370f937f6f4722739eb273",
      "tree": "2c387b6e3f628484a1f4bdc964e529f89d5f5821",
      "parents": [
        "f5c07a2d8acfc98e00d3be6298f979e5b3175953",
        "a6a5349d17f2a5c37079826f1a1474c3d08c6b53"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 14 18:45:31 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 14 18:45:31 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  ceph: use separate class for ceph sockets\u0027 sk_lock\n  ceph: reserve one more caps space when doing readdir\n  ceph: queue_cap_snap should always queue dirty context\n  ceph: fix dentry reference leak in dcache readdir\n  ceph: decode v5 of osdmap (pool names) [protocol change]\n  ceph: fix ack counter reset on connection reset\n  ceph: fix leaked inode ref due to snap metadata writeback race\n  ceph: fix snap context reference leaks\n  ceph: allow writeback of snapped pages older than \u0027oldest\u0027 snapc\n  ceph: fix dentry rehashing on virtual .snap dir\n"
    },
    {
      "commit": "fc837c8f0446b73a1661339db406c0238dd1d184",
      "tree": "5cc1e6b97a8f39f7979eb302ac8a090c812f2609",
      "parents": [
        "f5b066287c74b624583b993395a65d03a6487b3a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Apr 13 11:41:22 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Apr 13 12:28:31 2010 -0700"
      },
      "message": "ceph: queue_cap_snap should always queue dirty context\n\nThis simplifies the calling convention, and fixes a bug where we queue a\ncapsnap with a context other than i_head_snapc (the one that matches the\ndirty pages).  The result was a BUG at fs/ceph/caps.c:2178 on writeback\ncompletion when a capsnap matching the writeback snapc could not be found.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "819ccbfa448403992ceafc05d6d7097aaa74d4c3",
      "tree": "e6b3592fd85fbb35a63d6d10c84a8d01913eddab",
      "parents": [
        "6298a33757ba7361bb8f506c106daad77e5ac8cf"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Apr 01 09:33:46 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Apr 01 09:34:38 2010 -0700"
      },
      "message": "ceph: fix leaked inode ref due to snap metadata writeback race\n\nWe create a ceph_cap_snap if there is dirty cap metadata (for writeback to\nmds) OR dirty pages (for writeback to osd).  It is thus possible that the\nmetadata has been written back to the MDS but the OSD data has not when\nthe cap_snap is created.  This results in a cap_snap with dirty(caps) \u003d\u003d 0.\nThe problem is that cap writeback to the MDS isn\u0027t necessary, and a\nFLUSHSNAP cap op gets no ack from the MDS.  This leaves the cap_snap\nattached to the inode along with its inode reference.\n\nFix the problem by dropping the cap_snap if it becomes \u0027complete\u0027 (all\npages written out) and dirty(caps) \u003d\u003d 0 in ceph_put_wrbuffer_cap_refs().\n\nAlso, BUG() in __ceph_flush_snaps() if we encounter a cap_snap with\ndirty(caps) \u003d\u003d 0.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "ec4318bcb4c59d8b8bf7037c9f444a9887ccb265",
      "tree": "9c471ed9e33b864253166c255c1fd601b909c7af",
      "parents": [
        "87b315a5b5cec5d7086494b203577602f5befc8c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 19 13:24:39 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 23 07:47:02 2010 -0700"
      },
      "message": "ceph: fix snap rebuild condition\n\nWe were rebuilding the snap context when it was not necessary\n(i.e. when the realm seq hadn\u0027t changed _and_ the parent seq\nwas still older), which caused page snapc pointers to not match\nthe realm\u0027s snapc pointer (even though the snap context itself\nwas identical).  This confused begin_write and put it into an\nendless loop.\n\nThe correct logic is: rebuild snapc if _my_ realm seq changed, or\nif my parent realm\u0027s seq is newer than mine (and thus mine needs\nto be rebuilt too).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "052bb34af3bf8ae2001b9f03d884ba0def3e427c",
      "tree": "db8aecde5b43263d9f3a2947663cb55de4414545",
      "parents": [
        "978097c907b58a2d085bbf7632bee1a5a7e6f6ba"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 09 12:52:26 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Mar 20 21:33:07 2010 -0700"
      },
      "message": "ceph: add missing locking to protect i_snap_realm_item during split\n\nAll ci-\u003ei_snap_realm_item/realm-\u003einodes_with_caps manipulation should be\nprotected by realm-\u003einodes_with_caps_lock.  This bug would have only bit\nus in a rare race with a realm split (during some snap creations).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "2600d2dd5085ab6fb09540226138a60055abf335",
      "tree": "5aeb8a110eb7a41dab2d16b3a5ba8d67ad068a82",
      "parents": [
        "a6369741c48815fedfce7072b7a9cd98b5bafd56"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Feb 22 15:12:16 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Feb 23 14:26:35 2010 -0800"
      },
      "message": "ceph: drop messages on unregistered mds sessions; cleanup\n\nVerify the mds session is currently registered before handling\nincoming messages.  Clean up message handlers to pull mds out\nof session-\u003es_mds instead of less trustworthy src field.\n\nClean up con_{get,put} debug output.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a105f00cf17d711e876b3dc67e15f9a89b7de5a3",
      "tree": "59c4b280aa92e9910670ee7fd274f21bc3659a04",
      "parents": [
        "44ca18f2682eb1cfbed153849adedb79e3e19790"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Feb 15 14:37:55 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Feb 16 22:01:09 2010 -0800"
      },
      "message": "ceph: use rbtree for snap_realms\n\nSwitch from radix tree to rbtree for snap realms.  This is much more\nappropriate given that realm keys are few and far between.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "9ec7cab14e6de732d4e7c355fe67c5810c32c758",
      "tree": "2f512034bc7db2b4ca8fe47ceea06ac99a8cab40",
      "parents": [
        "93c20d98c29ccefa039c3843ccc37122caaf3d31"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Dec 14 15:13:47 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Dec 21 16:39:52 2009 -0800"
      },
      "message": "ceph: hex dump corrupt server data to KERN_DEBUG\n\nAlso, print fsid using standard format, NOT hex dump.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "75eb3592811028e5b01835126483d115532a3aa1",
      "tree": "657fb05f45b2fafea08f5b38cbf6282fc5d8493f",
      "parents": [
        "32c895e776a0dd2cb701d60fbd6440280c09ce35"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Nov 21 13:08:14 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Nov 21 13:08:14 2009 -0800"
      },
      "message": "ceph: remove useless IS_ERR checks\n\nceph_lookup_snap_realm either returns a valid pointer or NULL; there is no\nneed to check IS_ERR(result).\n\nReported-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "963b61eb041e8850807d95f8d7a4c6a454c45000",
      "tree": "00d7926c7b2102c8c19ec9abd95b241b8bff1b7a",
      "parents": [
        "a8599bd821d084d04a3290fffae1071624ec00ea"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 06 11:31:12 2009 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 06 11:31:12 2009 -0700"
      },
      "message": "ceph: snapshot management\n\nCeph snapshots rely on client cooperation in determining which\noperations apply to which snapshots, and appropriately flushing\nsnapshotted data and metadata back to the OSD and MDS clusters.\nBecause snapshots apply to subtrees of the file hierarchy and can be\ncreated at any time, there is a fair bit of bookkeeping required to\nmake this work.\n\nPortions of the hierarchy that belong to the same set of snapshots\nare described by a single \u0027snap realm.\u0027  A \u0027snap context\u0027 describes\nthe set of snapshots that exist for a given file or directory.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    }
  ]
}
