)]}'
{
  "log": [
    {
      "commit": "34d23762d988b7dcb08390ac72a353df3d60193c",
      "tree": "3a49d039527548697165da2b8789f3588b95ffed",
      "parents": [
        "23804d91f112df09b832cd091b71af4dc2831aa8"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Tue Apr 06 14:33:58 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:42 2010 -0700"
      },
      "message": "ceph: all allocation functions should get gfp_mask\n\nThis is essential, as for the rados block device we\u0027ll need\nto run in different contexts that would need flags that\nare other than GFP_NOFS.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a5ee751c15016d0deee0d651e42a3b163ea73ade",
      "tree": "eaf993df4c0c8d020ca16a778b34b24f8cb7f571",
      "parents": [
        "0f8605f2bde2c69737709765dfc574558ea35d4e"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "error27@gmail.com",
        "time": "Fri May 07 10:27:14 2010 +0200"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:32 2010 -0700"
      },
      "message": "ceph: cleanup: remove unused assignement\n\nWe don\u0027t ever use \"dirty\" so we can remove it.\n\nSigned-off-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "bb257664f748bcfc80715f85f70f0f560caec3b4",
      "tree": "0f03c628328082e660c6a60f6094cde478dadec9",
      "parents": [
        "a79832f26be370ee26ea81eecdfd42d10e49d66a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Apr 01 16:07:23 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:19 2010 -0700"
      },
      "message": "ceph: simplify ceph_msg_new\n\nWe only need to pass in front_len.  Callers can attach any other payload\npieces (middle, data) as they see fit.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a79832f26be370ee26ea81eecdfd42d10e49d66a",
      "tree": "59d55f3c928558505a420830eddfb01b3186d467",
      "parents": [
        "d52f847a841bfeba0ea87a7842732d388a1ca2e8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Apr 01 16:06:19 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:18 2010 -0700"
      },
      "message": "ceph: make ceph_msg_new return NULL on failure; clean up, fix callers\n\nReturning ERR_PTR(-ENOMEM) is useless extra work.  Return NULL on failure\ninstead, and fix up the callers (about half of which were wrong anyway).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "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": "f818a73674c5d197f66b636a46d7d578d7258129",
      "tree": "90c485b5ca0a211b84ad8feddfce4f301de3d5c9",
      "parents": [
        "45c6ceb547ad2d98215351974a4686bf8cb13e14"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 11 20:56:31 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 11 20:56:31 2010 -0700"
      },
      "message": "ceph: fix cap removal races\n\nThe iterate_session_caps helper traverses the session caps list and tries\nto grab an inode reference.  However, the __ceph_remove_cap was clearing\nthe inode backpointer _before_ removing itself from the session list,\ncausing a null pointer dereference.\n\nClear cap-\u003eci under protection of s_cap_lock to avoid the race, and to\ntightly couple the list and backpointer state.  Use a local flag to\nindicate whether we are releasing the cap, as cap-\u003esession may be modified\nby a racing thread in iterate_session_caps.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0b0c06d1476290cea248923c0ee7be9fd61cacea",
      "tree": "557eacf9666cf0c2f989c2ff1955805d5557d07d",
      "parents": [
        "c8f16584ac85444d51d8753c5df502350cfc7bb7"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Apr 20 10:27:13 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 03 10:49:23 2010 -0700"
      },
      "message": "ceph: fix leaked spinlock during mds reconnect\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": "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": "916623da10e270c7e9e802a7ddfe1ec8f890982d",
      "tree": "892f703ce8a4200ab27b0c1db14f4c2057d7b2f3",
      "parents": [
        "15637c8b1251c38694c32214eba69b72a30e9d9b"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 16 15:01:07 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 23 07:46:55 2010 -0700"
      },
      "message": "ceph: only release unused caps with mds requests\n\nWe were releasing used caps (e.g. FILE_CACHE) from encode_inode_release\nwith MDS requests (e.g. setattr).  We don\u0027t carry refs on most caps, so\nthis code worked most of the time, but for setattr (utimes) we try to\ndrop Fscr.\n\nThis causes cap state to get slightly out of sync with reality, and may\nresult in subsequent mds revoke messages getting ignored.\n\nFix by only releasing unused caps.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "15637c8b1251c38694c32214eba69b72a30e9d9b",
      "tree": "a410e4db868f75dbace870930b9b032b877a552d",
      "parents": [
        "cdc2ce056a3620139056b60ad7f6d355ad13f445"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 16 13:42:00 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 23 07:46:54 2010 -0700"
      },
      "message": "ceph: clean up handle_cap_grant, handle_caps wrt session mutex\n\nDrop session mutex unconditionally in handle_cap_grant, and do the\ncheck_caps from the handle_cap_grant helper.  This avoids using a magic\nreturn value.\n\nAlso avoid using a flag variable in the IMPORT case and call\ncheck_caps at the appropriate point.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "cdc2ce056a3620139056b60ad7f6d355ad13f445",
      "tree": "1aed7f66612d13beeeec6e2c191f19eff44d1054",
      "parents": [
        "4ea0043a29c82ca52ca54728d837314563bec574"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 16 13:39:28 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 23 07:46:53 2010 -0700"
      },
      "message": "ceph: fix session locking in handle_caps, ceph_check_caps\n\nPassing a session pointer to ceph_check_caps() used to mean it would leave\nthe session mutex locked.  That wasn\u0027t always possible if it wasn\u0027t passed\nCHECK_CAPS_AUTHONLY.   If could unlock the passed session and lock a\ndifferet session mutex, which was clearly wrong, and also emitted a\nwarning when it a racing CPU retook it and we did an unlock from the wrong\ncontext.\n\nThis was only a problem when there was more than one MDS.\n\nFirst, make ceph_check_caps unconditionally drop the session mutex, so that\nit is free to lock other sessions as needed.  Then adjust the one caller\nthat passes in a session (handle_cap_grant) accordingly.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "4ea0043a29c82ca52ca54728d837314563bec574",
      "tree": "df7e9859f54d0ae1b20d07647886a313cd9da9fb",
      "parents": [
        "12eadc190038e68b5884a4aa313b6ab89ba60f5e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 16 10:36:40 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 23 07:46:52 2010 -0700"
      },
      "message": "ceph: drop unnecessary WARN_ON in caps migration\n\nIf we don\u0027t have the exported cap it\u0027s because we already released it. No\nneed to WARN.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "978097c907b58a2d085bbf7632bee1a5a7e6f6ba",
      "tree": "1d52869c500f7b6d5c0566011c070e0924dbe57f",
      "parents": [
        "220bf991b0366cc50a94feede3d7341fa5710ee4"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 08 15:27:53 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Mar 20 21:33:06 2010 -0700"
      },
      "message": "ceph: implemented caps should always be superset of issued caps\n\nAdded assertion, and cleared one case where the implemented caps were\nnot following the issued caps.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f1a3d57213fe264b4cf584e78bac36aaf9998729",
      "tree": "9adf9ba40793ecf83f7a1fd71b4bd73e726b6dac",
      "parents": [
        "422d2cb8f9afadba1ecd3614f658b6daaaa480fb"
      ],
      "author": {
        "name": "Stephen Rothwell",
        "email": "sfr@canb.auug.org.au",
        "time": "Mon Jan 18 11:53:08 2010 +1100"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 05 14:49:41 2010 -0800"
      },
      "message": "ceph: update for write_inode API change\n\nSigned-off-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e9964c102312967a4bc1fd501cb628c4a3b19034",
      "tree": "7bccb0c4e29d94baaf8c30e008ec5aebdccf9c57",
      "parents": [
        "7af8f1e4aa86720840d3318e4dc225c3c7e5a6d0"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 01 15:16:56 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 01 15:28:02 2010 -0800"
      },
      "message": "ceph: fix flush_dirty_caps race with caps migration\n\nThe flush_dirty_caps() used to loop over the first entry of the cap_dirty\ndirty list on the assumption that after calling ceph_check_caps() it would\nbe removed from the list.  This isn\u0027t true for caps that are being\nmigrated between MDSs, where we\u0027ve received the EXPORT but not the IMPORT.\n\nInstead, do a safe list iteration, and pin the next inode on the list via\nthe CEPH_I_NOFLUSH flag.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "7af8f1e4aa86720840d3318e4dc225c3c7e5a6d0",
      "tree": "56129109512f2a01f4589a269f1494b6a5cb58d8",
      "parents": [
        "e53a8fd773065628b24605b289a9a40ee4a35d83"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 01 15:17:34 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 01 15:28:01 2010 -0800"
      },
      "message": "ceph: include migrating caps in issued set\n\nWe should include caps that are mid-migration (we\u0027ve received the EXPORT,\nbut not the IMPORT) in the issued caps set.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "195d3ce2cc9a8ec69827f6369c41b269345b9988",
      "tree": "9ef91489d379ac612895b6ab3118535969aba152",
      "parents": [
        "6f863e712d4114e8ae2f02de64ebeac0546ebaa0"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 01 09:57:54 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 01 15:28:00 2010 -0800"
      },
      "message": "ceph: return EBADF if waiting for caps on closed file\n\nVerify the file is actually open for the given caps when we are\nwaiting for caps.  This ensures we will wake up and return EBADF\nif another thread closes the file out from under us.\n\nNote that EBADF is also the correct return code from write(2)\nwhen called on a file handle opened for reading (although the\nvfs should catch that).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "70edb55bdfa8922c8ad40bc5a67abb6d9fee8d47",
      "tree": "4e2f3445a71bc016adba9095a8885048b2d3bcfe",
      "parents": [
        "c16e786927b977cb880873214bbd815e8d5ec4ba"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 01 13:20:50 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 01 15:20:05 2010 -0800"
      },
      "message": "ceph: fix snaptrace decoding on cap migration between mds\n\nThis was simply broken.  Apparently at some point we thought about putting\nthe snaptrace in the middle section, but didn\u0027t.\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": "a6369741c48815fedfce7072b7a9cd98b5bafd56",
      "tree": "dd9ce7da7a6c5556d6c7731423dff0824aad9545",
      "parents": [
        "4ce1e9adabbad8f2c45ceeeb6de56cc368484297"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Feb 22 13:59:00 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Feb 23 14:26:35 2010 -0800"
      },
      "message": "ceph: fix comments, locking in destroy_inode\n\nThe destroy_inode path needs no inode locks since there are no\ninode references.  Update __ceph_remove_cap comment to reflect\nthat it is called without cap-\u003esession-\u003es_mutex in this case.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "bcd2cbd10ce31c950a40c08d7f601f8ff23537b8",
      "tree": "1f419714feceb6072828cc8977610cfcadec1705",
      "parents": [
        "c9af9fb68e01eb2c2165e1bc45cfeeed510c64e6"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Fri Feb 19 00:12:21 2010 +0000"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Feb 19 14:41:10 2010 -0800"
      },
      "message": "ceph: cleanup redundant code in handle_cap_grant\n\nThere is no state in local vars that requires us to loop after temporarily\ndropping i_lock.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5ecad6fd7bfd30b3eaea51345f546b81de7a6473",
      "tree": "98447fd009cc03e5125ffc51b4caac07123e0f70",
      "parents": [
        "2c27c9a57c93a0757b9b4b0e7dc1abeaf1db1ce2"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Feb 17 10:43:37 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Feb 19 14:33:18 2010 -0800"
      },
      "message": "ceph: fix check for invalidate_mapping_pages success\n\nWe need to know whether there was any page left behind, and not the\nreturn value (the total number of pages invalidated).  Look at the mapping\nto see if we were successful or not.\n\nMove it all into a helper to simplify the two callers.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "7c1332b8cb5b27656cf6ab1f5fe808a8eb8bb2c0",
      "tree": "f990ab6b339a88896f41a6b3541d0676684c935d",
      "parents": [
        "85ccce43a3fc15a40ded6ae1603e3f68a17f4d24"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Feb 16 11:39:45 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Feb 17 10:02:47 2010 -0800"
      },
      "message": "ceph: fix iterate_caps removal race\n\nWe need to be able to iterate over all caps on a session with a\npossibly slow callback on each cap.  To allow this, we used to\nprevent cap reordering while we were iterating.  However, we were\nnot safe from races with removal: removing the \u0027next\u0027 cap would\nmake the next pointer from list_for_each_entry_safe be invalid,\nand cause a lock up or similar badness.\n\nInstead, we keep an iterator pointer in the session pointing to\nthe current cap.  As before, we avoid reordering.  For removal,\nif the cap isn\u0027t the current cap we are iterating over, we are\nfine.  If it is, we clear cap-\u003eci (to mark the cap as pending\nremoval) but leave it in the session list.  In iterate_caps, we\ncan safely finish removal and get the next cap pointer.\n\nWhile we\u0027re at it, clean up put_cap to not take a cap reservation\ncontext, as it was never used.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "85ccce43a3fc15a40ded6ae1603e3f68a17f4d24",
      "tree": "1e15fb7dc7df43da4a3feacff671c8169e96291d",
      "parents": [
        "5ce6e9dbe6805ab8ee67e21936d17f431adc63c6"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Feb 17 10:02:43 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Feb 17 10:02:43 2010 -0800"
      },
      "message": "ceph: clean up readdir caps reservation\n\nUse a global counter for the minimum number of allocated caps instead of\nhard coding a check against readdir_max.  This takes into account multiple\nclient instances, and avoids examining the superblock mount options when a\ncap is dropped.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "8031049147c58d9d8b6226c3ac31a9d72d053e25",
      "tree": "d89aec0fc9dcae6ea20fe0665b7700911c2dbf61",
      "parents": [
        "0840d8af3e6e40bcd5f2366698eb2755f88acfea"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Feb 09 16:43:11 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 11 11:48:55 2010 -0800"
      },
      "message": "ceph: remove bogus invalidate_mapping_pages\n\nWe were invalidating mapping pages when dropping FILE_CACHE in\n__send_cap().  But ceph_check_caps attempts to invalidate already, and\nalso checks for success, so we should never get to this point.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0840d8af3e6e40bcd5f2366698eb2755f88acfea",
      "tree": "9eed5acb6d23bdefcc4e4a832347199cd3b181d2",
      "parents": [
        "3c6f6b79a64db7f1c7abf09d693db3b0066784fb"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Feb 09 15:44:16 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 11 11:48:54 2010 -0800"
      },
      "message": "ceph: invalidate pages even if truncate is pending\n\nThere is no reason not to invalidate pages when a truncate is pending.\nBoth throw out page cache pages.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "3c6f6b79a64db7f1c7abf09d693db3b0066784fb",
      "tree": "e17b4cd848212b0556180331280044dd1526b742",
      "parents": [
        "6a026589ba333185c466c906376fe022a27a53f9"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Feb 09 15:24:44 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 11 11:48:54 2010 -0800"
      },
      "message": "ceph: cleanup async writeback, truncation, invalidate helpers\n\nGrab inode ref in helper.  Make work functions static, with consistent\nnaming.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "68c283236a1e0772e1a469dd2ffc17afc300b07b",
      "tree": "6bdca5168713dab721f5458487e3c9d218d24726",
      "parents": [
        "cbd03635913a86afb7c2cfc0058932956b05b51e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Feb 09 13:41:47 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 11 11:48:52 2010 -0800"
      },
      "message": "ceph: do not retain caps that are being revoked\n\nNever retain caps in __send_cap() that are being revoked.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "cbd03635913a86afb7c2cfc0058932956b05b51e",
      "tree": "5938439c41509d72af379fcfc770e37fb5527847",
      "parents": [
        "29065a513aa4c7e4b46b77cbcd25f814a4ca0bfe"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Feb 09 13:41:18 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 11 11:48:52 2010 -0800"
      },
      "message": "ceph: cap revocation fixes\n\nTry to invalidate pages in ceph_check_caps() if FILE_CACHE is being\nrevoked.  If we fail, queue an immediate async invalidate if FILE_CACHE\nis being revoked.  (If it\u0027s not being revoked, we just queue the caps\nfor later evaluation later, as per the old behavior.)\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6df058c025ce343052c5516b1d8a9a7e73cddd64",
      "tree": "58230bd258f71c2c3adf56a55d11ed39f404d12a",
      "parents": [
        "0cf90ab5b075821940873e73cdbfeb8edc3dabe8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Dec 22 11:24:33 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Dec 23 08:17:22 2009 -0800"
      },
      "message": "ceph: include transaction id in ceph_msg_header (protocol change)\n\nMany (most?) message types include a transaction id.  By including it in\nthe fixed size header, we always have it available even when we are unable\nto allocate memory for the (larger, variable sized) message body.  This\nwill allow us to error out the appropriate request instead of (silently)\ndropping the reply.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5dacf09121ffb2e5fc7d15b78cae0b77042a1935",
      "tree": "8a4ec2fde459f93936a91644d024673d37347408",
      "parents": [
        "7067f797b8409f1e10ec95ac2c1e17a200173d13"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Dec 21 20:40:34 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Dec 23 08:17:14 2009 -0800"
      },
      "message": "ceph: do not touch_caps while iterating over caps list\n\nAvoid confusing iterate_session_caps(), flag the session while we are\niterating so that __touch_cap does not rearrange items on the list.\n\nAll other modifiers of session-\u003es_caps do so under the protection of\ns_mutex.\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": "50b885b96c903e420a1eac54dd27626244704a06",
      "tree": "35038a32cbb963c784685e8b73d6ecd1a7cde3c9",
      "parents": [
        "34b43a56b9b103a7a820032177131532d9dbdbe8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Dec 01 14:12:07 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Dec 03 14:59:44 2009 -0800"
      },
      "message": "ceph: whitespace cleanup\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "11ea8eda064aa4dc6e44a6dade1891b69ebd5255",
      "tree": "e7def548d1d80e38710cc7d1fe30d4b2cd37d56f",
      "parents": [
        "039934b895c89c2bb40aa5132efe00e60b70efca"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Nov 12 15:07:24 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Nov 12 15:57:05 2009 -0800"
      },
      "message": "ceph: fix page invalidation deadlock\n\nWe occasionally want to make a best-effort attempt to invalidate cache\npages without fear of blocking.  If this fails, we fall back to an async\ninvalidate in another thread.\n\nUse invalidate_mapping_pages instead of invalidate_inode_page2, as that\nwill skip locked pages, and not deadlock.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "cdac830313fa6bf2831693af80fefe4aaac11b7d",
      "tree": "cf5004237a084779ca84130c3303e42e9ea9fa35",
      "parents": [
        "eed0ef2caf928327332da54d23579debe629d5bc"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Nov 10 16:02:23 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Nov 10 16:03:53 2009 -0800"
      },
      "message": "ceph: remove recon_gen logic\n\nWe don\u0027t get an explicit affirmative confirmation that our caps reconnect,\nnor do we necessarily want to pay that cost.  So, take all this code out\nfor now.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "685f9a5d14194fc35db73e5e7370740ccc14b64a",
      "tree": "4c34ac2348149d91ad5e08cd105207810f0afdc9",
      "parents": [
        "fb690390e305ea51e1883b105c7d3c52d7100ba5"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Nov 09 12:05:48 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Nov 09 12:06:07 2009 -0800"
      },
      "message": "ceph: do not confuse stale and dead (unreconnected) caps\n\nWe were using the cap_gen to track both stale caps (caps that timed out\ndue to temporarily losing touch with the mds) and dead caps that did not\nreconnect after an MDS failure.  Introduce a recon_gen counter to track\nreconnections to restarted MDSs and kill dead caps based on that instead.\n\nRename gen to cap_gen while we\u0027re at it to make it more clear which is\nwhich.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6b8051855d983db8480ff1ea1b02ef2b49203c22",
      "tree": "afb72be534ddd4c474a2ec9b7cf2ea5ab86799bc",
      "parents": [
        "e53c2fe075feda1fd4f009956ac026dc24c3a199"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 27 11:50:50 2009 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 27 11:57:03 2009 -0700"
      },
      "message": "ceph: allocate and parse mount args before client instance\n\nThis simplifies much of the error handling during mount.  It also means\nthat we have the mount args before client creation, and we can initialize\nbased on those options.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "76e3b390d41db9d69e254a09dd1aedd3e6aac25f",
      "tree": "2a2b6586fd36dcef430d1c13e07aa42ceaa51c84",
      "parents": [
        "8f3bc053c610826a657714649ea596f07875db2e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Oct 15 18:13:53 2009 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Oct 15 18:14:44 2009 -0700"
      },
      "message": "ceph: move dirty caps code around\n\nCleanup only.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "afcdaea3f2a78ce4873bd7e98a6d603bda23d167",
      "tree": "08defc298e2c27816d70bd41c8c3ecc80a82ba79",
      "parents": [
        "cdc35f96277314bbfeefd0505410cabd69aebd8d"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Oct 14 14:27:38 2009 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Oct 15 18:14:35 2009 -0700"
      },
      "message": "ceph: flush dirty caps via the cap_dirty list\n\nPreviously we were flushing dirty caps by passing an extra flag\nwhen traversing the delayed caps list.  Besides being a bit ugly,\nthat can also miss caps that are dirty but didn\u0027t result in a\ncap requeue: notably, mark_caps_dirty().\n\nSeparate the flushing into a separate helper, and traverse the\ncap_dirty list.\n\nThis also brings i_dirty_item in line with i_dirty_caps: we are\non the list IFF caps !\u003d 0.  We carry an inode ref IFF\ndirty_caps|flushing_caps !\u003d 0.\n\nLose the unused return value from __ceph_mark_caps_dirty().\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "cdc35f96277314bbfeefd0505410cabd69aebd8d",
      "tree": "296cdc331f4a8902f284a7cf72ba29529121a94f",
      "parents": [
        "f2cf418cec8d61df0651a0140a92a8c75246e14f"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Oct 14 14:24:19 2009 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Oct 14 14:43:56 2009 -0700"
      },
      "message": "ceph: move generic flushing code into helper\n\nBoth callers of __mark_caps_flushing() do the same work; move it\ninto the helper.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a8599bd821d084d04a3290fffae1071624ec00ea",
      "tree": "e2323ebfad9a49fdb579ff87d1ec3a8694e8c0f5",
      "parents": [
        "ba75bb98cfb93b62c54af25bf67ff90857264bbe"
      ],
      "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: capability management\n\nThe Ceph metadata servers control client access to inode metadata and\nfile data by issuing capabilities, granting clients permission to read\nand/or write both inode field and file data to OSDs (storage nodes).\nEach capability consists of a set of bits indicating which operations\nare allowed.\n\nIf the client holds a *_SHARED cap, the client has a coherent value\nthat can be safely read from the cached inode.\n\nIn the case of a *_EXCL (exclusive) or FILE_WR capabilities, the client\nis allowed to change inode attributes (e.g., file size, mtime), note\nits dirty state in the ceph_cap, and asynchronously flush that\nmetadata change to the MDS.\n\nIn the event of a conflicting operation (perhaps by another client),\nthe MDS will revoke the conflicting client capabilities.\n\nIn order for a client to cache an inode, it must hold a capability\nwith at least one MDS server.  When inodes are released, release\nnotifications are batched and periodically sent en masse to the MDS\ncluster to release server state.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    }
  ]
}
