)]}'
{
  "log": [
    {
      "commit": "56b59b429b4c26e5e730bc8c3d837de9f7d0a966",
      "tree": "191bf87e438a3985ccb7e3c5382fab8d31f94edb",
      "parents": [
        "9a7259d5c8978bbeb5fdcf64b168f8470d8208a6",
        "c666601a935b94cc0f3310339411b6940de751ba"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 10:01:29 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 10:01:29 2012 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\nPull Ceph updates for 3.4-rc1 from Sage Weil:\n \"Alex has been busy.  There are a range of rbd and libceph cleanups,\n  especially surrounding device setup and teardown, and a few critical\n  fixes in that code.  There are more cleanups in the messenger code,\n  virtual xattrs, a fix for CRC calculation/checks, and lots of other\n  miscellaneous stuff.\n\n  There\u0027s a patch from Amon Ott to make inos behave a bit better on\n  32-bit boxes, some decode check fixes from Xi Wang, and network\n  throttling fix from Jim Schutt, and a couple RBD fixes from Josh\n  Durgin.\n\n  No new functionality, just a lot of cleanup and bug fixing.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (65 commits)\n  rbd: move snap_rwsem to the device, rename to header_rwsem\n  ceph: fix three bugs, two in ceph_vxattrcb_file_layout()\n  libceph: isolate kmap() call in write_partial_msg_pages()\n  libceph: rename \"page_shift\" variable to something sensible\n  libceph: get rid of zero_page_address\n  libceph: only call kernel_sendpage() via helper\n  libceph: use kernel_sendpage() for sending zeroes\n  libceph: fix inverted crc option logic\n  libceph: some simple changes\n  libceph: small refactor in write_partial_kvec()\n  libceph: do crc calculations outside loop\n  libceph: separate CRC calculation from byte swapping\n  libceph: use \"do\" in CRC-related Boolean variables\n  ceph: ensure Boolean options support both senses\n  libceph: a few small changes\n  libceph: make ceph_tcp_connect() return int\n  libceph: encapsulate some messenger cleanup code\n  libceph: make ceph_msgr_wq private\n  libceph: encapsulate connection kvec operations\n  libceph: move prepare_write_banner()\n  ...\n"
    },
    {
      "commit": "3489b42a72a41d477665ab37f196ae9257180abb",
      "tree": "f90c349a10cb7ca6c1c2da5d141324c636817d33",
      "parents": [
        "8d63e318c4eb1bea6f7e3cb4b77849eaa167bfec"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 08 16:50:09 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:52 2012 -0500"
      },
      "message": "ceph: fix three bugs, two in ceph_vxattrcb_file_layout()\n\nIn ceph_vxattrcb_file_layout(), there is a check to determine\nwhether a preferred PG should be formatted into the output buffer.\nThat check assumes that a preferred PG number of 0 indicates \"no\npreference,\" but that is wrong.  No preference is indicated by a\nnegative (specifically, -1) PG number.\n\nIn addition, if that condition yields true, the preferred value\nis formatted into a sized buffer, but the size consumed by the\nearlier snprintf() call is not accounted for, opening up the\npossibilty of a buffer overrun.\n\nFinally, in ceph_vxattrcb_dir_rctime() where the nanoseconds part of\nthe time displayed did not include leading 0\u0027s, which led to\nerroneous (sub-second portion of) time values being shown.\n\nThis fixes these three issues:\n    http://tracker.newdream.net/issues/2155\n    http://tracker.newdream.net/issues/2156\n    http://tracker.newdream.net/issues/2157\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "cffaba15cd95d4a16eb5a6aa5c22a79f67d555ab",
      "tree": "d752174022e8444c70afb27e798e032163f89ac9",
      "parents": [
        "d3002b974cefbb7c1e325cc296966f768ff76b06"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Feb 15 07:43:54 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:51 2012 -0500"
      },
      "message": "ceph: ensure Boolean options support both senses\n\nMany ceph-related Boolean options offer the ability to both enable\nand disable a feature.  For all those that don\u0027t offer this, add\na new option so that they do.\n\nNote that ceph_show_options()--which reports mount options currently\nin effect--only reports the option if it is different from the\ndefault value.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ee57741c5209154b8ef124bcaa2496da1b69a988",
      "tree": "248a6e7bf259bb849f885f1ff4a82be74ab4913b",
      "parents": [
        "2107978668de13da484f7abc3f03516494c7fca9"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Tue Jan 24 10:08:36 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:47 2012 -0500"
      },
      "message": "rbd: make ceph_parse_options() return a pointer\n\nceph_parse_options() takes the address of a pointer as an argument\nand uses it to return the address of an allocated structure if\nsuccessful.  With this interface is not evident at call sites that\nthe pointer is always initialized.  Change the interface to return\nthe address instead (or a pointer-coded error code) to make the\nvalidity of the returned pointer obvious.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "18fa8b3feaac772925263b04b1429d80e2dfd779",
      "tree": "e9f6070faf16baf17bec93caa476afffeaa903b7",
      "parents": [
        "3ce6cd1233046eb97d6d2bd5d80c1cd40528ea2f"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:28 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:46 2012 -0500"
      },
      "message": "ceph: make ceph_setxattr() and ceph_removexattr() more alike\n\nThis patch just rearranges a few bits of code to make more\nportions of ceph_setxattr() and ceph_removexattr() identical.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "3ce6cd1233046eb97d6d2bd5d80c1cd40528ea2f",
      "tree": "43025c030db1741222b96156931b6aa2c8b85e51",
      "parents": [
        "aa4066ed7ba60421423c35f66b789bb3dd21d89e"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:28 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:46 2012 -0500"
      },
      "message": "ceph: avoid repeatedly computing the size of constant vxattr names\n\nAll names defined in the directory and file virtual extended\nattribute tables are constant, and the size of each is known at\ncompile time.  So there\u0027s no need to compute their length every\ntime any file\u0027s attribute is listed.\n\nRecord the length of each string and use it when needed to determine\nthe space need to represent them.  In addition, compute the\naggregate size of strings in each table just once at initialization\ntime.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "aa4066ed7ba60421423c35f66b789bb3dd21d89e",
      "tree": "3b3a805fd5acad82a5e4febb9770e939d9e533e3",
      "parents": [
        "881a5fa20092d221a7c4b365742c959ef4b297ec"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:28 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:46 2012 -0500"
      },
      "message": "ceph: encode type in vxattr callback routines\n\nThe names of the callback functions used for virtual extended\nattributes are based only on the last component of the attribute\nname.  Because of the way these are defined, this precludes allowing\na single (lowest) attribute name for different callbacks, dependent\non the type of file being operated on.  (For example, it might be\nnice to support both \"ceph.dir.layout\" and \"ceph.file.layout\".)\n\nJust change the callback names to avoid this problem.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "881a5fa20092d221a7c4b365742c959ef4b297ec",
      "tree": "3a983dfa715e1cf5594798bf48aa4668ba6de815",
      "parents": [
        "eb78808446aeed8e25b080c66bf823c1f188236d"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:28 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:46 2012 -0500"
      },
      "message": "ceph: drop \"_cb\" from name of struct ceph_vxattr_cb\n\nA struct ceph_vxattr_cb does not represent a callback at all, but\nrather a virtual extended attribute itself.  Drop the \"_cb\" suffix\nfrom its name to reflect that.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "eb78808446aeed8e25b080c66bf823c1f188236d",
      "tree": "d6d907a1028ead5286721f7d165c8cd20a6f4632",
      "parents": [
        "22891907193e005923a14384d82d702f6af4f0cf"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:28 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:46 2012 -0500"
      },
      "message": "ceph: use macros to normalize vxattr table definitions\n\nEntries in the ceph virtual extended attribute tables all follow a\ndistinct pattern in their definition.  Enforce this pattern through\nthe use of a macro.\n\nAlso, a null name field signals the end of the table, so make that\nbe the first field in the ceph_vxattr_cb structure.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "22891907193e005923a14384d82d702f6af4f0cf",
      "tree": "b41d7d2360f6fa013cc4a8b3732571f5d74afa1a",
      "parents": [
        "06476a69d8954f36a15ff5ddbfd47bdfcff22791"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:28 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:46 2012 -0500"
      },
      "message": "ceph: use a symbolic name for \"ceph.\" extended attribute namespace\n\nUse symbolic constants to define the top-level prefix for \"ceph.\"\nextended attribute names.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "06476a69d8954f36a15ff5ddbfd47bdfcff22791",
      "tree": "3fc48b0e9610b498b41eacbd1b23cce40ab456ec",
      "parents": [
        "b829c1954dbeb42a1277a8cb05943050ee70be94"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:46 2012 -0500"
      },
      "message": "ceph: pass inode rather than table to ceph_match_vxattr()\n\nAll callers of ceph_match_vxattr() determine what to pass as the\nfirst argument by calling ceph_inode_vxattrs(inode).  Just do that\ninside ceph_match_vxattr() itself, changing it to take an inode\nrather than the vxattr pointer as its first argument.\n\nAlso ensure the function works correctly for an empty table (i.e.,\ncontaining only a terminating null entry).\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "b829c1954dbeb42a1277a8cb05943050ee70be94",
      "tree": "661cb42188119da359b1850117a36a1fcf319063",
      "parents": [
        "99f0f3b2c4be15784bb4ede33b5f2c3f7861dba7"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Mon Jan 23 15:49:27 2012 -0600"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:46 2012 -0500"
      },
      "message": "ceph: don\u0027t null-terminate xattr values\n\nFor some reason, ceph_setxattr() allocates an extra byte in which a\n\u0027\\0\u0027 is stored past the end of an extended attribute value.  This is\nnot needed, and is potentially misleading, so get rid of it.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "80834312a4da1405a9bc788313c67643de6fcb4c",
      "tree": "46fdff81b144f9307a4361f943b7f0fa4d7f1341",
      "parents": [
        "64486697771cbe219fffcb5c8e2ed9ca4fdf086c"
      ],
      "author": {
        "name": "Xi Wang",
        "email": "xi.wang@gmail.com",
        "time": "Thu Feb 16 11:56:29 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: fix overflow check in build_snap_context()\n\nThe overflow check for a + n * b should be (n \u003e (ULONG_MAX - a) / b),\nrather than (n \u003e ULONG_MAX / b - a).\n\nSigned-off-by: Xi Wang \u003cxi.wang@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "810339ec2fae5cbd0164b8acde7fb65652755864",
      "tree": "4a7ea72b1af2201d2bc521afc5e34ed6f6a8ca41",
      "parents": [
        "a661fc561190c0ee2d7cfabcfa92204e2b3aa349"
      ],
      "author": {
        "name": "Xi Wang",
        "email": "xi.wang@gmail.com",
        "time": "Fri Feb 03 09:55:36 2012 -0500"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: avoid panic with mismatched symlink sizes in fill_inode()\n\nReturn -EINVAL rather than panic if iinfo-\u003esymlink_len and inode-\u003ei_size\ndo not match.\n\nAlso use kstrndup rather than kmalloc/memcpy.\n\nSigned-off-by: Xi Wang \u003cxi.wang@gmail.com\u003e\nReviewed-by: Alex Elder \u003celder@dreamhost.com\u003e\n"
    },
    {
      "commit": "a661fc561190c0ee2d7cfabcfa92204e2b3aa349",
      "tree": "792088d4d245645d5c91fbb97fd4ee2a43188bd1",
      "parents": [
        "1ce208a6ce030ea6ccd4b13c8cec0a84c0c7a1e9"
      ],
      "author": {
        "name": "Amon Ott",
        "email": "ao@m-privacy.de",
        "time": "Mon Jan 23 09:25:23 2012 -0800"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: use 2 instead of 1 as fallback for 32-bit inode number\n\nThe root directory of the Ceph mount has inode number 1, so falling back\nto 1 always creates a collision. 2 is unused on my test systems and seems\nless likely to collide.\n\nSigned-off-by: Amon Ott \u003cao@m-privacy.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "1ce208a6ce030ea6ccd4b13c8cec0a84c0c7a1e9",
      "tree": "2957ff4c5c853464fdd174a431a55a66924d6f79",
      "parents": [
        "182fac2689b769a96e7fc9defcd560c5cca92b1e"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Jan 12 17:48:11 2012 -0800"
      },
      "committer": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Mar 22 10:47:45 2012 -0500"
      },
      "message": "ceph: don\u0027t reset s_cap_ttl to zero\n\nAvoid the need to check for a special zero s_cap_ttl value by just\nusing (jiffies - 1) as the value assigned to indicate \"sometime in\nthe past.\"\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "48fde701aff662559b38d9a609574068f22d00fe",
      "tree": "aa6b203dc671b51d58575b65eb08310ff8309b60",
      "parents": [
        "6b4231e2f92adbcf96fb2a3fa751d7ca0a61b21f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jan 08 22:15:13 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 20 21:29:35 2012 -0400"
      },
      "message": "switch open-coded instances of d_make_root() to new helper\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6c073a7ee250118b8be3a2379c96fd7f78382b06",
      "tree": "b398bd9cad821a3543df835e5a0110f270acafb9",
      "parents": [
        "ff05f603c3238010769787f3ba54c48c290ed3e5",
        "d23a4b3fd6ef70b80411b39b8c8bc548a219ce70"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 02 15:47:33 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 02 15:47:33 2012 -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 safety of rbd_put_client()\n  rbd: fix a memory leak in rbd_get_client()\n  ceph: create a new session lock to avoid lock inversion\n  ceph: fix length validation in parse_reply_info()\n  ceph: initialize client debugfs outside of monc-\u003emutex\n  ceph: change \"ceph.layout\" xattr to be \"ceph.file.layout\"\n"
    },
    {
      "commit": "d8fb02abdc39f92a1066313e2b17047876afa8f9",
      "tree": "32f8126683dd185411b701b79d23900cf6c02035",
      "parents": [
        "32852a81bccd9e3d1953b894966393d1b546576d"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Thu Jan 12 17:48:10 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 02 12:49:19 2012 -0800"
      },
      "message": "ceph: create a new session lock to avoid lock inversion\n\nLockdep was reporting a possible circular lock dependency in\ndentry_lease_is_valid().  That function needs to sample the\nsession\u0027s s_cap_gen and and s_cap_ttl fields coherently, but needs\nto do so while holding a dentry lock.  The s_cap_lock field was\nbeing used to protect the two fields, but that can\u0027t be taken while\nholding a lock on a dentry within the session.\n\nIn most cases, the s_cap_gen and s_cap_ttl fields only get operated\non separately.  But in three cases they need to be updated together.\nImplement a new lock to protect the spots updating both fields\natomically is required.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "32852a81bccd9e3d1953b894966393d1b546576d",
      "tree": "8c21ce9f1a1e6ecfbeafdcc8552b77b3587bca5b",
      "parents": [
        "ab434b60ab07f8c44246b6fb0cddee436687a09a"
      ],
      "author": {
        "name": "Xi Wang",
        "email": "xi.wang@gmail.com",
        "time": "Sat Jan 14 22:20:59 2012 -0500"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 02 12:49:11 2012 -0800"
      },
      "message": "ceph: fix length validation in parse_reply_info()\n\n\"len\" is read from network and thus needs validation.  Otherwise, given\na bogus \"len\" value, p+len could be an out-of-bounds pointer, which is\nused in further parsing.\n\nSigned-off-by: Xi Wang \u003cxi.wang@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "114fc47492e23d93653e4a16664833e98d62a563",
      "tree": "c5ff822c89193cc6cad952cf24a06cd4a1f706eb",
      "parents": [
        "805a6af8dba5dfdd35ec35dc52ec0122400b2610"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Jan 11 17:41:01 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Feb 02 12:48:52 2012 -0800"
      },
      "message": "ceph: change \"ceph.layout\" xattr to be \"ceph.file.layout\"\n\nThe virtual extended attribute named \"ceph.layout\" is meaningful\nonly for regular files.  Change its name to be \"ceph.file.layout\" to\nmore directly reflect that in the ceph xattr namespace.  Preserve\nthe old \"ceph.layout\" name for the time being (until we decide it\u0027s\nsafe to get rid of it entirely).\n\nAdd a missing initializer for \"readonly\" in the terminating entry.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nReviewed-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "1a52bb0b686844021597d190e562ab55d1210104",
      "tree": "7edf13509869a6a7f1f488a679f15ff6c3057c54",
      "parents": [
        "8638094e956a47dbb9a25166705a91e9a0981d52",
        "83eb26af0db71f2dfe551405c55d982288fa6178"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:29:21 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jan 13 10:29:21 2012 -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: ensure prealloc_blob is in place when removing xattr\n  rbd: initialize snap_rwsem in rbd_add()\n  ceph: enable/disable dentry complete flags via mount option\n  vfs: export symbol d_find_any_alias()\n  ceph: always initialize the dentry in open_root_dentry()\n  libceph: remove useless return value for osd_client __send_request()\n  ceph: avoid iput() while holding spinlock in ceph_dir_fsync\n  ceph: avoid useless dget/dput in encode_fh\n  ceph: dereference pointer after checking for NULL\n  crush: fix force for non-root TAKE\n  ceph: remove unnecessary d_fsdata conditional checks\n  ceph: Use kmemdup rather than duplicating its implementation\n\nFix up conflicts in fs/ceph/super.c (d_alloc_root() failure handling vs\nalways initialize the dentry in open_root_dentry)\n"
    },
    {
      "commit": "83eb26af0db71f2dfe551405c55d982288fa6178",
      "tree": "c7bc62a810483e328cbe2b931416e58ec655ab9b",
      "parents": [
        "0e805a1d857799352e51e8697c0b1a30aec16913"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Jan 11 17:41:01 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Jan 12 11:00:51 2012 -0800"
      },
      "message": "ceph: ensure prealloc_blob is in place when removing xattr\n\nIn __ceph_build_xattrs_blob(), if a ceph inode\u0027s extended attributes\nare marked dirty, all attributes recorded in its rb_tree index are\nformatted into a \"blob\" buffer.  The target buffer is recorded in\nceph_inode-\u003ei_xattrs.prealloc_blob, and it is expected to exist and\nbe of sufficient size to hold the attributes.\n\nThe extended attributes are marked dirty in two cases: when a new\nattribute is added to the inode; or when one is removed.  In the\nformer case work is done to ensure the prealloc_blob buffer is\nproperly set up, but in the latter it is not.\n\nChange the logic in ceph_removexattr() so it matches what is\ndone in ceph_setxattr().  Note that this is done in a way that\nkeeps the two blocks of code nearly identical, in anticipation\nof a subsequent patch that encapsulates some of this logic into\none or more helper routines.\n\nSigned-off-by: Alex Elder \u003celder@dreamhost.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "a40dc6cc2e121abcbd1b22583ef5447763df510c",
      "tree": "1c747cfabf33c6c9ad56811fabd22285816fc27a",
      "parents": [
        "46f72b349290d2bd7aecea38f02609d814332df6"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 09:12:55 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Jan 12 11:00:40 2012 -0800"
      },
      "message": "ceph: enable/disable dentry complete flags via mount option\n\nEnable/disable use of the dentry dir \u0027complete\u0027 flag via a mount option.\nThis lets the admin control whether ceph uses the dcache to satisfy\nnegative lookups or readdir when it has the entire directory contents in\nits cache.\n\nThis is purely a performance optimization; correctness is guaranteed\nwhether it is enabled or not.\n\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "d46cfba5363a163851dc768f717f34185527a472",
      "tree": "18aaa9ab40b91b618ab206670de7a965f17589d1",
      "parents": [
        "56e925b677c5293e5aac73dac09e93b23259f907"
      ],
      "author": {
        "name": "Alex Elder",
        "email": "elder@dreamhost.com",
        "time": "Wed Jan 04 16:30:15 2012 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Jan 11 16:28:25 2012 -0800"
      },
      "message": "ceph: always initialize the dentry in open_root_dentry()\n\nWhen open_root_dentry() gets a dentry via d_obtain_alias() it does\nnot get initialized.  If the dentry obtained came from the cache,\nthis is OK.  But if not, the result is an improperly initialized\ndentry.\n\nTo fix this, call ceph_init_dentry() regardless of which path\nproduced the dentry.  That function returns immediately for a dentry\nthat is already initialized, it is safe to use either way.\n\n(Credit to Sage, who suggested this fix.)\n\nSigned-off-by: Alex Elder \u003caelder@sgi.com\u003e\n"
    },
    {
      "commit": "2ff179e650e95c2b21841b21dc46dc2edefd04cd",
      "tree": "9b15ba73039053111d73da96227e1589b3f11ff2",
      "parents": [
        "ee6b1baf67591b6d7ce1a6a07544343433d5ec9e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 03 10:09:07 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 08:57:02 2012 -0800"
      },
      "message": "ceph: avoid iput() while holding spinlock in ceph_dir_fsync\n\nceph_mdsc_put_request() can call iput(), which can sleep.  Don\u0027t do that.\n\nFixes: #1812\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ee6b1baf67591b6d7ce1a6a07544343433d5ec9e",
      "tree": "8aac5a6a2172d84d4188fe97bf3fe84aa558dc75",
      "parents": [
        "b8cd952b51034ad9f20ca147507ee68dc641c98c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 03 08:20:40 2012 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 08:57:00 2012 -0800"
      },
      "message": "ceph: avoid useless dget/dput in encode_fh\n\nNothing we do here sleeps, so just do it under d_lock and avoid the dget/\ndput entirely.\n\nReported-by: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "b8cd952b51034ad9f20ca147507ee68dc641c98c",
      "tree": "78fe2114ab9859eecc780206cc5d423b675b7e09",
      "parents": [
        "e11b05d31f21f0ea39ea288af667887cd6c21c80"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Tue Dec 13 09:56:30 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 08:56:59 2012 -0800"
      },
      "message": "ceph: dereference pointer after checking for NULL\n\nmoved dereference after BUG_ON\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\n"
    },
    {
      "commit": "3d8eb7a94e8f25a33362f708974ac7daae9e84f8",
      "tree": "5392b81331ea8733ac25e7a390ae64dbcd3b382a",
      "parents": [
        "186482560f660b8dbf77ee43aa6489cb45d342cd"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Nov 11 09:48:53 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jan 10 08:56:56 2012 -0800"
      },
      "message": "ceph: remove unnecessary d_fsdata conditional checks\n\nWe now set d_fsdata unconditionally on all dentries prior to setting up\nthe d_ops, so all of these checks are unnecessary.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "3c5184ef1216dd476c9c67f22a199d90ac4d5892",
      "tree": "f6bd6d77ee9d1260892c8e8589497eaa2f5efbab",
      "parents": [
        "94bf608a18fa4421315275a81c5489734599297a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 09 16:34:32 2012 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 09 16:36:12 2012 -0500"
      },
      "message": "ceph: d_alloc_root() may fail\n\n... and ceph_init_dentry(NULL) will oops\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "34c80b1d93e6e20ca9dea0baf583a5b5510d92d4",
      "tree": "7dcbf0a4e09464247e6992c8f44fcc872867bd3a",
      "parents": [
        "a6322de67b58a00e3a783ad9c87c2a11b2d67b47"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 08 21:32:45 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 06 23:19:54 2012 -0500"
      },
      "message": "vfs: switch -\u003eshow_options() to struct dentry *\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "5706b27deae29ceee26d0c20112f087a9b841575",
      "tree": "8cd83edcaa711709e5671bd35376f3a9f67484f3",
      "parents": [
        "138d570de290ee7dbb18ef75d4f5735340352c56"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 04:52:22 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:55:16 2012 -0500"
      },
      "message": "ceph: propagate umode_t\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "dba19c6064766730dd64757a010ec3aec503ecdb",
      "tree": "2071835ccfcb169b6219be7d5a4692fcfdcbd2c5",
      "parents": [
        "1b9d5ff7644ddf2723c9205f4726c95ec01bf033"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jul 25 20:49:29 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:55:12 2012 -0500"
      },
      "message": "get rid of open-coded S_ISREG(), etc.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1a67aafb5f72a436ca044293309fa7e6351d6a35",
      "tree": "d9e58600148de9d41b478cf815773b746647d15b",
      "parents": [
        "4acdaf27ebe2034c342f3be57ef49aed1ad885ef"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 01:52:52 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:54 2012 -0500"
      },
      "message": "switch -\u003emknod() to umode_t\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4acdaf27ebe2034c342f3be57ef49aed1ad885ef",
      "tree": "d89a876ee19cd88609a587f8aa6c464a52ee6d98",
      "parents": [
        "18bb1db3e7607e4a997d50991a6f9fa5b0f8722c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 01:42:34 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:53 2012 -0500"
      },
      "message": "switch -\u003ecreate() to umode_t\n\nvfs_create() ignores everything outside of 16bit subset of its\nmode argument; switching it to umode_t is obviously equivalent\nand it\u0027s the only caller of the method\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "18bb1db3e7607e4a997d50991a6f9fa5b0f8722c",
      "tree": "4ee4e584bc9a67f3ec14ce159d2d7d4a27e68d4a",
      "parents": [
        "8208a22bb8bd3c52ef634b4ff194f14892ab1713"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jul 26 01:41:39 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:54:53 2012 -0500"
      },
      "message": "switch vfs_mkdir() and -\u003emkdir() to umode_t\n\nvfs_mkdir() gets int, but immediately drops everything that might not\nfit into umode_t and that\u0027s the only caller of -\u003emkdir()...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6b520e0565422966cdf1c3759bd73df77b0f248c",
      "tree": "f63a26afa7342eb59b125271b16e30a219b59094",
      "parents": [
        "2a79f17e4a641a2f463cb512cb0ec349844a147b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Dec 12 15:51:45 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:40 2012 -0500"
      },
      "message": "vfs: fix the stupidity with i_dentry in inode destructors\n\nSeeing that just about every destructor got that INIT_LIST_HEAD() copied into\nit, there is no point whatsoever keeping this INIT_LIST_HEAD in inode_init_once();\nthe cost of taking it into inode_init_always() will be negligible for pipes\nand sockets and negative for everything else.  Not to mention the removal of\nboilerplate code from -\u003edestroy_inode() instances...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a4d46363ce96c8fd7534c6f79051c78b52464132",
      "tree": "8d41ef517efe09f7783204fffe56ec2102d70f90",
      "parents": [
        "9d5a09e659f8414dd3713e2acbfaf8a9e9794aa1"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Dec 29 08:05:14 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Dec 29 08:05:14 2011 -0800"
      },
      "message": "ceph: disable use of dcache for readdir etc.\n\nCeph attempts to use the dcache to satisfy negative lookups and readdir\nwhen the entire directory contents are in cache.  Disable this behavior\nuntil lingering bugs in this code are shaken out; we\u0027ll re-enable these\nhooks once things are fully stable.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "9d5a09e659f8414dd3713e2acbfaf8a9e9794aa1",
      "tree": "abba92c0a15f98cd4386cd86f081d1e2c89045ac",
      "parents": [
        "6a82c47aa84ab22cb5969a44105cca5358879d21"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Tue Dec 13 09:57:44 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Dec 13 11:59:53 2011 -0800"
      },
      "message": "ceph: add missing spin_unlock at ceph_mdsc_build_path()\n\none of the paths was missing spin_unlock\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\n"
    },
    {
      "commit": "6a82c47aa84ab22cb5969a44105cca5358879d21",
      "tree": "60dea7b341119350274ba9c50cacddc2b357fd52",
      "parents": [
        "f1932fc1a6d899c754676b1dd8b17de93b052d43"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Dec 13 09:19:26 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Dec 13 09:19:26 2011 -0800"
      },
      "message": "ceph: fix SEEK_CUR, SEEK_SET regression\n\nCommit 06222e491e663dac939f04b125c9dc52126a75c4 got the if wrong so that\nit always evaluates as true.  This is semantically harmless, but makes\nSEEK_CUR and SEEK_SET needlessly query the server.\n\nRewrite the if to explicitly enumerate the cases we DO need a valid i_size\nto make this code less fragile.\n\nReported-by: Roel Kluin \u003croel.kluin@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "be655596b3de5873f994ddbe205751a5ffb4de39",
      "tree": "cf6e53c6344f87a47ac68d6a6ff4d7dac6e5c25e",
      "parents": [
        "51703306b3b9ea7c05728040998521e47358147b"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Nov 30 09:47:09 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Dec 07 10:46:44 2011 -0800"
      },
      "message": "ceph: use i_ceph_lock instead of i_lock\n\nWe have been using i_lock to protect all kinds of data structures in the\nceph_inode_info struct, including lists of inodes that we need to iterate\nover while avoiding races with inode destruction.  That requires grabbing\na reference to the inode with the list lock protected, but igrab() now\ntakes i_lock to check the inode flags.\n\nChanging the list lock ordering would be a painful process.\n\nHowever, using a ceph-specific i_ceph_lock in the ceph inode instead of\ni_lock is a simple mechanical change and avoids the ordering constraints\nimposed by igrab().\n\nReported-by: Amon Ott \u003ca.ott@m-privacy.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "2151937d7ce491bfbe269a1ae742c6686904474c",
      "tree": "4aa64db4b4decc92cd8ee7c634a6d71546ab69f9",
      "parents": [
        "224736d9113ab4a7cf3f05c05377492bd99b4b02"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Dec 01 08:06:52 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Dec 02 09:27:54 2011 -0800"
      },
      "message": "ceph: fix rasize reporting by ceph_show_options\n\nFix typo.\n\nReported-by: mowang da \u003cwhooya.xxl@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "774ac21da76f5c3018428725074e27a3fd40b128",
      "tree": "3c22879278514494e467e651c918994cd6f359d2",
      "parents": [
        "15a2015fbc692e1c97d7ce12d96e077f5ae7ea6d"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Nov 11 09:48:08 2011 -0800"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Fri Nov 11 09:50:17 2011 -0800"
      },
      "message": "ceph: initialize root dentry\n\nSet up d_fsdata on the root dentry.  This fixes a NULL pointer dereference\nin ceph_d_prune on umount.  It also means we can eventually strip out all\nof the conditional checks on d_fsdata because it is now set unconditionally\n(prior to setting up the d_ops).\n\nFix the ceph_d_prune debug print while we\u0027re here.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "15a2015fbc692e1c97d7ce12d96e077f5ae7ea6d",
      "tree": "f902cc2b7cab475c8b220147bb786dc3a772888e",
      "parents": [
        "0c6d4b4e22a513f8563a2e00c5ab08e9f8796272"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Nov 05 22:06:31 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Nov 05 22:06:31 2011 -0700"
      },
      "message": "ceph: fix iput race when queueing inode work\n\nIf we queue a work item that calls iput(), make sure we ihold() before\nattempting to queue work. Otherwise our queued work might miraculously run\nbefore we notice the queue_work() succeeded and call ihold(), allowing the\ninode to be destroyed.\n\nThat is, instead of\n\n\tif (queue_work(...))\n\t\tihold();\n\nwe need to do\n\n\tihold();\n\tif (!queue_work(...))\n\t\tiput();\n\nReported-by: Amon Ott \u003ca.ott@m-privacy.de\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0c6d4b4e22a513f8563a2e00c5ab08e9f8796272",
      "tree": "7c9401773dad6f6d64fea935b4623bab4e83c046",
      "parents": [
        "7fd7d101ff50af55d6d69f4705facc00c324024e"
      ],
      "author": {
        "name": "H Hartley Sweeten",
        "email": "hartleys@visionengravers.com",
        "time": "Fri Sep 23 11:53:30 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Nov 05 21:10:12 2011 -0700"
      },
      "message": "ceph/super.c: quiet sparse noise\n\nQuiet the sparse noise:\n\nwarning: symbol \u0027create_fs_client\u0027 was not declared. Should it be static?\nwarning: symbol \u0027destroy_fs_client\u0027 was not declared. Should it be static?\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nCc: Sage Weil \u003csage@newdream.net\u003e\nceph-devel@vger.kernel.org\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "7fd7d101ff50af55d6d69f4705facc00c324024e",
      "tree": "5314049cb1fc3e27d9962962bcea0194ce971b39",
      "parents": [
        "c6ffe10015f4e6fba8a915318b319c43aed1836f"
      ],
      "author": {
        "name": "H Hartley Sweeten",
        "email": "hartleys@visionengravers.com",
        "time": "Fri Sep 23 13:22:11 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Nov 05 21:10:11 2011 -0700"
      },
      "message": "ceph/mds_client.c: quiet sparse noise\n\nQuiet the following sparse noise:\n\nwarning: symbol \u0027get_nonsnap_parent\u0027 was not declared. Should it be static?\nwarning: symbol \u0027done_closing_sessions\u0027 was not declared. Should it be static?\n\nLocal functions don\u0027t need external visability. Make them static.\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nCc: Sage Weil \u003csage@newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "c6ffe10015f4e6fba8a915318b319c43aed1836f",
      "tree": "dd39730aeb6d00713ca27a1bf34b116d31479151",
      "parents": [
        "b58dc4100b9190f2cb437f1f67ffcb9f9acc4923"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Nov 03 09:23:36 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Sat Nov 05 21:10:10 2011 -0700"
      },
      "message": "ceph: use new D_COMPLETE dentry flag\n\nWe used to use a flag on the directory inode to track whether the dcache\ncontents for a directory were a complete cached copy.  Switch to a dentry\nflag CEPH_D_COMPLETE that is safely updated by -\u003ed_prune().\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "b58dc4100b9190f2cb437f1f67ffcb9f9acc4923",
      "tree": "5956065af3d9b126b8ae4a37551837c389f12702",
      "parents": [
        "3f8ddb032afa729d4bad1bf2965d3ec068de6b72"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Mar 15 15:53:40 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Nov 03 09:23:49 2011 -0700"
      },
      "message": "ceph: clear parent D_COMPLETE flag when on dentry prune\n\nWhen the VFS prunes a dentry from the cache, clear the D_COMPLETE flag\non the parent dentry.  Do this for the live and snapshotted namespaces. Do\nnot bother for the .snap dir contents, since we do not cache that.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "bfe8684869601dacfcb2cd69ef8cfd9045f62170",
      "tree": "4e213aaa766b26f43f0f9ec7998a7745239d9377",
      "parents": [
        "6d6b77f163c7eabedbba00ed2abb7d4a570bff76"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Fri Oct 28 14:13:29 2011 +0200"
      },
      "committer": {
        "name": "Christoph Hellwig",
        "email": "hch@serles.lst.de",
        "time": "Wed Nov 02 12:53:43 2011 +0100"
      },
      "message": "filesystems: add set_nlink()\n\nReplace remaining direct i_nlink updates with a new set_nlink()\nupdater function.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nTested-by: Toshiyuki Okajima \u003ctoshi.okajima@jp.fujitsu.com\u003e\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "339573406737461cfb17bebabf7ba536a302d841",
      "tree": "9879390219993f759338b8bbfbf92a4ebb836cd8",
      "parents": [
        "3310f7541f0c991b51324a7712db51fb8f912601"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Oct 24 09:05:47 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:17 2011 -0700"
      },
      "message": "libceph: fix double-free of page vector\n\nceph_release_page_vector() kfrees the vector; we shouldn\u0027t do it here too.\n\nReported-by: Jeff Wu \u003ccpwu@tnsoft.com.cn\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "3310f7541f0c991b51324a7712db51fb8f912601",
      "tree": "d9a003be8ae51c41facdb80125e853b7f143e5e6",
      "parents": [
        "38d6453ca39ecce442628a93e1bb46d70d547512"
      ],
      "author": {
        "name": "Amon Ott",
        "email": "a.ott@m-privacy.de",
        "time": "Thu Oct 20 13:04:07 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:17 2011 -0700"
      },
      "message": "ceph: fix 32-bit ino numbers\n\nFix 32-bit ino generation to not always be 1.\n\nSigned-off-by: Amon Ott \u003ca.ott@m-privacy.de\u003e\n"
    },
    {
      "commit": "a35eca958aa1c7d0b5f993db1a3ded45ae16d59b",
      "tree": "4d496b38cdd39d3363aaf23888f1932422ce5682",
      "parents": [
        "83eaea22bdfc9e1cec88f81be5b64f30f6c37e8b"
      ],
      "author": {
        "name": "Greg Farnum",
        "email": "gregory.farnum@dreamhost.com",
        "time": "Thu Aug 25 12:43:06 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:16 2011 -0700"
      },
      "message": "ceph: let the set_layout ioctl set single traits\n\nPreviously we were validating the passed-in stripe unit, object size,\nand stripe count against each other (and not testing most other stuff).\nInstead, make sure that the composed previous layout and new values are valid,\nand only send the new values to the MDS. This lets users change the\npool without setting the whole layout, for instance.\n\nSigned-off-by: Greg Farnum \u003cgregory.farnum@dreamhost.com\u003e\n"
    },
    {
      "commit": "83eaea22bdfc9e1cec88f81be5b64f30f6c37e8b",
      "tree": "f63f415ce4241c12639ef78f4920ed6b99915760",
      "parents": [
        "80db8bea6a0f4fd047eafd8329a44d5a110f462b"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Aug 24 14:07:01 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:16 2011 -0700"
      },
      "message": "Revert \"ceph: don\u0027t truncate dirty pages in invalidate work thread\"\n\nThis reverts commit c9af9fb68e01eb2c2165e1bc45cfeeed510c64e6.\n\nWe need to block and truncate all pages in order to reliably invalidate\nthem.  Otherwise, we could:\n\n - have some uptodate pages in the cache\n - queue an invalidate\n - write(2) locks some pages\n - invalidate_work skips them\n - write(2) only overwrites part of the page\n - page now dirty and uptodate\n -\u003e partial leakage of invalidated data\n\nIt\u0027s not entirely clear why we started skipping locked pages in the first\nplace.  I just ran this through fsx and didn\u0027t see any problems.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "80db8bea6a0f4fd047eafd8329a44d5a110f462b",
      "tree": "17a119ced3e2a40972195cb67e1f48ea56076a6e",
      "parents": [
        "f0ed1b7cef1e801ef470efc501f9c663fe10cebd"
      ],
      "author": {
        "name": "Noah Watkins",
        "email": "noahwatkins@gmail.com",
        "time": "Mon Aug 22 13:49:23 2011 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:16 2011 -0700"
      },
      "message": "ceph: replace leading spaces with tabs\n\nTrivial formatting fix.\n\nSigned-off-by: Noah Watkins \u003cnoahwatkins@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "b61c27636fffbaf1980e675282777b9467254a40",
      "tree": "bd78cfefda4beb7e3de5fe97dd36fed3dbfa91c1",
      "parents": [
        "f6a2f5be07463ef532b9f4e3cb9e42ab9df85832"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 15:03:46 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "libceph: don\u0027t complain on msgpool alloc failures\n\nThe pool allocation failures are masked by the pool; there is no need to\nspam the console about them.  (That\u0027s the whole point of having the pool\nin the first place.)\n\nMark msg allocations whose failure is safely handled as such.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6ab00d465a1c8c02c2216f8220727282f3aa50b5",
      "tree": "b4cc08e1be5ffe0a60d9090d86f7f0d05b1f6e36",
      "parents": [
        "6a8ea4706adb4b4d8f77a8da5f9778b65fbf6f48"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Aug 09 09:41:59 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "libceph: create messenger with client\n\nThis simplifies the init/shutdown paths, and makes client-\u003emsgr available\nduring the rest of the setup process.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "6a8ea4706adb4b4d8f77a8da5f9778b65fbf6f48",
      "tree": "263456e621ba9130f0f9bfec96f48cd597a75f88",
      "parents": [
        "0d66a487c120012f33fbcd6af5cbf0a0cad71557"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Aug 04 15:41:37 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "ceph: document ioctls\n\n...after some prodding by Christoph.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0d66a487c120012f33fbcd6af5cbf0a0cad71557",
      "tree": "be876b3a9a76e59e08165a661166be8507c25d9a",
      "parents": [
        "83817e35cbd9b36db955a22418c9e30324353587"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Aug 04 08:21:30 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "ceph: implement (optional) max read size\n\nThe \u0027rsize\u0027 mount option limits the maximum size of an individual\nread(ahead) operation that is sent off to an OSD.  This is distinct from\n\u0027rasize\u0027, which controls the size of the readahead window.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "83817e35cbd9b36db955a22418c9e30324353587",
      "tree": "bd2e52d560e74061310e27ef4028a4f2c75c9801",
      "parents": [
        "7c272194e66e91830b90f6202e61c69f8590f1eb"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Thu Aug 04 08:03:44 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:15 2011 -0700"
      },
      "message": "ceph: rename rsize -\u003e rasize\n\nIt controls readahead.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "7c272194e66e91830b90f6202e61c69f8590f1eb",
      "tree": "9a899f357cbf005235fd80ab3b4a240e42498b54",
      "parents": [
        "c3b92c8787367a8bb53d57d9789b558f1295cc96"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Aug 03 09:58:09 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Oct 25 16:10:14 2011 -0700"
      },
      "message": "ceph: make readpages fully async\n\nWhen we get a -\u003ereadpages() aop, submit async reads for all page ranges\nin the provided page list.  Lock the pages immediately, so that VFS/MM\nwill block until the reads complete.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0d20fbbe82dadc43f50a4ca5346e962de23cf950",
      "tree": "b3d63936aff013d6baa57c2cd9aaa3bade22d91c",
      "parents": [
        "0ec26fd0698285b31248e34bf1abb022c00f23d6",
        "aca420bc51f48b0701963ba3a6234442a0cabebd"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 09 15:48:34 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 09 15:48:34 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://ceph.newdream.net/git/ceph-client\n\n* \u0027for-linus\u0027 of git://ceph.newdream.net/git/ceph-client:\n  libceph: fix leak of osd structs during shutdown\n  ceph: fix memory leak\n  ceph: fix encoding of ino only (not relative) paths\n  libceph: fix msgpool\n"
    },
    {
      "commit": "259a187ade45056fd44856654f78aa9e9f0f7c75",
      "tree": "9e402d904c854dc561526b80ad0f8977f42c5fbd",
      "parents": [
        "795858dbd253462a67e14272edeaae73c6074b17"
      ],
      "author": {
        "name": "Noah Watkins",
        "email": "noahwatkins@gmail.com",
        "time": "Mon Aug 22 13:49:41 2011 -0600"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Aug 22 13:06:59 2011 -0700"
      },
      "message": "ceph: fix memory leak\n\nkfree does not clean up indirect allocations in\nceph_fs_client and ceph_options (e.g. snapdir_name).\n\nSigned-off-by: Noah Watkins \u003cnoahwatkins@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "795858dbd253462a67e14272edeaae73c6074b17",
      "tree": "a9fb8a08682e6387d7d6c745633a6b7e2aec2679",
      "parents": [
        "5185352c163a72cf969b2fbbfb89801b398896fd"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Aug 15 13:02:37 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Aug 15 13:03:56 2011 -0700"
      },
      "message": "ceph: fix encoding of ino only (not relative) paths\n\nA \u0027path\u0027 consists of a starting ino and relative component.  Encode even\nwhen there is no relative component.  This is primarily needed by the\nNFS reexport code.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "ba5b56cb3e3d2cab73d4fee9a022bb69462a8cd9",
      "tree": "eda7ea059a41ae5d68e2ad5a36a87069187ef22a",
      "parents": [
        "243dd2809a5edd2e0e3e62781083aa44049af37d",
        "d79698da32b317e96216236f265a9b72b78ae568"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 13:38:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 13:38:50 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (23 commits)\n  ceph: document unlocked d_parent accesses\n  ceph: explicitly reference rename old_dentry parent dir in request\n  ceph: document locking for ceph_set_dentry_offset\n  ceph: avoid d_parent in ceph_dentry_hash; fix ceph_encode_fh() hashing bug\n  ceph: protect d_parent access in ceph_d_revalidate\n  ceph: protect access to d_parent\n  ceph: handle racing calls to ceph_init_dentry\n  ceph: set dir complete frag after adding capability\n  rbd: set blk_queue request sizes to object size\n  ceph: set up readahead size when rsize is not passed\n  rbd: cancel watch request when releasing the device\n  ceph: ignore lease mask\n  ceph: fix ceph_lookup_open intent usage\n  ceph: only link open operations to directory unsafe list if O_CREAT|O_TRUNC\n  ceph: fix bad parent_inode calc in ceph_lookup_open\n  ceph: avoid carrying Fw cap during write into page cache\n  libceph: don\u0027t time out osd requests that haven\u0027t been received\n  ceph: report f_bfree based on kb_avail rather than diffing.\n  ceph: only queue capsnap if caps are dirty\n  ceph: fix snap writeback when racing with writes\n  ...\n"
    },
    {
      "commit": "d79698da32b317e96216236f265a9b72b78ae568",
      "tree": "97f98e83c699794d6a5d979688587fbfdbba2ba7",
      "parents": [
        "41b02e1f9bb87b07d792b64aaeb7af3d00d69cd2"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:31:26 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:31:26 2011 -0700"
      },
      "message": "ceph: document unlocked d_parent accesses\n\nFor the most part we don\u0027t care about racing with rename when directing\nMDS requests; either the old or new parent is fine.  Document that, and\ndo some minor cleanup.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "41b02e1f9bb87b07d792b64aaeb7af3d00d69cd2",
      "tree": "87c9524ff96cbff2ff29d659cbefd516b553ca1f",
      "parents": [
        "4f1772645296a230e04f5c53e79cfb6f841ce634"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:31:14 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:31:14 2011 -0700"
      },
      "message": "ceph: explicitly reference rename old_dentry parent dir in request\n\nWe carry a pin on the parent directory for the rename source and dest\ndentries.  For the source it\u0027s r_locked_dir; we need to explicitly\nreference the old_dentry parent as well, since the dentry\u0027s d_parent may\nchange between when the request was created and pinned and when it is\nfreed.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "4f1772645296a230e04f5c53e79cfb6f841ce634",
      "tree": "b46dab3e88acef56a074c5d519a851dec5c1ade1",
      "parents": [
        "e5f86dc377e7ff2b4195831153a85a3e76fefff2"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:31:08 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:31:08 2011 -0700"
      },
      "message": "ceph: document locking for ceph_set_dentry_offset\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e5f86dc377e7ff2b4195831153a85a3e76fefff2",
      "tree": "f15c11fc2c9b08e64555bbb601e582dc8f7325bd",
      "parents": [
        "bf1c6aca96c9d2f117dc7e590c2bc2304e7febe1"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:30:55 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:30:55 2011 -0700"
      },
      "message": "ceph: avoid d_parent in ceph_dentry_hash; fix ceph_encode_fh() hashing bug\n\nHave caller pass in a safely-obtained reference to the parent directory\nfor calculating a dentry\u0027s hash valud.\n\nWhile we\u0027re here, simpify the flow through ceph_encode_fh() so that there\nis a single exit point and cleanup.\n\nAlso fix a bug with the dentry hash calculation: calculate the hash for the\ndentry we were given, not its parent.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "bf1c6aca96c9d2f117dc7e590c2bc2304e7febe1",
      "tree": "1ecb6f35e572ba1e498390d1b09faf3c309bbaee",
      "parents": [
        "5f21c96dd5c615341963036ae8f5e4f5227a818d"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:30:43 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:30:43 2011 -0700"
      },
      "message": "ceph: protect d_parent access in ceph_d_revalidate\n\nProtect d_parent with d_lock.  Carry a reference.  Simplify the flow so\nthat there is a single exit point and cleanup.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "5f21c96dd5c615341963036ae8f5e4f5227a818d",
      "tree": "898c5781623b68527427d201e3f975827d08935c",
      "parents": [
        "48d0cbd1242aac969560ef8b90f26ee3b09a6a5c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:30:29 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:30:29 2011 -0700"
      },
      "message": "ceph: protect access to d_parent\n\nd_parent is protected by d_lock: use it when looking up a dentry\u0027s parent\ndirectory inode.  Also take a reference and drop it in the caller to avoid\na use-after-free.\n\nReported-by: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "48d0cbd1242aac969560ef8b90f26ee3b09a6a5c",
      "tree": "228a26f8ee7d555d67c6a00e5346f3b558a2e48c",
      "parents": [
        "dfabbed6fdd509dc2beb89c954bc36014a1bc7cb"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:30:15 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:30:15 2011 -0700"
      },
      "message": "ceph: handle racing calls to ceph_init_dentry\n\nThe -\u003elookup() and prepopulate_readdir() callers are working with unhashed\ndentries, so we don\u0027t have to worry.  The export.c callers, though, need\nto initialize something they got back from d_obtain_alias() and are\npotentially racing with other callers.  Make sure we don\u0027t return unless\nthe dentry is properly initialized (by us or someone else).\n\nReported-by: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "dfabbed6fdd509dc2beb89c954bc36014a1bc7cb",
      "tree": "34186b6bba311438cccbd572f4f93d8165dce89b",
      "parents": [
        "029bcbd8b076fd19787b8c73e58dd0a6f2c0caf1"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:30:02 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:30:02 2011 -0700"
      },
      "message": "ceph: set dir complete frag after adding capability\n\nCurretly ceph_add_cap clears the complete bit if we are newly issued the\nFILE_SHARED cap, which is normally the case for a newly issue cap on a new\ndirectory.  That means we clear the just-set bit.  Move the check that sets\nthe flag to after the cap is added/updated.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "e9852227431a0ed6ceda064f33e4218757acab6c",
      "tree": "e48c6a6ffb96780d562943dfc45c78a0a7edc0cd",
      "parents": [
        "79e3057c4c9d32b88e6745fd220d91b0a8b2030b"
      ],
      "author": {
        "name": "Yehuda Sadeh",
        "email": "yehuda@hq.newdream.net",
        "time": "Fri Jul 22 11:12:28 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:29:14 2011 -0700"
      },
      "message": "ceph: set up readahead size when rsize is not passed\n\nThis should improve the default read performance, as without it\nreadahead is practically disabled.\n\nSigned-off-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\n"
    },
    {
      "commit": "2f90b852e3ae73889d7f6de6ecf429b9b6a6b103",
      "tree": "584e53ef3a6919e68ee0d8804da8f3d63838a3fc",
      "parents": [
        "468640e32c7f6bfdaaa011095cc388786755d159"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:28:25 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:28:25 2011 -0700"
      },
      "message": "ceph: ignore lease mask\n\nThe lease mask is no longer used (and it changed a while back).  Instead,\nuse a non-zero duration to indicate that there is a lease being issued.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "468640e32c7f6bfdaaa011095cc388786755d159",
      "tree": "beb059d860c2ca39cda9ca3aa45603025655e1a6",
      "parents": [
        "9bae113a085b790de384bf86f09e15b42a65a985"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:28:11 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:28:11 2011 -0700"
      },
      "message": "ceph: fix ceph_lookup_open intent usage\n\nWe weren\u0027t properly calling lookup_instantiate_filp when setting up the\nlookup intent, which could lead to file leakage on errors.  So:\n\n - use separate helper for the hidden snapdir translation, immediately\n   following the mds request\n - use ceph_finish_lookup for the final dentry/return value dance in the\n   exit path\n - lookup_instantiate_filp on success\n\nReported-by: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "9bae113a085b790de384bf86f09e15b42a65a985",
      "tree": "44d42141bf2d61a3098cedb381ec775cded8ac89",
      "parents": [
        "acda76578813ef893004ecad0e5ad2bb6039e5f7"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:59 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:59 2011 -0700"
      },
      "message": "ceph: only link open operations to directory unsafe list if O_CREAT|O_TRUNC\n\nWe only need to put these on the directory unsafe list if they have\nside effects that fsync(2) should flush out.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "acda76578813ef893004ecad0e5ad2bb6039e5f7",
      "tree": "d77d818eb8e783437e25d7590dd9864001a7e1b3",
      "parents": [
        "d8de9ab63a57326d21154c13c365f949f53ce8e1"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:48 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:48 2011 -0700"
      },
      "message": "ceph: fix bad parent_inode calc in ceph_lookup_open\n\nWe were always getting NULL here because the intent file f_dentry is always\nNULL at this point, which means we were always passing NULL to\nceph_mdsc_do_request.  In reality, this was fine, since this isn\u0027t\ncurrently ever a write operation that needs to get strung on the dir\u0027s\nunsafe list.\n\nUse the dir explicitly, and only pass it if this open has side-effects that\na dir fsync should flush.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "d8de9ab63a57326d21154c13c365f949f53ce8e1",
      "tree": "283aac6bf2cc91a772d9cc04c97f46f60267e4c5",
      "parents": [
        "4cf9d544631c92809cb94ea680c71df56e9437aa"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:34 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:34 2011 -0700"
      },
      "message": "ceph: avoid carrying Fw cap during write into page cache\n\nThe generic_file_aio_write call may block on balance_dirty_pages while we\nflush data to the OSDs.  If we hold a reference to the FILE_WR cap during\nthat interval revocation by the MDS (e.g., to do a stat(2)) may be very\nslow.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "8f04d42276048b3baff5a5d8fa769f433c62b63e",
      "tree": "dd9cdb99079d193ceab74f9b2f4b11d4b2fb7508",
      "parents": [
        "e77dc3e9c061e50c67e2e1a604d0a370f40db298"
      ],
      "author": {
        "name": "Greg Farnum",
        "email": "gregory.farnum@dreamhost.com",
        "time": "Tue Jul 26 11:26:54 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:27:06 2011 -0700"
      },
      "message": "ceph: report f_bfree based on kb_avail rather than diffing.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Greg Farnum \u003cgregory.farnum@dreamhost.com\u003e\n"
    },
    {
      "commit": "e77dc3e9c061e50c67e2e1a604d0a370f40db298",
      "tree": "8ed497994e3e1b9949c3d6907ed901ff502b1f5e",
      "parents": [
        "af0ed569d7019f1b49e9e51e77b47092e656b00e"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:26:41 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:26:41 2011 -0700"
      },
      "message": "ceph: only queue capsnap if caps are dirty\n\nWe used to go into this branch if i_wrbuffer_ref_head was non-zero.  This\nwas an ancient check from before we were careful about dealing with all\nkinds of caps (and not just dirty pages).  It is cleaner to only queue a\ncapsnap if there is an actual dirty cap.  If we are racing with...\nsomething...we will end up here with ci-\u003ei_wrbuffer_refs but no dirty\ncaps.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "af0ed569d7019f1b49e9e51e77b47092e656b00e",
      "tree": "a8b0ad426b22548eec9e2d350c131426e13af989",
      "parents": [
        "9cfa1098dcfb34f71c5f3b7bcdbbb435a0cecab2"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:26:31 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:26:31 2011 -0700"
      },
      "message": "ceph: fix snap writeback when racing with writes\n\nThere are two problems that come up when we try to queue a capsnap while a\nwrite is in progress:\n\n - The FILE_WR cap is held, but not yet dirty, so we may queue a capsnap\n   with dirty \u003d\u003d 0.  That will crash later in __ceph_flush_snaps().  Or\n   on the FILE_WR cap if a write is in progress.\n - We may not have i_head_snapc set, which causes problems pretty quickly.\n   Look to the snaprealm in this case.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "9cfa1098dcfb34f71c5f3b7bcdbbb435a0cecab2",
      "tree": "cecff467984dd0d5e8fef2014e296b682c7a0267",
      "parents": [
        "4918b6d140c4822201ebbe2f070875332aff337b"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:26:18 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:26:18 2011 -0700"
      },
      "message": "ceph: use flag bit for at_end readdir flag\n\nThis saves us a word of memory per file.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "4918b6d140c4822201ebbe2f070875332aff337b",
      "tree": "0327a0a68acd2f8209893b4770ba3c9d9264041c",
      "parents": [
        "252c6728de604d6a897d85e212996811d5c8c46c"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:26:07 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:26:07 2011 -0700"
      },
      "message": "ceph: add F_SYNC file flag to force sync (non-O_DIRECT) io\n\nThis allows us to force IO through the sync path which you normally only\nget when multiple clients are reading/writing to the same file or by\nmounting with -o sync.  Among other things, this lets test programs verify\ncorrectness with a single mount.\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "252c6728de604d6a897d85e212996811d5c8c46c",
      "tree": "2b93fa141ca38789e00610dfa641dc7fefc3be72",
      "parents": [
        "02f8c6aee8df3cdc935e9bdd4f2d020306035dbe"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:25:27 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jul 26 11:25:27 2011 -0700"
      },
      "message": "ceph: add flags field to file_info\n\nReviewed-by: Yehuda Sadeh \u003cyehuda@hq.newdream.net\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "02c24a82187d5a628c68edfe71ae60dc135cd178",
      "tree": "c8dbaba4d82e2b20ed4335910a564a1f7d90fcf6",
      "parents": [
        "22735068d53c7115e384bc88dea95b17e76a6839"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Sat Jul 16 20:44:56 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:59 2011 -0400"
      },
      "message": "fs: push i_mutex and filemap_write_and_wait down into -\u003efsync() handlers\n\nBtrfs needs to be able to control how filemap_write_and_wait_range() is called\nin fsync to make it less of a painful operation, so push down taking i_mutex and\nthe calling of filemap_write_and_wait() down into the -\u003efsync() handlers.  Some\nfile systems can drop taking the i_mutex altogether it seems, like ext3 and\nocfs2.  For correctness sake I just pushed everything down in all cases to make\nsure that we keep the current behavior the same for everybody, and then each\nindividual fs maintainer can make up their mind about what to do from there.\nThanks,\n\nAcked-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "06222e491e663dac939f04b125c9dc52126a75c4",
      "tree": "99636fd666c8148a5bf58ea4844263d4b3a36310",
      "parents": [
        "c334b1138bd44bea578eab7971c59bd9212a1093"
      ],
      "author": {
        "name": "Josef Bacik",
        "email": "josef@redhat.com",
        "time": "Mon Jul 18 13:21:38 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:58 2011 -0400"
      },
      "message": "fs: handle SEEK_HOLE/SEEK_DATA properly in all fs\u0027s that define their own llseek\n\nThis converts everybody to handle SEEK_HOLE/SEEK_DATA properly.  In some cases\nwe just return -EINVAL, in others we do the normal generic thing, and in others\nwe\u0027re simply making sure that the properly due-dilligence is done.  For example\nin NFS/CIFS we need to make sure the file size is update properly for the\nSEEK_HOLE and SEEK_DATA case, but since it calls the generic llseek stuff itself\nthat is all we have to do.  Thanks,\n\nSigned-off-by: Josef Bacik \u003cjosef@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b85fd6bdc99da917f5ae0f90f0c2d86ef9a766aa",
      "tree": "234aae960810ead4ad2811a31b0898afce7b46e1",
      "parents": [
        "2def9e4ec75e6771def66a07960dd516e119ab4c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jul 17 11:19:44 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:54 2011 -0400"
      },
      "message": "don\u0027t open-code parent_ino() in assorted -\u003ereaddir()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a127e0af59ab610e8b37ac2dfa4cdb2ec8c8f604",
      "tree": "9184b632a82441d8f4d8c19514dfad15072d1718",
      "parents": [
        "5c0f360b083fb33d05d1bff4b138b82d715eb419"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jun 25 21:43:56 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:59 2011 -0400"
      },
      "message": "ceph: LOOKUP_OPEN is set only when it\u0027s the last component\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8a5e929dd2e05ab4d3d89f58c5e8fca596af8f3a",
      "tree": "8cbed05fcd99d24e881e5ea12d8a954865e31085",
      "parents": [
        "554a8b9f54cd7ca2b89f5dc227df08be082fae0d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jun 25 19:15:54 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:52 2011 -0400"
      },
      "message": "don\u0027t transliterate lower bits of -\u003eintent.open.flags to FMODE_...\n\n-\u003ecreate() instances are much happier that way...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "10556cb21a0d0b24d95f00ea6df16f599a3345b2",
      "tree": "3d7d8dfba807805a55c154f1850717bf3b49f343",
      "parents": [
        "2830ba7f34ebb27c4e5b8b6ef408cd6d74860890"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:28:19 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:24 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: don\u0027t pass flags to -\u003epermission()\n\nnot used by the instances anymore.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "2830ba7f34ebb27c4e5b8b6ef408cd6d74860890",
      "tree": "bbcebc14bffd000f1dfcbf37e64f56d2f49581ac",
      "parents": [
        "7e40145eb111a5192e6d819f764db9d6828d1abb"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 19:16:29 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:22 2011 -0400"
      },
      "message": "-\u003epermission() sanitizing: don\u0027t pass flags to generic_permission()\n\nredundant; all callers get it duplicated in mask \u0026 MAY_NOT_BLOCK and none of\nthem removes that bit.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "178ea73521d64ba41d7aa5488fb9f549c6d4507d",
      "tree": "7fb6bfb6483577752e307a5bb2e3905658d44294",
      "parents": [
        "07b8ce1ee87d291ff564c02cf878fae973317a52"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 20 11:31:30 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 01:43:16 2011 -0400"
      },
      "message": "kill check_acl callback of generic_permission()\n\nits value depends only on inode and does not change; we might as\nwell store it in -\u003ei_op-\u003echeck_acl and be done with that.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1b71fe2efa31cd18c865db474a4cd473b6ab5281",
      "tree": "ca2409c9ed9311a5ddc998f7428d71273e94f2e5",
      "parents": [
        "dc137bf553dbb6855bd7efc34fedcd03102455f7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jul 16 23:43:58 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jul 16 23:43:58 2011 -0400"
      },
      "message": "ceph analog of cifs build_path_from_dentry() race fix\n\n... unfortunately, cifs bug got copied.  Fix is essentially the same.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d7f124f129a6aea99938e0d4172c741b56fefeda",
      "tree": "25ee1b2b91de6e490ddd05b00d6a3f844a224987",
      "parents": [
        "9bb0ce2b0b734f3325ea5cd6b351856eeac94f78"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Jun 13 16:22:18 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Jun 13 16:26:22 2011 -0700"
      },
      "message": "ceph: fix sync and dio writes across stripe boundaries\n\nWe were iterating across stripe boundaries properly, but not moving the\nwrite buffer pointer forward.  This caused us to rewrite the same data\nafter the break.  Fix by adjusting the data pointer forward, and\nrecalculating the io and buffer alignment after the break.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "773e9b442693b250aa6c452cb0cf5a9343f51cef",
      "tree": "dbd2d9eacab7272c8ec8ba19a32ea92c559141bf",
      "parents": [
        "0c1f91f27140cf3b6e38dc4e892adac241c73a20"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jun 07 20:57:14 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Mon Jun 13 16:26:10 2011 -0700"
      },
      "message": "ceph: fix page alignment corrections\n\n dd if\u003d/dev/urandom of\u003d/mnt/fs_depot/dd10 bs\u003d500 seek\u003d8388 count\u003d1\n dd if\u003d/mnt/fs_depot/dd10 of\u003d/root/dd10out bs\u003d500 skip\u003d8388 count\u003d1\n\nReported-by: Henry C Chang \u003chenry.cy.chang@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0c1f91f27140cf3b6e38dc4e892adac241c73a20",
      "tree": "5058e4c66a16e2c1d808ce66317ef2c9fdb21590",
      "parents": [
        "0e98728fa32d338907631349a8cc2afa07c0cb9a"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed May 25 14:56:12 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jun 07 21:36:45 2011 -0700"
      },
      "message": "ceph: unwind canceled flock state\n\nIf we request a lock and then abort (e.g., ^C), we need to send a matching\nunlock request to the MDS to unwind our lock attempt to avoid indefinitely\nblocking other clients.\n\nReported-by: Brian Chrisman \u003cbrchrisman@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "0e98728fa32d338907631349a8cc2afa07c0cb9a",
      "tree": "589aaa9b8b973194a7185ff92d7a8a6fe9051edb",
      "parents": [
        "c3cd62839aaa2cdb2b99687c9e44f1b300a4aece"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jun 07 20:40:35 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jun 07 21:34:16 2011 -0700"
      },
      "message": "ceph: fix ENOENT logic in striped_read\n\nGetting ENOENT is equivalent to reading 0 bytes.  Make that correction\nbefore setting up the hit_stripe and was_short flags.\n\nFixes the following case:\n dd if\u003d/dev/zero of\u003d/mnt/fs_depot/dd3 bs\u003d1 seek\u003d1048576 count\u003d0\n dd if\u003d/mnt/fs_depot/dd3 of\u003d/root/ddout1 skip\u003d8 bs\u003d500 count\u003d2 iflag\u003ddirect\n\nReported-by: Henry C Chang \u003chenry.cy.chang@gmail.com\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "commit": "c3cd62839aaa2cdb2b99687c9e44f1b300a4aece",
      "tree": "fc7823426f29f44911c93394fb8a3e43d0c91846",
      "parents": [
        "2584547230ae49b8de91ab3bb5e0a81898905b45"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Wed Jun 01 16:08:44 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue Jun 07 21:34:14 2011 -0700"
      },
      "message": "ceph: fix short sync reads from the OSD\n\nIf we get a short read from the OSD because the object is small, we need to\nzero the remainder of the buffer.  For O_DIRECT reads, the attempted range\nis not trimmed to i_size by the VFS, so we were actually looping\nindefinitely.\n\nFix by trimming by i_size, and the unconditionally zeroing the trailing\nrange.\n\nReported-by: Jeff Wu \u003ccpwu@tnsoft.com.cn\u003e\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    },
    {
      "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": "db3540522e955c1ebb391f4f5324dff4f20ecd09",
      "tree": "8c25b07caa8614345c71f09e8872e60b68af4c31",
      "parents": [
        "cd634fb6eec72ef8e6dd677546b8d0ffdd2501eb"
      ],
      "author": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 11:46:31 2011 -0700"
      },
      "committer": {
        "name": "Sage Weil",
        "email": "sage@newdream.net",
        "time": "Tue May 24 11:52:12 2011 -0700"
      },
      "message": "ceph: fix cap flush race reentrancy\n\nIn e9964c10 we change cap flushing to do a delicate dance because some\ninodes on the cap_dirty list could be in a migrating state (got EXPORT but\nnot IMPORT) in which we couldn\u0027t actually flush and move from\ndirty-\u003eflushing, breaking the while (!empty) { process first } loop\nstructure.  It worked for a single sync thread, but was not reentrant and\ntriggered infinite loops when multiple syncers came along.\n\nInstead, move inodes with dirty to a separate cap_dirty_migrating list\nwhen in the limbo export-but-no-import state, allowing us to go back to\nthe simple loop structure (which was reentrant).  This is cleaner and more\nrobust.\n\nAudited the cap_dirty users and this looks fine:\nlist_empty(\u0026ci-\u003ei_dirty_item) is still a reliable indicator of whether we\nhave dirty caps (which list we\u0027re on is irrelevant) and list_del_init()\ncalls still do the right thing.\n\nSigned-off-by: Sage Weil \u003csage@newdream.net\u003e\n"
    }
  ],
  "next": "45e3d3eeb6578e523e100622266945ecd71723bb"
}
