)]}'
{
  "log": [
    {
      "commit": "70b666c3b4cb2b96098d80e6f515e4bc6d37db5a",
      "tree": "dd82036114adf9d0c28120500d58833cacfbc004",
      "parents": [
        "db3540522e955c1ebb391f4f5324dff4f20ecd09"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri May 27 09:24:26 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jun 07 21:34:11 2011 -0700"
      },
      "message": "ceph: use ihold when we already have an inode ref\n\nWe should use ihold whenever we already have a stable inode ref, even\nwhen we aren\u0027t holding i_lock.  This avoids adding new and unnecessary\nlocking dependencies.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "da39822c6565095a0151ccf9d6b95e2ae5612885",
      "tree": "7e69ca065c8ea5b4152e73f59347924f9edb02d8",
      "parents": [
        "31456665a02148353a83fec84d3182700e356588"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 15:28:11 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:25:04 2011 -0700"
      },
      "message": "ceph: fix broken comparison in readdir loop\n\nBoth off and fi-\u003eoffset are unsigned, so the difference is always \u003e\u003d 0.\nCompare them directly instead of the sign of the difference.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ae598083015e22d1802617c18d3408971b1bddc0",
      "tree": "3aba3bf823153f0e9fd8a8748b1acfdc5ab10e34",
      "parents": [
        "e8f54ce169125a2e59330fac25ad3c9ac0ce22a5"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 12 14:28:05 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu May 19 11:25:02 2011 -0700"
      },
      "message": "ceph: use snprintf for dirstat content\n\nWe allocate a buffer for rstats if the dirstat option is enabled.  Use\nsnprintf.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "147851d2dc4d2be2f60d40276d12d7ef82f8a7ce",
      "tree": "e7b112fab505f6f97694fee5f2d6c509e8dd6289",
      "parents": [
        "49bcb93236ce1c60d9b7eb21a0aea1999f4d8709"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 15 14:57:41 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 21 12:24:26 2011 -0700"
      },
      "message": "ceph: rename dentry_release -\u003e d_release, fix comment\n\nJust for consistency\u0027s sake.  Fix obsolete comment too.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ad1fee96cbaf873520064252c5dc3212c9844861",
      "tree": "bce9fcd824af836279a6dd10007430cc3872cb3a",
      "parents": [
        "483fac71485e5063ff4033b6dc7d91567f1b6ff1"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Fri Jan 21 16:44:03 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Mar 21 12:24:22 2011 -0700"
      },
      "message": "ceph: add ino32 mount option\n\nThe ino32 mount option forces the ceph fs to report 32 bit\nino values.  This is useful for 64 bit kernels with 32 bit userspace.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\n"
    },
    {
      "commit": "0eb980e31770cfeff6e27760b4692d595b8dbf28",
      "tree": "62ce6d994beb41f1276169de643ebc9e343daeaa",
      "parents": [
        "c78f4cc5e7d642c7009089817c12d8984e7ba872"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:44:05 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 10 03:44:05 2011 -0500"
      },
      "message": "ceph: fix d_revalidate oopsen on NFS exports\n\ncan\u0027t blindly check nd-\u003eflags in -\u003ed_revalidate()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "455cec0abff563574cca432ced49f734117ca113",
      "tree": "594e8dd5ac6c48a97836e5ca1e6ce451e157f2a2",
      "parents": [
        "e00de341fdb76c955703b4438100f9933c452b7f"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 03 13:44:35 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Mar 04 12:25:09 2011 -0800"
      },
      "message": "ceph: no .snap inside of snapped namespace\n\nOtherwise you can do things like\n\n# mkdir .snap/foo\n# cd .snap/foo/.snap\n# ls\n\u003cbadness\u003e\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "16a8b70a5a757db513f036bbcc73309f6c507d81",
      "tree": "e075716a8e58149894fcad3fa36ebf6ea16cfc6e",
      "parents": [
        "b545cc1505eb49247071ce9f4092665de788ca00"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Feb 28 12:49:15 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 03 10:09:52 2011 -0800"
      },
      "message": "ceph: do not clear I_COMPLETE from d_release\n\nFirst, this was racy anyway: d_release isn\u0027t called until well after the\ndentry is unhashed.  Second, this runs afoul of the recent dcache change\nthat clears d_parent prior to calling d_release (949854d0), causing a NULL\npointer dereference.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "b545cc1505eb49247071ce9f4092665de788ca00",
      "tree": "25bfbae54c086a1fdd0801efdd07aa4bdfdac951",
      "parents": [
        "9bde178d052418af0b8e0f12932cf02ab4764c9d"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Feb 28 12:46:46 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 03 10:09:51 2011 -0800"
      },
      "message": "ceph: do not set I_COMPLETE\n\nDo not set the I_COMPLETE flag on directories until we resolve races with\ndcache pruning.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "9bde178d052418af0b8e0f12932cf02ab4764c9d",
      "tree": "e70cf12b6687ce93005ca97937e5b79da42e09a1",
      "parents": [
        "f5412be599602124d2bdd49947b231dd77c0bf99"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Feb 28 09:47:37 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Mar 03 10:09:50 2011 -0800"
      },
      "message": "Revert \"ceph: keep reference to parent inode on ceph_dentry\"\n\nThis reverts commit 97d79b403ef03f729883246208ef5d8a2ebc4d68.\n\nThis fails to account for d_parent changes due to rename or disconnected\ndentries due to submounts or NFS reexports.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "8bd89ca22010847e85de37b77d9f19f16b1962ad",
      "tree": "0bcee2ae6a85443177a6d95ed960301e0f4c9d57",
      "parents": [
        "b08b69a110bd981909c248f89997dcdcdfd5a39c",
        "97d79b403ef03f729883246208ef5d8a2ebc4d68"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Feb 21 15:01:38 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Feb 21 15:01:38 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  ceph: keep reference to parent inode on ceph_dentry\n  ceph: queue cap_snaps once per realm\n  libceph: fix socket write error handling\n  libceph: fix socket read error handling\n"
    },
    {
      "commit": "97d79b403ef03f729883246208ef5d8a2ebc4d68",
      "tree": "6badfd07e1ae880bd30f99dfb55227d3210b6e3a",
      "parents": [
        "e8e1ba96b207deba1339b09983f8b29f92cb1497"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Tue Jan 18 13:37:28 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Feb 19 19:59:14 2011 -0800"
      },
      "message": "ceph: keep reference to parent inode on ceph_dentry\n\nWhen creating a new dentry we now hold a reference to the parent\ninode in the ceph_dentry.  This is required due to the new RCU\nchanges from 949854d0, which set dentry-\u003ed_parent to NULL in d_kill before\ncalling the -\u003erelease() callback.  If/when that behavior is changed, we can\nrevert this hack.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a1703154200c390ab03c10224c586e815d3e31e8",
      "tree": "df90865eed3cfdf7af8664b5453a90e09d17480a",
      "parents": [
        "67b5ad9a63caa2ce56ddd2b22b802dae00d72c13",
        "766fc43973b16f9becb6b7402b3e052dbb84adee"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:25:24 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:25:24 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:\n  rbd: fix cleanup when trying to mount inexistent image\n  net/ceph: make ceph_msgr_wq non-reentrant\n  ceph: fsc-\u003e*_wq\u0027s aren\u0027t used in memory reclaim path\n  ceph: Always free allocated memory in osdmap_decode()\n  ceph: Makefile: Remove unnessary code\n  ceph: associate requests with opening sessions\n  ceph: drop redundant r_mds field\n  ceph: implement DIRLAYOUTHASH feature to get dir layout from MDS\n  ceph: add dir_layout to inode\n"
    },
    {
      "commit": "6c0f3af72cb1622a66962a1180c36ef8c41be8e2",
      "tree": "66e415bf31ea31a3e9360c0ce624fd20b6050c89",
      "parents": [
        "3c0eee3fe6a3a1c745379547c7e7c904aa64f6d5"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Nov 16 11:14:34 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Jan 12 15:15:12 2011 -0800"
      },
      "message": "ceph: add dir_layout to inode\n\nAdd a ceph_dir_layout to the inode, and calculate dentry hash values based\non the parent directory\u0027s specified dir_hash function.  This is needed\nbecause the old default Linux dcache hash function is extremely week and\nleads to a poor distribution of files among dir fragments.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "34286d6662308d82aed891852d04c7c3a2649b16",
      "tree": "c4b7311404d302e7cb94df7a4690298e1059910a",
      "parents": [
        "44a7d7a878c9cbb74f236ea755b25b6b2e26a9a9"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:57 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:29 2011 +1100"
      },
      "message": "fs: rcu-walk aware d_revalidate method\n\nRequire filesystems be aware of .d_revalidate being called in rcu-walk\nmode (nd-\u003eflags \u0026 LOOKUP_RCU). For now do a simple push down, returning\n-ECHILD from all implementations.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "fb045adb99d9b7c562dc7fef834857f78249daa1",
      "tree": "1fd6a4024fffeec568abe100d730589bfdb81c38",
      "parents": [
        "5f57cbcc02cf18f6b22ef4066bb10afeb8f930ff"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:55 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:28 2011 +1100"
      },
      "message": "fs: dcache reduce branches in lookup path\n\nReduce some branches and memory accesses in dcache lookup by adding dentry\nflags to indicate common d_ops are set, rather than having to check them.\nThis saves a pointer memory access (dentry-\u003ed_op) in common path lookup\nsituations, and saves another pointer load and branch in cases where we\nhave d_op but not the particular operation.\n\nPatched with:\n\ngit grep -E \u0027[.\u003e]([[:space:]])*d_op([[:space:]])*\u003d\u0027 | xargs sed -e \u0027s/\\([^\\t ]*\\)-\u003ed_op \u003d \\(.*\\);/d_set_d_op(\\1, \\2);/\u0027 -e \u0027s/\\([^\\t ]*\\)\\.d_op \u003d \\(.*\\);/d_set_d_op(\\\u0026\\1, \\2);/\u0027 -i\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b5c84bf6f6fa3a7dfdcb556023a62953574b60ee",
      "tree": "7a2c299a180713e21d5cb653cb933121adf53c31",
      "parents": [
        "949854d02455080d20cd3e1db28a3a18daf7599d"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:38 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:23 2011 +1100"
      },
      "message": "fs: dcache remove dcache_lock\n\ndcache_lock no longer protects anything. remove it.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "2fd6b7f50797f2e993eea59e0a0b8c6399c811dc",
      "tree": "ce33b94b34844c09103836cf4cfa4364b742f217",
      "parents": [
        "da5029563a0a026c64821b09e8e7b4fd81d3fe1b"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:34 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:21 2011 +1100"
      },
      "message": "fs: dcache scale subdirs\n\nProtect d_subdirs and d_child with d_lock, except in filesystems that aren\u0027t\nusing dcache_lock for these anyway (eg. using i_mutex).\n\nNote: if we change the locking rule in future so that -\u003ed_child protection is\nprovided only with -\u003ed_parent-\u003ed_lock, it may allow us to reduce some locking.\nBut it would be an exception to an otherwise regular locking scheme, so we\u0027d\nhave to see some good results. Probably not worthwhile.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "da5029563a0a026c64821b09e8e7b4fd81d3fe1b",
      "tree": "5d5618e0cb382390073377b1be7d0aa76879ac54",
      "parents": [
        "b7ab39f631f505edc2bbdb86620d5493f995c9da"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:33 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:21 2011 +1100"
      },
      "message": "fs: dcache scale d_unhashed\n\nProtect d_unhashed(dentry) condition with d_lock. This means keeping\nDCACHE_UNHASHED bit in synch with hash manipulations.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "b7ab39f631f505edc2bbdb86620d5493f995c9da",
      "tree": "62be97ebc7fc69ceb601f23312d335ebb8038ee7",
      "parents": [
        "2304450783dfde7b0b94ae234edd0dbffa865073"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:32 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:21 2011 +1100"
      },
      "message": "fs: dcache scale dentry refcount\n\nMake d_count non-atomic and protect it with d_lock. This allows us to ensure a\n0 refcount dentry remains 0 without dcache_lock. It is also fairly natural when\nwe start protecting many other dentry members with d_lock.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "92cf765237e2787eb168096305c448caf25ac7f8",
      "tree": "089f6d5a0f979ca858295cbf616ee2e85a62680f",
      "parents": [
        "ab226e21ad34f6ef52e00d2ab399d2364b4cdfee"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Dec 17 09:53:41 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Dec 17 09:53:48 2010 -0800"
      },
      "message": "ceph: fix null pointer dereference in ceph_init_dentry for nfs reexport\n\nThe fh_to_dentry etc. methods use ceph_init_dentry(), which assumes that\nd_parent is defined.  It isn\u0027t for those callers, so check!\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "884ea892763d4dfba509743f65961c782c0442db",
      "tree": "92a7f5b67aa06cf32457ccb2b69c28c528a48c15",
      "parents": [
        "3561d43fd289f590fdae672e5eb831b8d5cf0bf6"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Nov 22 22:58:06 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Dec 01 14:15:31 2010 -0800"
      },
      "message": "ceph: avoid possible null deref in readdir after dir llseek\n\nlast may be NULL, but we dereference it in the else branch without\nchecking.  Normally it doesn\u0027t trigger because last \u003d\u003d NULL when fpos \u003d\u003d 2,\nbut it could happen on a newly opened dir if the user seeks forward.\n\nReported-by: Dan Carpenter \u003cerror27@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "3105c19c450ac7c18ab28c19d364b588767261b3",
      "tree": "2b306fb3b8536f5f92f085993bbd966d9eb3929a",
      "parents": [
        "7b88dadc13e0004947de52df128dbd5b0754ed0a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Nov 18 09:15:07 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Nov 18 09:15:07 2010 -0800"
      },
      "message": "ceph: fix readdir EOVERFLOW on 32-bit archs\n\nOne of the readdir filldir_t callers was passing the raw ceph 64-bit ino\ninstead of the hashed 32-bit one, producing an EOVERFLOW in the filler\ncallback.  Fix this by calling the ceph_vino_to_ino() helper to do the\nconversion.\n\nReported-by: Jan Smets \u003cjan.smets@alcatel-lucent.com\u003e\nTested-by: Jan Smets \u003cjan.smets@alcatel-lucent.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "7b88dadc13e0004947de52df128dbd5b0754ed0a",
      "tree": "9a2fd203b382b5922dfd1be5cb3adf055ff50c2d",
      "parents": [
        "a1629c3b24f26ec1b0f534874af674a6b4c1540b"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Nov 11 16:48:59 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Nov 11 16:48:59 2010 -0800"
      },
      "message": "ceph: fix frag offset for non-leftmost frags\n\nWe start at offset 2 for the leftmost frag, and 0 for subsequent frags.\nWhen we reach the end (rightmost), we go back to 2.  This fixes readdir on\nfragmented (large) directories.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a1629c3b24f26ec1b0f534874af674a6b4c1540b",
      "tree": "7b40b54486f68189cde9753aca31d8e3d8af61a2",
      "parents": [
        "c5c6b19d4b8f5431fca05f28ae9e141045022149"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Nov 11 15:24:06 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Nov 11 15:24:06 2010 -0800"
      },
      "message": "ceph: fix dangling pointer\n\nClear fi-\u003elast_name when it\u0027s freed.  The only caller is rewinddir() (or\nequivalent lseek).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "efa4c1206eaff047c474af2136748a58eb8cc33b",
      "tree": "61f8957ed7735c01a6d6900a3c4c2c45d084c3a7",
      "parents": [
        "61413c2f594e6b63db2b14c70c2e7d8cf02f9c00"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Oct 18 14:04:31 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Oct 20 15:38:27 2010 -0700"
      },
      "message": "ceph: do not carry i_lock for readdir from dcache\n\nWe were taking dcache_lock inside of i_lock, which introduces a dependency\nnot found elsewhere in the kernel, complicationg the vfs locking\nscalability work.  Since we don\u0027t actually need it here anyway, remove\nit.\n\nWe only need i_lock to test for the I_COMPLETE flag, so be careful to do\nso without dcache_lock held.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "4c32f5dda5ffe23687a55da1538b7cc426710d1a",
      "tree": "d0048f2310cdf1809ac13d4c8d59c75f96f67280",
      "parents": [
        "602adf400201636e95c3fed9f31fba54a3d7e844"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 24 16:27:36 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Oct 20 15:38:14 2010 -0700"
      },
      "message": "ceph: do not hide .snap in root directory\n\nSnaps in the root directory are now supported by the MDS, and harmless on\nolder versions.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "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": "ca04d9c3ec721e474f00992efc1b1afb625507f5",
      "tree": "9dfe95fe2a08ff008888a754db10f31ac04fbea4",
      "parents": [
        "2bfc96a127bc1cc94d26bfaa40159966064f9c8c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Aug 26 16:12:01 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Sep 11 10:52:47 2010 -0700"
      },
      "message": "ceph: fix null pointer deref on anon root dentry release\n\nWhen we release a root dentry, particularly after a splice, the parent\n(actually our) inode was evaluating to NULL and was getting dereferenced\nby ceph_snap().  This is reproduced by something as simple as\n\n mount -t ceph monhost:/a/b mnt\n mount -t ceph monhost:/a mnt2\n ls mnt2\n\nA splice_dentry() would kill the old \u0027b\u0027 inode\u0027s root dentry, and we\u0027d\ncrash while releasing it.\n\nFix by checking for both the ROOT and NULL cases explicitly.  We only need\nto invalidate the parent dir when we have a correct parent to invalidate.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "36e21687e6e51c4225c42e6291938363f7bbfa7c",
      "tree": "15f30bf1e622b564b6663217cf99c75aad03fae3",
      "parents": [
        "7d8cb26d7dcb911f110b7762bd5941e8f009d6c3"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 24 16:23:48 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 24 16:24:19 2010 -0700"
      },
      "message": "ceph: initialize fields on new dentry_infos\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "52dfb8ac0ef41168c1a10590b7259a5ab1cd2ab7",
      "tree": "b559e3232c32a1d5e97785aea6f9ccafbba054ce",
      "parents": [
        "213c99ee0cf17ff0fbffb6fb540bd29615cd19d5"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 03 10:25:30 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 03 10:25:30 2010 -0700"
      },
      "message": "ceph: constify dentry_operations\n\nThis makes checkpatch happy.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "cd84db6e4051a9fb7941d49d31a0193a3371fd61",
      "tree": "beb657b2cc6b4184d97a85502b29a291616a83ab",
      "parents": [
        "ca81f3f6bd759f90a4b940cddda1f8bc61a7725a"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Fri Jun 11 16:58:48 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sun Aug 01 20:11:40 2010 -0700"
      },
      "message": "ceph: code cleanup\n\nMainly fixing minor issues reported by sparse.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "252af5214682191e34e57204e1a31924fb82c207",
      "tree": "56834ab133d2b466b35dfff0abd4db71a9f658ad",
      "parents": [
        "a0dff78dab0ff8d78bd5c9e33c105cf1292f2282"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Jul 22 13:49:08 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Jul 23 10:02:05 2010 -0700"
      },
      "message": "ceph: fix d_release dop for snapdir, snapped dentries\n\nWe need to set the d_release dop for snapdir and snapped dentries so that\nthe ceph_dentry_info struct gets released.  We also use the dcache to\ncache readdir results when possible, which only works if we know when\ndentries are dropped from the cache.  Since we don\u0027t use the dcache for\nreaddir in the hidden snapdir, avoid that case in ceph_dentry_release.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a0dff78dab0ff8d78bd5c9e33c105cf1292f2282",
      "tree": "70e63198ffd47f391b804e6d8303778cf514e581",
      "parents": [
        "b37fa16e78d6f9790462b3181602a26b5af36260"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Jul 22 13:47:21 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Jul 22 13:50:45 2010 -0700"
      },
      "message": "ceph: avoid dcache readdir for snapdir\n\nWe should always go to the MDS for readdir on the hidden snapdir.  The\nset of snapshots can change at any time; the client can\u0027t trust its cache\nfor that.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "b612a0553714c6b9744ad0d03f10cac78f3a84b1",
      "tree": "9dfb5cb5d13c187ff1f54448f8441512203625d0",
      "parents": [
        "52b0ace7dfe8f70350218017a95d7cab1eb41fbb",
        "2a8e5e3637e2fc058798f5d3626f525729ffaaaf"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun May 30 08:56:39 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun May 30 08:56:39 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: clean up on forwarded aborted mds request\n  ceph: fix leak of osd authorizer\n  ceph: close out mds, osd connections before stopping auth\n  ceph: make lease code DN specific\n  fs/ceph: Use ERR_CAST\n  ceph: renew auth tickets before they expire\n  ceph: do not resend mon requests on auth ticket renewal\n  ceph: removed duplicated #includes\n  ceph: avoid possible null dereference\n  ceph: make mds requests killable, not interruptible\n  sched: add wait_for_completion_killable_timeout\n"
    },
    {
      "commit": "7e34bc524ecae3a04d8cc427ee76ddad826a937b",
      "tree": "5065eb0e287e450aef2d8e03e3a18d8f895a4c9e",
      "parents": [
        "a41359fa355e7b450c610ed8e913d5d75c3c9c3b"
      ],
      "author": {
        "name": "Julia Lawall",
        "email": "julia@diku.dk",
        "time": "Sat May 22 12:01:14 2010 +0200"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat May 29 09:12:41 2010 -0700"
      },
      "message": "fs/ceph: Use ERR_CAST\n\nUse ERR_CAST(x) rather than ERR_PTR(PTR_ERR(x)).  The former makes more\nclear what is the purpose of the operation, which otherwise looks like a\nno-op.\n\nIn the case of fs/ceph/inode.c, ERR_CAST is not needed, because the type of\nthe returned value is the same as the type of the enclosing function.\n\nThe semantic patch that makes this change is as follows:\n(http://coccinelle.lip6.fr/)\n\n// \u003csmpl\u003e\n@@\ntype T;\nT x;\nidentifier f;\n@@\n\nT f (...) { \u003c+...\n- ERR_PTR(PTR_ERR(x))\n+ x\n ...+\u003e }\n\n@@\nexpression x;\n@@\n\n- ERR_PTR(PTR_ERR(x))\n+ ERR_CAST(x)\n// \u003c/smpl\u003e\n\nSigned-off-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "7ea8085910ef3dd4f3cad6845aaa2b580d39b115",
      "tree": "d9c1edb5906f943f7d70bfb4b65106e29772d379",
      "parents": [
        "cc967be54710d97c05229b2e5ba2d00df84ddd64"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed May 26 17:53:25 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 27 22:05:02 2010 -0400"
      },
      "message": "drop unused dentry argument to -\u003efsync\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "23804d91f112df09b832cd091b71af4dc2831aa8",
      "tree": "4b77c43b47d58f08ab02220c507dabfc8f6daf7a",
      "parents": [
        "366837706bae00abc2edd75add2579c1be18b2b8"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri May 14 13:06:30 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:41 2010 -0700"
      },
      "message": "ceph: specify max_bytes on readdir replies\n\nSpecify max bytes in request to bound size of reply.  Add associated\nmount option with default value of 512 KB.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "1cd3935bedccf592d44343890251452a6dd74fc4",
      "tree": "b088e425d19dbca7d7702e9f1bfa0b2dfa85eba0",
      "parents": [
        "1b7facc41b42c2ab904b2f88b64b1f8ca0ca6cb7"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 03 22:08:02 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:28 2010 -0700"
      },
      "message": "ceph: set dn offset when spliced\n\nWe want to assign an offset when the dentry goes from null to linked, which\nis always done by splice_dentry().  Notably, we should NOT assign an\noffset when a dentry is first created and is still null.\n\nBUG if we try to splice a non-null dentry (we shouldn\u0027t).\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f1f2765faedc24f8f2e9fd68521a5ea469801b60",
      "tree": "92952357c08d4b5e88151f42d01d1af4f9a652a3",
      "parents": [
        "bddfa3cc18fcd9c9313a1030b19d3b0ea2639310"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 03 21:50:39 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:26 2010 -0700"
      },
      "message": "ceph: set next_offset on readdir finish\n\nSet next_offset to 2 (always 2!), not 0, on readdir finish.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "8c6efb58a5bab880d45b2078cb55ec4320707daf",
      "tree": "fe4d72552be0525905d569f0efd09938c6175369",
      "parents": [
        "559c1e0073ae779d60e1c673cda837f3e4295302"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Apr 23 11:36:54 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 15:25:23 2010 -0700"
      },
      "message": "ceph: fix memory leak due to possible dentry init race\n\nFree dentry_info in error path.\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": "81a6cf2d30eac5d790f53cdff110892f7b18c7fe",
      "tree": "9dcc1d4492b8736cda6a007a4a1c076048bd87af",
      "parents": [
        "b4556396fac5b3f063d5b8ac54dc02f7612a75e1"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri May 14 09:35:38 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 17 10:25:45 2010 -0700"
      },
      "message": "ceph: invalidate affected dentry leases on aborted requests\n\nIf we abort a request, we return to caller, but the request may still\ncomplete.  And if we hold the dir FILE_EXCL bit, we may not release a\nlease when sending a request.  A simple un-tar, control-c, un-tar again\nwill reproduce the bug (manifested as a \u0027Cannot open: File exists\u0027).\n\nEnsure we invalidate affected dentry leases (as well dir I_COMPLETE) so\nwe don\u0027t have valid (but incorrect) leases.  Do the same, consistently, at\nother sites where I_COMPLETE is similarly cleared.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ea1409f96197c1bffe5d7d5bc967b3445edcc1fa",
      "tree": "cbbd8ed4cca9bb718a596277f1152f2f1d629c37",
      "parents": [
        "5c6a2cdb4fe8aaf6b54f022c14f13d2a12b45914"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Apr 28 16:12:06 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon May 03 10:49:25 2010 -0700"
      },
      "message": "ceph: clear dir complete, invalidate dentry on replayed rename\n\nIf a rename operation is resent to the MDS following an MDS restart, the\nclient does not get a full reply (containing the resulting metadata) back.\nIn that case, a ceph_rename() needs to compensate by doing anything useful\nthat fill_inode() would have, like d_move().\n\nIt also needs to invalidate the dentry (to workaround the vfs_rename_dir()\nbug) and clear the dir complete flag, just like fill_trace().\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": "e1e4dd0caa63e166afa46a1ccc947bebb4f66bcf",
      "tree": "028dcbe599b2ecd0a08519e741298a7a5fcb701d",
      "parents": [
        "fc837c8f0446b73a1661339db406c0238dd1d184"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Tue Apr 13 11:45:56 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Apr 13 12:28:54 2010 -0700"
      },
      "message": "ceph: reserve one more caps space when doing readdir\n\nWe were missing space for the directory cap.  The result was a BUG at\nfs/ceph/caps.c:2178.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "f5b066287c74b624583b993395a65d03a6487b3a",
      "tree": "113dd2a4bbf0d2ff9fd374b53dc377f55677f922",
      "parents": [
        "2844a76a25a2fc2f5025cf128c95a14d86146d33"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Apr 12 14:24:28 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Apr 12 14:25:51 2010 -0700"
      },
      "message": "ceph: fix dentry reference leak in dcache readdir\n\nWhen filldir returned an error (e.g. buffer full for a large directory),\nwe would leak a dentry reference, causing an oops on umount.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "9358c6d4c0264b1572554c49c4b92673ea9a5c72",
      "tree": "3d11a5021487dccf61b8d53c66c32df6b84223eb",
      "parents": [
        "2eaa9cfdf33b8d7fb7aff27792192e0019ae8fc6"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 30 13:54:41 2010 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 30 13:55:22 2010 -0700"
      },
      "message": "ceph: fix dentry rehashing on virtual .snap dir\n\nIf a lookup fails on the magic .snap directory, we bind it to a magic\nsnap directory inode in ceph_lookup_finish().  That code assumes the dentry\nis unhashed, but a recent server-side change started returning NULL leases\non lookup failure, causing the .snap dentry to be hashed and NULL by\nceph_fill_trace().\n\nThis causes dentry hash chain corruption, or a dies when d_rehash()\nincludes\n\tBUG_ON(!d_unhashed(entry));\n\nSo, avoid processing the NULL dentry lease if it the dentry matches the\nsnapdir name in ceph_fill_trace().  That allows the lookup completion to\nproperly bind it to the snapdir inode.  BUG there if dentry is hashed to\nbe sure.\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": "393f66209669ad23f4f6d4191234c1df4367df3c",
      "tree": "5c628bcf731c98f5627000192e7f2d23a7a039a5",
      "parents": [
        "d96d60498ff748c5a88c72ec5d1cc4ba9a583e7e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Mar 10 12:03:32 2010 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 23 07:47:06 2010 -0700"
      },
      "message": "ceph: fix possible double-free of mds request reference\n\nClear pointer to mds request after dropping the reference to\nensure we don\u0027t drop it again, as there is at least one error\npath through this function that does not reset fi-\u003elast_readdir\nto a new value.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "04a419f908b5291ff7e8ffd7aa351fa0ac0c08af",
      "tree": "2e634bdca766c27b88280ab5c1ce067f47ffe536",
      "parents": [
        "6df058c025ce343052c5516b1d8a9a7e73cddd64"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Dec 23 09:30:21 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Dec 23 09:30:21 2009 -0800"
      },
      "message": "ceph: add feature bits to connection handshake (protocol change)\n\nDefine supported and required feature set.  Fail connection if the server\nrequires features we do not support (TAG_FEATURES), or if the server does\nnot support features we require.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5de7bf8afa87f75af5ef3d6f9fce3e171cac834c",
      "tree": "42d3cdf8c6a78ee9057adca516dea26c890be24e",
      "parents": [
        "c4a29f26d50bea65809ca670992108a33aa2efa6"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Dec 21 11:48:44 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Dec 21 16:39:58 2009 -0800"
      },
      "message": "ceph: do not drop lease during revalidate\n\nWe need to hold session s_mutex for __ceph_mdsc_drop_dentry_lease(), which\nwe don\u0027t, so skip it.  It was purely an optimization.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "1d1de9160e0d8aff0d67a21137b62e63ffd6f184",
      "tree": "45482bacc25511428b150424f0bdb934b6d9bf73",
      "parents": [
        "50b885b96c903e420a1eac54dd27626244704a06"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Dec 02 11:54:25 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Dec 03 14:59:48 2009 -0800"
      },
      "message": "ceph: hide /.ceph from readdir results\n\nWe need to skip /.ceph in (cached) readdir results, and exclude \"/.ceph\"\nfrom the cached ENOENT lookup check.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "09b8a7d2af83ae96dc052f9708e50140d06a9b6c",
      "tree": "cb863b7cc50846bee4d8e85ec974dca5737de11e",
      "parents": [
        "cdac830313fa6bf2831693af80fefe4aaac11b7d"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Nov 11 15:21:27 2009 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Nov 11 15:50:25 2009 -0800"
      },
      "message": "ceph: exclude snapdir from readdir results\n\nIt was hidden from sync readdir, but not the cached dcache version.\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": "2817b000b02c5f0c05af67c01fb2684e1381d6ef",
      "tree": "32efd3c3cddde6824d4f1e44deb5e7694899dbe1",
      "parents": [
        "355da1eb7a1f91c276b991764e951bbcd8047599"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 06 11:31:08 2009 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 06 11:31:08 2009 -0700"
      },
      "message": "ceph: directory operations\n\nDirectory operations, including lookup, are defined here.  We take\nadvantage of lookup intents when possible.  For the most part, we just\nneed to build the proper requests for the metadata server(s) and\npass things off to the mds_client.\n\nThe results of most operations are normally incorporated into the\nclient\u0027s cache when the reply is parsed by ceph_fill_trace().\nHowever, if the MDS replies without a trace (e.g., when retrying an\nupdate after an MDS failure recovery), some operation-specific cleanup\nmay be needed.\n\nWe can validate cached dentries in two ways.  A per-dentry lease may\nbe issued by the MDS, or a per-directory cap may be issued that acts\nas a lease on the entire directory.  In the latter case, a \u0027gen\u0027 value\nis used to determine which dentries belong to the currently leased\ndirectory contents.\n\nWe normally prepopulate the dcache and icache with readdir results.\nThis makes subsequent lookups and getattrs avoid any server\ninteraction.  It also lets us satisfy readdir operation by peeking at\nthe dcache IFF we hold the per-directory cap/lease, previously\nperformed a readdir, and haven\u0027t dropped any of the resulting\ndentries.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    }
  ]
}
