)]}'
{
  "log": [
    {
      "commit": "c9b8af00ff71f86ff3d092cc60ca673e1d0eae5b",
      "tree": "25cc016481cc693552bebb4040041817280c2ccf",
      "parents": [
        "c59a264c9e932c828d533497e286b89e43c8d1be",
        "82681a318f9f028ea64e61f24bbd9ac535531921"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:50:42 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:50:42 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (154 commits)\n  [SCSI] osd: Remove out-of-tree left overs\n  [SCSI] libosd: Use REQ_QUIET requests.\n  [SCSI] osduld: use filp_open() when looking up an osd-device\n  [SCSI] libosd: Define an osd_dev wrapper to retrieve the request_queue\n  [SCSI] libosd: osd_req_{read,write} takes a length parameter\n  [SCSI] libosd: Let _osd_req_finalize_data_integrity receive number of out_bytes\n  [SCSI] libosd: osd_req_{read,write}_kern new API\n  [SCSI] libosd: Better printout of OSD target system information\n  [SCSI] libosd: OSD2r05: Attribute definitions\n  [SCSI] libosd: OSD2r05: Additional command enums\n  [SCSI] mpt fusion: fix up doc book comments\n  [SCSI] mpt fusion: Added support for Broadcast primitives Event handling\n  [SCSI] mpt fusion: Queue full event handling\n  [SCSI] mpt fusion: RAID device handling and Dual port Raid support is added\n  [SCSI] mpt fusion: Put IOC into ready state if it not already in ready state\n  [SCSI] mpt fusion: Code Cleanup patch\n  [SCSI] mpt fusion: Rescan SAS topology added\n  [SCSI] mpt fusion: SAS topology scan changes, expander events\n  [SCSI] mpt fusion: Firmware event implementation using seperate WorkQueue\n  [SCSI] mpt fusion: rewrite of ioctl_cmds internal generated function\n  ...\n"
    },
    {
      "commit": "c59a264c9e932c828d533497e286b89e43c8d1be",
      "tree": "ccbc50e44e5b6142bd17519829f12d8e7cf57cc6",
      "parents": [
        "6cb8a911745616eee0bdd97a2e82eb9723e9599a",
        "6e03a201bbe8137487f340d26aa662110e324b20"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:44:30 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:44:30 2009 -0700"
      },
      "message": "Merge git://git.infradead.org/~dwmw2/firmware-2.6\n\n* git://git.infradead.org/~dwmw2/firmware-2.6:\n  firmware: speed up request_firmware(), v3\n"
    },
    {
      "commit": "6cb8a911745616eee0bdd97a2e82eb9723e9599a",
      "tree": "f5a95d10443653009ee0db290657b938c5215695",
      "parents": [
        "7f3591cfacf2d79c4f42238e46c7d053da8e020d",
        "3ea400581f2b595afd91207bbd79c11cb38598e0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:43:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:43:44 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw:\n  GFS2: Remove lock_kernel from gfs2_put_super()\n  GFS2: Add tracepoints\n"
    },
    {
      "commit": "7f3591cfacf2d79c4f42238e46c7d053da8e020d",
      "tree": "f2e9ed7b6b0bc176facaa49846734790023a6b16",
      "parents": [
        "16ffc3eeaa00d513b0076b7b2b96419f28acc912",
        "d1f0132e76a11b05167313c606a853953f416081"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:32:26 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:32:26 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-lguest\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-lguest: (31 commits)\n  lguest: add support for indirect ring entries\n  lguest: suppress notifications in example Launcher\n  lguest: try to batch interrupts on network receive\n  lguest: avoid sending interrupts to Guest when no activity occurs.\n  lguest: implement deferred interrupts in example Launcher\n  lguest: remove obsolete LHREQ_BREAK call\n  lguest: have example Launcher service all devices in separate threads\n  lguest: use eventfds for device notification\n  eventfd: export eventfd_signal and eventfd_fget for lguest\n  lguest: allow any process to send interrupts\n  lguest: PAE fixes\n  lguest: PAE support\n  lguest: Add support for kvm_hypercall4()\n  lguest: replace hypercall name LHCALL_SET_PMD with LHCALL_SET_PGD\n  lguest: use native_set_* macros, which properly handle 64-bit entries when PAE is activated\n  lguest: map switcher with executable page table entries\n  lguest: fix writev returning short on console output\n  lguest: clean up length-used value in example launcher\n  lguest: Segment selectors are 16-bit long. Fix lg_cpu.ss1 definition.\n  lguest: beyond ARRAY_SIZE of cpu-\u003earch.gdt\n  ...\n"
    },
    {
      "commit": "16ffc3eeaa00d513b0076b7b2b96419f28acc912",
      "tree": "82503d25fb9091fc6628961d953ffc0d305adf27",
      "parents": [
        "c34752bc8b3196aee3115d1aa41972604ab0aea8",
        "e3353853730eb99c56b7b0aed1667d51c0e3699a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:31:52 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:31:52 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-virtio\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-virtio:\n  virtio: enhance id_matching for virtio drivers\n  virtio: fix id_matching for virtio drivers\n  virtio: handle short buffers in virtio_rng.\n  virtio_blk: add missing __dev{init,exit} markings\n  virtio: indirect ring entries (VIRTIO_RING_F_INDIRECT_DESC)\n  virtio: teach virtio_has_feature() about transport features\n  virtio: expose features in sysfs\n  virtio_pci: optional MSI-X support\n  virtio_pci: split up vp_interrupt\n  virtio: find_vqs/del_vqs virtio operations\n  virtio: add names to virtqueue struct, mapping from devices to queues.\n  virtio: meet virtio spec by finalizing features before using device\n  virtio: fix obsolete documentation on probe function\n"
    },
    {
      "commit": "c34752bc8b3196aee3115d1aa41972604ab0aea8",
      "tree": "db93341ab4043e1c21d83f0b7dfdbc1798b88845",
      "parents": [
        "65d52cc9d47975f4fbd0a50e62f4a49be2c0514a",
        "151060ac13144208bd7601d17e4c92c59b98072f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:31:20 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:31:20 2009 -0700"
      },
      "message": "Merge branch \u0027cuse\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse\n\n* \u0027cuse\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:\n  CUSE: implement CUSE - Character device in Userspace\n  fuse: export symbols to be used by CUSE\n  fuse: update fuse_conn_init() and separate out fuse_conn_kill()\n  fuse: don\u0027t use inode in fuse_file_poll\n  fuse: don\u0027t use inode in fuse_do_ioctl() helper\n  fuse: don\u0027t use inode in fuse_sync_release()\n  fuse: create fuse_do_open() helper for CUSE\n  fuse: clean up args in fuse_finish_open() and fuse_release_fill()\n  fuse: don\u0027t use inode in helpers called by fuse_direct_io()\n  fuse: add members to struct fuse_file\n  fuse: prepare fuse_direct_io() for CUSE\n  fuse: clean up fuse_write_fill()\n  fuse: use struct path in release structure\n  fuse: misc cleanups\n"
    },
    {
      "commit": "65d52cc9d47975f4fbd0a50e62f4a49be2c0514a",
      "tree": "01f8eccc8ffac28112a58e397d96e8eba2de5ebf",
      "parents": [
        "d614aec4752f8c61b2e7cb77806b6bd59aa50836",
        "5933048c69edb546f1e93c26dc93816f0be9f754"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:30:36 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:30:36 2009 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-module-and-param\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-module-and-param:\n  module: cleanup FIXME comments about trimming exception table entries.\n  module: trim exception table on init free.\n  module: merge module_alloc() finally\n  uml module: fix uml build process due to this merge\n  x86 module: merge the rest functions with macros\n  x86 module: merge the same functions in module_32.c and module_64.c\n  uvesafb: improve parameter handling.\n  module_param: allow \u0027bool\u0027 module_params to be bool, not just int.\n  module_param: add __same_type convenience wrapper for __builtin_types_compatible_p\n  module_param: split perm field into flags and perm\n  module_param: invbool should take a \u0027bool\u0027, not an \u0027int\u0027\n  cyber2000fb.c: use proper method for stopping unload if CONFIG_ARCH_SHARK\n"
    },
    {
      "commit": "d614aec4752f8c61b2e7cb77806b6bd59aa50836",
      "tree": "3b0cfb3085c43415931dbf18666d582fb8ae3c75",
      "parents": [
        "db8e7f10ed67933ca272f4030eb7057b7f13de07",
        "ad7c52d0988a8965989dc06d630c52a5bde849d5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:29:42 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:29:42 2009 -0700"
      },
      "message": "Merge branch \u0027for-2.6.31\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6\n\n* \u0027for-2.6.31\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (29 commits)\n  ide: re-implement ide_pci_init_one() on top of ide_pci_init_two()\n  ide: unexport ide_find_dma_mode()\n  ide: fix PowerMac bootup oops\n  ide: skip probe if there are no devices on the port (v2)\n  sl82c105: add printk() logging facility\n  ide-tape: fix proc warning\n  ide: add IDE_DFLAG_NIEN_QUIRK device flag\n  ide: respect quirk_drives[] list on all controllers\n  hpt366: enable all quirks for devices on quirk_drives[] list\n  hpt366: sync quirk_drives[] list with pdc202xx_{new,old}.c\n  ide: remove superfluous SELECT_MASK() call from do_rw_taskfile()\n  ide: remove superfluous SELECT_MASK() call from ide_driveid_update()\n  icside: remove superfluous -\u003emaskproc method\n  ide-tape: fix IDE_AFLAG_* atomic accesses\n  ide-tape: change IDE_AFLAG_IGNORE_DSC non-atomically\n  pdc202xx_old: kill resetproc() method\n  pdc202xx_old: don\u0027t call pdc202xx_reset() on IRQ timeout\n  pdc202xx_old: use ide_dma_test_irq()\n  ide: preserve Host Protected Area by default (v2)\n  ide-gd: implement block device -\u003eset_capacity method (v2)\n  ...\n"
    },
    {
      "commit": "db8e7f10ed67933ca272f4030eb7057b7f13de07",
      "tree": "0e0ef8b5fc4357fc91d34b75ee4603468439d348",
      "parents": [
        "8ebf975608aaebd7feb33d77f07ba21a6380e086",
        "1260866a271abc84274345580f3d613d3bceff87"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:26:32 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 12 09:26:32 2009 -0700"
      },
      "message": "Merge branch \u0027x86-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027x86-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  x86: Provide _sdata in the vmlinux.lds.S file\n  x86: handle initrd that extends into unusable memory\n"
    },
    {
      "commit": "82681a318f9f028ea64e61f24bbd9ac535531921",
      "tree": "529b6a5b4fd040fb54b7672b1a224ebd47445876",
      "parents": [
        "3860c97bd60a4525bb62eb90e3e7d2f02662ac59",
        "8ebf975608aaebd7feb33d77f07ba21a6380e086"
      ],
      "author": {
        "name": "James Bottomley",
        "email": "James.Bottomley@HansenPartnership.com",
        "time": "Fri Jun 12 10:02:03 2009 -0500"
      },
      "committer": {
        "name": "James Bottomley",
        "email": "James.Bottomley@HansenPartnership.com",
        "time": "Fri Jun 12 10:02:03 2009 -0500"
      },
      "message": "[SCSI] Merge branch \u0027linus\u0027\n\nConflicts:\n\tdrivers/message/fusion/mptsas.c\n\nfixed up conflict between req-\u003edata_len accessors and mptsas driver updates.\n\nSigned-off-by: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\n"
    },
    {
      "commit": "d1f0132e76a11b05167313c606a853953f416081",
      "tree": "abd06f91d578b1927249f6a467910da88b3ec910",
      "parents": [
        "b60da13fc7bbf99d3c68578bd3fbcf66e1cb5f41"
      ],
      "author": {
        "name": "Mark McLoughlin",
        "email": "markmc@redhat.com",
        "time": "Mon May 11 18:11:46 2009 +0100"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:13 2009 +0930"
      },
      "message": "lguest: add support for indirect ring entries\n\nSupport the VIRTIO_RING_F_INDIRECT_DESC feature.\n\nThis is a simple matter of changing the descriptor walking\ncode to operate on a struct vring_desc* and supplying it\nwith an indirect table if detected.\n\nSigned-off-by: Mark McLoughlin \u003cmarkmc@redhat.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "b60da13fc7bbf99d3c68578bd3fbcf66e1cb5f41",
      "tree": "6ae96583da3212755d867fdff30b2f9ae58609e8",
      "parents": [
        "4a8962e21bc505c714fc2508494d4c7dd3fe2d29"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:12 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:13 2009 +0930"
      },
      "message": "lguest: suppress notifications in example Launcher\n\nThe Guest only really needs to tell us about activity when we\u0027re going\nto listen to the eventfd: normally, we don\u0027t want to know.\n\nSo if there are no available buffers, turn on notifications, re-check,\nthen wait for the Guest to notify us via the eventfd, then turn\nnotifications off again.\n\nThere\u0027s enough else going on that the differences are in the noise.\n\nBefore:\t\t\t\tSecs\tRxKicks\tTxKicks\n 1G TCP Guest-\u003eHost:\t\t3.94\t  4686\t  32815\n 1M normal pings:\t\t104\t142862\t1000010\n 1M 1k pings (-l 120):\t\t57\t142026\t1000007\n\nAfter:\n 1G TCP Guest-\u003eHost:\t\t3.76\t  4691\t  32811\n 1M normal pings:\t\t111\t142859\t 997467\n 1M 1k pings (-l 120):\t\t55\t 19648\t 501549\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "4a8962e21bc505c714fc2508494d4c7dd3fe2d29",
      "tree": "55afdb7bc1f7e03bc910e59a17962e671a031ebc",
      "parents": [
        "95c517c09bad31a03e22f2fdb5f0aa26a490a92d"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:12 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:12 2009 +0930"
      },
      "message": "lguest: try to batch interrupts on network receive\n\nRather than triggering an interrupt every time, we only trigger an\ninterrupt when there are no more incoming packets (or the recv queue\nis full).\n\nHowever, the overhead of doing the select to figure this out is\nmeasurable: 1M pings goes from 98 to 104 seconds, and 1G Guest-\u003eHost\nTCP goes from 3.69 to 3.94 seconds.  It\u0027s close to the noise though.\n\nI tested various timeouts, including reducing it as the number of\npending packets increased, timing a 1 gigabyte TCP send from Guest -\u003e\nHost and Host -\u003e Guest (GSO disabled, to increase packet rate).\n\n// time tcpblast -o -s 65536 -c 16k 192.168.2.1:9999 \u003e /dev/null\n\nTimeout\t\tGuest-\u003eHost\tPkts/irq\tHost-\u003eGuest\tPkts/irq\nBefore\t\t11.3s\t\t1.0\t\t6.3s\t\t1.0\n0\t\t11.7s\t\t1.0\t\t6.6s\t\t23.5\n1\t\t17.1s\t\t8.8\t\t8.6s\t\t26.0\n1/pending\t13.4s\t\t1.9\t\t6.6s\t\t23.8\n2/pending\t13.6s\t\t2.8\t\t6.6s\t\t24.1\n5/pending\t14.1s\t\t5.0\t\t6.6s\t\t24.4\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "95c517c09bad31a03e22f2fdb5f0aa26a490a92d",
      "tree": "aa34fdb7ca3a6b7575a2ac7639c157995d334bc3",
      "parents": [
        "38bc2b8c56a2e212bbd19de7cf9976dcc7bf9953"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:11 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:12 2009 +0930"
      },
      "message": "lguest: avoid sending interrupts to Guest when no activity occurs.\n\nIf we track how many buffers we\u0027ve used, we can tell whether we really\nneed to interrupt the Guest.  This happens as a side effect of\nspurious notifications.\n\nSpurious notifications happen because it can take a while before the\nHost thread wakes up and sets the VRING_USED_F_NO_NOTIFY flag, and\nmeanwhile the Guest can more notifications.\n\nA real fix would be to use wake counts, rather than a suppression\nflag, but the practical difference is generally in the noise: the\ninterrupt is usually coalesced into a pending one anyway so we just\nsave a system call which isn\u0027t clearly measurable.\n\n\t\t\t\tSecs\tSpurious IRQS\n1G TCP Guest-\u003eHost:\t\t3.93\t58\n1M normal pings:\t\t100\t72\n1M 1k pings (-l 120):\t\t57\t492904\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "38bc2b8c56a2e212bbd19de7cf9976dcc7bf9953",
      "tree": "26071dbb540926c329ece0ab4d4425807021b5c8",
      "parents": [
        "5dac051bc6030963181b69faddd9e0ad04f85fa8"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:11 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:11 2009 +0930"
      },
      "message": "lguest: implement deferred interrupts in example Launcher\n\nRather than sending an interrupt on every buffer, we only send an interrupt\nwhen we\u0027re about to wait for the Guest to send us a new one.  The console\ninput and network input still send interrupts manually, but the block device,\nnetwork and console output queues can simply rely on this logic to send\ninterrupts to the Guest at the right time.\n\nThe patch is cluttered by moving trigger_irq() higher in the code.\n\nIn practice, two factors make this optimization less interesting:\n(1) we often only get one input at a time, even for networking,\n(2) triggering an interrupt rapidly tends to get coalesced anyway.\n\nBefore:\t\t\t\tSecs\tRxIRQS\tTxIRQs\n 1G TCP Guest-\u003eHost:\t\t3.72\t32784\t32771\n 1M normal pings:\t\t99\t1000004\t995541\n 100,000 1k pings (-l 120):\t5\t49510\t49058\n\nAfter:\n 1G TCP Guest-\u003eHost:\t\t3.69\t32809\t32769\n 1M normal pings:\t\t99\t1000004\t996196\n 100,000 1k pings (-l 120):\t5\t52435\t52361\n\n(Note the interrupt count on 100k pings goes *up*: see next patch).\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "5dac051bc6030963181b69faddd9e0ad04f85fa8",
      "tree": "4a0456e1d971bbe9f68f4ac13d31716c12fbb618",
      "parents": [
        "659a0e6633567246edcb7bd400c7e2bece9237d9"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:10 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:11 2009 +0930"
      },
      "message": "lguest: remove obsolete LHREQ_BREAK call\n\nWe no longer need an efficient mechanism to force the Guest back into\nhost userspace, as each device is serviced without bothering the main\nGuest process (aka. the Launcher).\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "659a0e6633567246edcb7bd400c7e2bece9237d9",
      "tree": "2ece97564e432b837389e166d9b61773d34b1063",
      "parents": [
        "df60aeef4f4fe0645d9a195a7689005520422de5"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:10 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:10 2009 +0930"
      },
      "message": "lguest: have example Launcher service all devices in separate threads\n\nCurrently lguest has three threads: the main Launcher thread, a Waker\nthread, and a thread for the block device (because synchronous block\nwas simply too painful to bear).\n\nThe Waker selects() on all the input file descriptors (eg. stdin, net\ndevices, pipe to the block thread) and when one becomes readable it calls\ninto the kernel to kick the Launcher thread out into userspace, which\nrepeats the poll, services the device(s), and then tells the kernel to\nrelease the Waker before re-entering the kernel to run the Guest.\n\nAlso, to make a slightly-decent network transmit routine, the Launcher\nwould suppress further network interrupts while it set a timer: that\nsignal handler would write to a pipe, which would rouse the Waker\nwhich would prod the Launcher out of the kernel to check the network\ndevice again.\n\nNow we can convert all our virtqueues to separate threads: each one has\na separate eventfd for when the Guest pokes the device, and can trigger\ninterrupts in the Guest directly.\n\nThe linecount shows how much this simplifies, but to really bring it\nhome, here\u0027s an strace analysis of single Guest-\u003eHost ping before:\n\n* Guest sends packet, notifies xmit vq, return control to Launcher\n* Launcher clears notification flag on xmit ring\n* Launcher writes packet to TUN device\n\twritev(4, [{\"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\", 10}, {\"\\366\\r\\224`\\2058\\272m\\224vf\\274\\10\\0E\\0\\0T\\0\\0@\\0@\\1\\265\"..., 98}], 2) \u003d 108\n* Launcher sets up interrupt for Guest (xmit ring is empty)\n\twrite(10, \"\\2\\0\\0\\0\\3\\0\\0\\0\", 8) \u003d 0\n* Launcher sets up timer for interrupt mitigation\n\tsetitimer(ITIMER_REAL, {it_interval\u003d{0, 0}, it_value\u003d{0, 505}}, NULL) \u003d 0\n* Launcher re-runs guest\n\tpread64(10, 0xbfa5f4d4, 4, 0) ...\n* Waker notices reply packet in tun device (it was in select)\n\tselect(12, [0 3 4 6 11], NULL, NULL, NULL) \u003d 1 (in [4])\n* Waker kicks Launcher out of guest:\n\tpwrite64(10, \"\\3\\0\\0\\0\\1\\0\\0\\0\", 8, 0) \u003d 0\n* Launcher returns from running guest:\n\t... \u003d -1 EAGAIN (Resource temporarily unavailable)\n* Launcher looks at input fds:\n\tselect(7, [0 3 4 6], NULL, NULL, {0, 0}) \u003d 1 (in [4], left {0, 0})\n* Launcher reads pong from tun device:\n\treadv(4, [{\"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\", 10}, {\"\\272m\\224vf\\274\\366\\r\\224`\\2058\\10\\0E\\0\\0T\\364\\26\\0\\0@\"..., 1518}], 2) \u003d 108\n* Launcher injects guest notification:\n\twrite(10, \"\\2\\0\\0\\0\\2\\0\\0\\0\", 8) \u003d 0\n* Launcher rechecks fds:\n\tselect(7, [0 3 4 6], NULL, NULL, {0, 0}) \u003d 0 (Timeout)\n* Launcher clears Waker:\n\tpwrite64(10, \"\\3\\0\\0\\0\\0\\0\\0\\0\", 8, 0) \u003d 0\n* Launcher reruns Guest:\n\tpread64(10, 0xbfa5f4d4, 4, 0) \u003d ? ERESTARTSYS (To be restarted)\n* Signal comes in, uses pipe to wake up Launcher:\n\t--- SIGALRM (Alarm clock) @ 0 (0) ---\n\twrite(8, \"\\0\", 1)       \u003d 1\n\tsigreturn()             \u003d ? (mask now [])\n* Waker sees write on pipe:\n\tselect(12, [0 3 4 6 11], NULL, NULL, NULL) \u003d 1 (in [6])\n* Waker kicks Launcher out of Guest:\n\tpwrite64(10, \"\\3\\0\\0\\0\\1\\0\\0\\0\", 8, 0) \u003d 0\n* Launcher exits from kernel:\n\tpread64(10, 0xbfa5f4d4, 4, 0) \u003d -1 EAGAIN (Resource temporarily unavailable)\n* Launcher looks to see what fd woke it:\n\tselect(7, [0 3 4 6], NULL, NULL, {0, 0}) \u003d 1 (in [6], left {0, 0})\n* Launcher reads timeout fd, sets notification flag on xmit ring\n\tread(6, \"\\0\", 32)       \u003d 1\n* Launcher rechecks fds:\n\tselect(7, [0 3 4 6], NULL, NULL, {0, 0}) \u003d 0 (Timeout)\n* Launcher clears Waker:\n\tpwrite64(10, \"\\3\\0\\0\\0\\0\\0\\0\\0\", 8, 0) \u003d 0\n* Launcher resumes Guest:\n\tpread64(10, \"\\0p\\0\\4\", 4, 0) ....\n\nstrace analysis of single Guest-\u003eHost ping after:\n\n* Guest sends packet, notifies xmit vq, creates event on eventfd.\n* Network xmit thread wakes from read on eventfd:\n\tread(7, \"\\1\\0\\0\\0\\0\\0\\0\\0\", 8)          \u003d 8\n* Network xmit thread writes packet to TUN device\n\twritev(4, [{\"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\", 10}, {\"J\\217\\232FI\\37j\\27\\375\\276\\0\\304\\10\\0E\\0\\0T\\0\\0@\\0@\\1\\265\"..., 98}], 2) \u003d 108\n* Network recv thread wakes up from read on tunfd:\n\treadv(4, [{\"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\", 10}, {\"j\\27\\375\\276\\0\\304J\\217\\232FI\\37\\10\\0E\\0\\0TiO\\0\\0@\\1\\214\"..., 1518}], 2) \u003d 108\n* Network recv thread sets up interrupt for the Guest\n\twrite(6, \"\\2\\0\\0\\0\\2\\0\\0\\0\", 8) \u003d 0\n* Network recv thread goes back to reading tunfd\n\t13:39:42.460285 readv(4,  \u003cunfinished ...\u003e\n* Network xmit thread sets up interrupt for Guest (xmit ring is empty)\n\twrite(6, \"\\2\\0\\0\\0\\3\\0\\0\\0\", 8) \u003d 0\n* Network xmit thread goes back to reading from eventfd\n\tread(7, \u003cunfinished ...\u003e\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "df60aeef4f4fe0645d9a195a7689005520422de5",
      "tree": "3cfa3c4a986436c8accd5f0a57d5a6f70f1b7965",
      "parents": [
        "5718607bb670c721f45f0dbb1cc7d6c64969aab1"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:09 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:10 2009 +0930"
      },
      "message": "lguest: use eventfds for device notification\n\nCurrently, when a Guest wants to perform I/O it calls LHCALL_NOTIFY with\nan address: the main Launcher process returns with this address, and figures\nout what device to run.\n\nA far nicer model is to let processes bind an eventfd to an address: if we\nfind one, we simply signal the eventfd.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\n"
    },
    {
      "commit": "5718607bb670c721f45f0dbb1cc7d6c64969aab1",
      "tree": "9b595af2cd4649bea4c130b9dc223a5f886c34d2",
      "parents": [
        "9f155a9b3d5a5444bcc5e049ec2547bb5107150e"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:09 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:09 2009 +0930"
      },
      "message": "eventfd: export eventfd_signal and eventfd_fget for lguest\n\nlguest wants to attach eventfds to guest notifications, and lguest is\nusually a module.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nTo: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\n"
    },
    {
      "commit": "9f155a9b3d5a5444bcc5e049ec2547bb5107150e",
      "tree": "ef8fe2d5a319abb3bb1c89374f9d2fef1b0881c3",
      "parents": [
        "92b4d8df8436cdd74d22a2a5b6b23b9abc737a3e"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:08 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:09 2009 +0930"
      },
      "message": "lguest: allow any process to send interrupts\n\nWe currently only allow the Launcher process to send interrupts, but it\nas we already send interrupts from the hrtimer, it\u0027s a simple matter of\nextracting that code into a common set_interrupt routine.\n\nAs we switch to a thread per virtqueue, this avoids a bottleneck through the\nmain Launcher process.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "92b4d8df8436cdd74d22a2a5b6b23b9abc737a3e",
      "tree": "bba0dce08d1fde432f370b7ef2845e0ae195a34d",
      "parents": [
        "acdd0b6292b282c4511897ac2691a47befbf1c6a"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:08 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:08 2009 +0930"
      },
      "message": "lguest: PAE fixes\n\n1) j wasn\u0027t initialized in setup_pagetables, so they weren\u0027t set up for me\n   causing immediate guest crashes.\n\n2) gpte_addr should not re-read the pmd from the Guest.  Especially\n   not BUG_ON() based on the value.  If we ever supported SMP guests,\n   they could trigger that.  And the Launcher could also trigger it\n   (tho currently root-only).\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "acdd0b6292b282c4511897ac2691a47befbf1c6a",
      "tree": "1bfcfc32b11d35e99fec5bbf52b19d6ee038f25e",
      "parents": [
        "cefcad1773197523e11e18b669f245e6a8d32058"
      ],
      "author": {
        "name": "Matias Zabaljauregui",
        "email": "zabaljauregui@gmail.com",
        "time": "Fri Jun 12 22:27:07 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:08 2009 +0930"
      },
      "message": "lguest: PAE support\n\nThis version requires that host and guest have the same PAE status.\nNX cap is not offered to the guest, yet.\n\nSigned-off-by: Matias Zabaljauregui \u003czabaljauregui@gmail.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "cefcad1773197523e11e18b669f245e6a8d32058",
      "tree": "2d94e3df551b3ee58c1ac89ed4872e2153496c05",
      "parents": [
        "ebe0ba84f55950a89cb7af94c7ffc35ee3992f9e"
      ],
      "author": {
        "name": "Matias Zabaljauregui",
        "email": "zabaljauregui@gmail.com",
        "time": "Fri Jun 12 22:27:07 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:07 2009 +0930"
      },
      "message": "lguest: Add support for kvm_hypercall4()\n\nAdd support for kvm_hypercall4(); PAE wants it.\n\nSigned-off-by: Matias Zabaljauregui \u003czabaljauregui at gmail.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "ebe0ba84f55950a89cb7af94c7ffc35ee3992f9e",
      "tree": "df1c3373274846b4998ea75c56f347a264b2c8ad",
      "parents": [
        "90603d15fa95605d1d08235b73e220d766f04bb0"
      ],
      "author": {
        "name": "Matias Zabaljauregui",
        "email": "zabaljauregui@gmail.com",
        "time": "Sat May 30 15:48:08 2009 -0300"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:07 2009 +0930"
      },
      "message": "lguest: replace hypercall name LHCALL_SET_PMD with LHCALL_SET_PGD\n\nreplace LHCALL_SET_PMD with LHCALL_SET_PGD hypercall name\n(That\u0027s really what it is, and the confusion gets worse with PAE support)\n\nSigned-off-by: Matias Zabaljauregui \u003czabaljauregui@gmail.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nReported-by: Jeremy Fitzhardinge \u003cjeremy@goop.org\u003e\n"
    },
    {
      "commit": "90603d15fa95605d1d08235b73e220d766f04bb0",
      "tree": "669b5a41ebdb368e578898409d8a48021074746a",
      "parents": [
        "ed1dc77810159a733240ba6751c1b31023bf8dd7"
      ],
      "author": {
        "name": "Matias Zabaljauregui",
        "email": "zabaljauregui@gmail.com",
        "time": "Fri Jun 12 22:27:06 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:06 2009 +0930"
      },
      "message": "lguest: use native_set_* macros, which properly handle 64-bit entries when PAE is activated\n\nSome cleanups and replace direct assignment with native_set_* macros which properly handle 64-bit entries when PAE is activated\n\nSigned-off-by: Matias Zabaljauregui \u003czabaljauregui@gmail.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "ed1dc77810159a733240ba6751c1b31023bf8dd7",
      "tree": "d77ed52cd56e2cf3f5eac9d5db22ad1196e694d8",
      "parents": [
        "7b5c806c35f6ff76b2e36a8b5b1513c8a83fcff7"
      ],
      "author": {
        "name": "Matias Zabaljauregui",
        "email": "zabaljauregui@gmail.com",
        "time": "Sat May 30 15:35:49 2009 -0300"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:06 2009 +0930"
      },
      "message": "lguest: map switcher with executable page table entries\n\nMap switcher with executable page table entries.\n(This bug didn\u0027t matter before PAE and hence NX support -- RR)\n\nSigned-off-by: Matias Zabaljauregui \u003czabaljauregui@gmail.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "7b5c806c35f6ff76b2e36a8b5b1513c8a83fcff7",
      "tree": "382e194aadcae193229c121c60c0d4838255c327",
      "parents": [
        "e606490c440900e50ccf73a54f6fc6150ff40815"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:05 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:05 2009 +0930"
      },
      "message": "lguest: fix writev returning short on console output\n\nI\u0027ve never seen it here, but I can\u0027t find anywhere that says writev\nwill write everything.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "e606490c440900e50ccf73a54f6fc6150ff40815",
      "tree": "43a660399ee81b3926789bd1644513e83c605d50",
      "parents": [
        "f086122bb6e885f926f935b1418fca3b293375f0"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:04 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:05 2009 +0930"
      },
      "message": "lguest: clean up length-used value in example launcher\n\nThe \"len\" field in the used ring for virtio indicates the number of\nbytes *written* to the buffer.  This means the guest doesn\u0027t have to\nzero the buffers in advance as it always knows the used length.\n\nErroneously, the console and network example code puts the length\n*read* into that field.  The guest ignores it, but it\u0027s wrong.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "f086122bb6e885f926f935b1418fca3b293375f0",
      "tree": "21f14d50489380e609ecffb61cdc4f5b2f624694",
      "parents": [
        "81b79b01d057f8c5a378c38d2f738775b972934a"
      ],
      "author": {
        "name": "Matias Zabaljauregui",
        "email": "zabaljauregui@gmail.com",
        "time": "Fri Jun 12 22:27:04 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:04 2009 +0930"
      },
      "message": "lguest: Segment selectors are 16-bit long. Fix lg_cpu.ss1 definition.\n\nIf GDT_ENTRIES were every \u003e 256, this could become a problem.\n\nSigned-off-by: Matias Zabaljauregui \u003czabaljauregui at gmail.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "81b79b01d057f8c5a378c38d2f738775b972934a",
      "tree": "0e2c295109568916e187a65e6d93a3319bbb51a9",
      "parents": [
        "2644f17d6c932929fd68cfec95691490947e0fd1"
      ],
      "author": {
        "name": "Roel Kluin",
        "email": "roel.kluin@gmail.com",
        "time": "Wed May 20 01:45:45 2009 +0200"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:04 2009 +0930"
      },
      "message": "lguest: beyond ARRAY_SIZE of cpu-\u003earch.gdt\n\nDo not go beyond ARRAY_SIZE of cpu-\u003earch.gdt\n\nSigned-off-by: Roel Kluin \u003croel.kluin@gmail.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "2644f17d6c932929fd68cfec95691490947e0fd1",
      "tree": "82e3c567fec2c48aa4d5a053da2563e4a2fdcf5a",
      "parents": [
        "61f4bc83fea248a3092beb7ba43daa5629615513"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:03 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:03 2009 +0930"
      },
      "message": "lguest: clean up example launcher compile flags.\n\n18 months ago 5bbf89fc260830f3f58b331d946a16b39ad1ca2d changed to loading\nbzImages directly, and no longer manually ungzipping them, so we no longer\nneed libz.\n\nAlso, -m32 is useful for those on 64-bit platforms (and harmless on\n32-bit).\n\nReported-by: Ron Minnich \u003crminnich@gmail.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "61f4bc83fea248a3092beb7ba43daa5629615513",
      "tree": "5ce12fc0676f93a49f743dab1c60f8e1ca991ec3",
      "parents": [
        "a32a8813d0173163ba44d8f9556e0d89fdc4fb46"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:03 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:03 2009 +0930"
      },
      "message": "lguest: optimize by coding restore_flags and irq_enable in assembler.\n\nThe downside of the last patch which made restore_flags and irq_enable\ncheck interrupts is that they are now too big to be patched directly\ninto the callsites, so the C versions are always used.\n\nBut the C versions go via PV_CALLEE_SAVE_REGS_THUNK which saves all\nthe registers.  In fact, we don\u0027t need any registers in the fast path,\nso we can do better than this if we actually code them in assembler.\n\nThe results are in the noise, but since it\u0027s about the same amount of\ncode, it\u0027s worth applying.\n\n1GB Guest-\u003eHost: input(suppressed),output(suppressed)\nBefore:\n\tSeconds: 0:16.53\n\tPackets: 377268,753673\n\tInterrupts: 22461,24297\n\tNotifications: 1(5245),21303(732370)\n\tNet IRQs triggered: 377023(245),42578(711095)\n\nAfter:\n\tSeconds: 0:16.48\n\tPackets: 377289,753673\n\tInterrupts: 22281,24465\n\tNotifications: 1(5245),21296(732377)\n\tNet IRQs triggered: 377060(229),42564(711109)\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "a32a8813d0173163ba44d8f9556e0d89fdc4fb46",
      "tree": "fddb6742338047d0219e8c2536cd39b04e643b16",
      "parents": [
        "abd41f037e1a64543000ed73b42f616d04d92700"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:02 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:03 2009 +0930"
      },
      "message": "lguest: improve interrupt handling, speed up stream networking\n\nlguest never checked for pending interrupts when enabling interrupts, and\nthings still worked.  However, it makes a significant difference to TCP\nperformance, so it\u0027s time we fixed it by introducing a pending_irq flag\nand checking it on irq_restore and irq_enable.\n\nThese two routines are now too big to patch into the 8/10 bytes\npatch space, so we drop that code.\n\nNote: The high latency on interrupt delivery had a very curious\neffect: once everything else was optimized, networking without GSO was\nfaster than networking with GSO, since more interrupts were sent and\nhence a greater chance of one getting through to the Guest!\n\nNote2: (Almost) Closing the same loophole for iret doesn\u0027t have any\nmeasurable effect, so I\u0027m leaving that patch for the moment.\n\nBefore:\n\t1GB tcpblast Guest-\u003eHost:\t\t30.7 seconds\n\t1GB tcpblast Guest-\u003eHost (no GSO):\t76.0 seconds\n\nAfter:\n\t1GB tcpblast Guest-\u003eHost:\t\t6.8 seconds\n\t1GB tcpblast Guest-\u003eHost (no GSO):\t27.8 seconds\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "abd41f037e1a64543000ed73b42f616d04d92700",
      "tree": "d9013e66f4d8fc66fc92ce0587f8d126e156b253",
      "parents": [
        "ebf9a5a99c1a464afe0b4dfa64416fc8b273bc5c"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:02 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:02 2009 +0930"
      },
      "message": "lguest: fix race in halt code\n\nWhen the Guest does the LHCALL_HALT hypercall, we go to sleep, expecting\nthat a timer or the Waker will wake_up_process() us.\n\nBut we do it in a stupid way, leaving a classic missing wakeup race.\n\nSo split maybe_do_interrupt() into interrupt_pending() and\ntry_deliver_interrupt(), and check maybe_do_interrupt() and the\n\"break_out\" flag before calling schedule.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "ebf9a5a99c1a464afe0b4dfa64416fc8b273bc5c",
      "tree": "b5f0631172db5d97e0a5c6b8a6bc0f83c4a4eed5",
      "parents": [
        "a6c372de6e4b9a8188b66badcee3e3792eccdd26"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:01 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:02 2009 +0930"
      },
      "message": "lguest: remove invalid interrupt forcing logic.\n\n20887611523e749d99cc7d64ff6c97d27529fbae (lguest: notify on empty) introduced\nlguest support for the VIRTIO_F_NOTIFY_ON_EMPTY flag, but in fact it turned on\ninterrupts all the time.\n\nBecause we always process one buffer at a time, the inflight count is always 0\nwhen call trigger_irq and so we always ignore VRING_AVAIL_F_NO_INTERRUPT from\nthe Guest.\n\nIt should be looking to see if there are more buffers in the Guest\u0027s queue:\nif it\u0027s empty, then we force an interrupt.\n\nThis makes little difference, since we usually have an empty queue; but\nthat\u0027s the subject of another patch.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "a6c372de6e4b9a8188b66badcee3e3792eccdd26",
      "tree": "b6b67f4cc447cc0ee8ae617bb503ef7d7f6e4958",
      "parents": [
        "b43e352139f51216a8c56b0bd5fc3d4e05c65619"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:01 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:01 2009 +0930"
      },
      "message": "lguest: fix lguest wake on guest clock tick, or fd activity\n\nThe Launcher could be inside the Guest on another CPU; wake_up_process\nwill do nothing because it is \"running\".  kick_process will knock it\nback into our kernel in this case, otherwise we\u0027ll miss it until the\nnext guest exit.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "b43e352139f51216a8c56b0bd5fc3d4e05c65619",
      "tree": "f7766a7d5dc21e424bc914c99e03a4816a35d78a",
      "parents": [
        "f7027c6387d0c3acf569845165ec7947e2083c82"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:00 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:01 2009 +0930"
      },
      "message": "sched: export kick_process\n\nlguest needs kick_process: wake_up_process() does nothing if a process\nis running, which isn\u0027t sufficient (we need it in the kernel).\n\nAnd lguest support is usually modular.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "f7027c6387d0c3acf569845165ec7947e2083c82",
      "tree": "306f36650d615491d468e040d7055b07053d2fb6",
      "parents": [
        "1028375e93a7aa4dbe466947d1c65f368b1f61c1"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:00 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:00 2009 +0930"
      },
      "message": "lguest: get more serious about wmb() in example Launcher code\n\nSince the Launcher process runs the Guest, it doesn\u0027t have to be very\nserious about its barriers: the Guest isn\u0027t running while we are (Guest\nis UP).\n\nBefore we change to use threads to service devices, we need to fix this.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "1028375e93a7aa4dbe466947d1c65f368b1f61c1",
      "tree": "33199b0bb9c79fded3159b880d8ad9e0e6bcb28c",
      "parents": [
        "56739c802ca845435f60e909104637880e14c769"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:26:59 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:27:00 2009 +0930"
      },
      "message": "lguest: clean up lguest_init_IRQ\n\nCopy from arch/x86/kernel/irqinit_32.c: we don\u0027t use the vectors beyond\nLGUEST_IRQS (if any), but we might as well set them all.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "56739c802ca845435f60e909104637880e14c769",
      "tree": "3831f2b7e2c973b11e2f9823002340420fbc327b",
      "parents": [
        "713b15b3781240653d2b38414da3f4567dcbcf91"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:26:59 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:26:59 2009 +0930"
      },
      "message": "lguest: cleanup passing of /dev/lguest fd around example launcher.\n\nWe hand the /dev/lguest fd everywhere; it\u0027s far neater to just make it\na global (it already is, in fact, hidden in the waker_fds struct).\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "713b15b3781240653d2b38414da3f4567dcbcf91",
      "tree": "9b6a01f00bf4aee60548d8b8cf38458863888564",
      "parents": [
        "8ebf975608aaebd7feb33d77f07ba21a6380e086"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:26:58 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:26:59 2009 +0930"
      },
      "message": "lguest: be paranoid about guest playing with device descriptors.\n\nWe can\u0027t trust the values in the device descriptor table once the\nguest has booted, so keep local copies.  They could set them to\nstrange values then cause us to segv (they\u0027re 8 bit values, so they\ncan\u0027t make our pointers go too wild).\n\nThis becomes more important with the following patches which read them.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "e3353853730eb99c56b7b0aed1667d51c0e3699a",
      "tree": "d0da26c34a8ca12a57662830fd698ca6696f3805",
      "parents": [
        "c89e80168ba1ed37627fe03116b0cf8474dcb7e0"
      ],
      "author": {
        "name": "Christian Borntraeger",
        "email": "borntraeger@de.ibm.com",
        "time": "Tue May 26 15:46:10 2009 +0200"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:40 2009 +0930"
      },
      "message": "virtio: enhance id_matching for virtio drivers\n\nThis patch allows a virtio driver to use VIRTIO_DEV_ANY_ID for the\ndevice id. This will be used by a test module that can be bound to\nany virtio device.\n\nSigned-off-by: Christian Borntraeger \u003cborntraeger@de.ibm.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "c89e80168ba1ed37627fe03116b0cf8474dcb7e0",
      "tree": "3314d284cca77dc81913877d1cf58838186e7e85",
      "parents": [
        "594de1dd6449f79c99e1ba4577ea0e4e06e2b405"
      ],
      "author": {
        "name": "Christian Borntraeger",
        "email": "borntraeger@de.ibm.com",
        "time": "Tue May 26 15:46:09 2009 +0200"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:40 2009 +0930"
      },
      "message": "virtio: fix id_matching for virtio drivers\n\nThis bug never appeared, since all current virtio drivers use\nVIRTIO_DEV_ANY_ID for the vendor field. If a real vendor would be used,\nthe check in virtio_id_match is wrong - it returns 0 if\nid-\u003evendor \u003d\u003d dev-\u003eid.vendor.\n\nSigned-off-by: Christian Borntraeger \u003cborntraeger@de.ibm.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "594de1dd6449f79c99e1ba4577ea0e4e06e2b405",
      "tree": "eeaa70736d1aa2b40433d5dc5c98195406591d85",
      "parents": [
        "98e94444748e9af93423d1fab90543e75569a58c"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:39 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:40 2009 +0930"
      },
      "message": "virtio: handle short buffers in virtio_rng.\n\nIf the device fills less than 4 bytes of our random buffer, we\u0027ll\nBUG_ON.  It\u0027s nicer to handle the case where it partially fills the\nbuffer (the protocol doesn\u0027t explicitly bad that).\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "98e94444748e9af93423d1fab90543e75569a58c",
      "tree": "d775c68462a2f9d478a45f2f7de916dfe2e6833f",
      "parents": [
        "9fa29b9df32ba4db055f3977933cd0c1b8fe67cd"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@gentoo.org",
        "time": "Mon May 18 03:39:09 2009 -0400"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:39 2009 +0930"
      },
      "message": "virtio_blk: add missing __dev{init,exit} markings\n\nThe remove member of the virtio_driver structure uses __devexit_p(), so\nthe remove function itself should be marked with __devexit.  And where\nthere be __devexit on the remove, so is there __devinit on the probe.\n\nSigned-off-by: Mike Frysinger \u003cvapier@gentoo.org\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "9fa29b9df32ba4db055f3977933cd0c1b8fe67cd",
      "tree": "c44177d2d352f74300fe9124decc6462c8804bbe",
      "parents": [
        "ee006b353f1ca8c9a8470b72b462beb011d62e32"
      ],
      "author": {
        "name": "Mark McLoughlin",
        "email": "markmc@redhat.com",
        "time": "Mon May 11 18:11:45 2009 +0100"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:39 2009 +0930"
      },
      "message": "virtio: indirect ring entries (VIRTIO_RING_F_INDIRECT_DESC)\n\nAdd a new feature flag for indirect ring entries. These are ring\nentries which point to a table of buffer descriptors.\n\nThe idea here is to increase the ring capacity by allowing a larger\neffective ring size whereby the ring size dictates the number of\nrequests that may be outstanding, rather than the size of those\nrequests.\n\nThis should be most effective in the case of block I/O where we can\npotentially benefit by concurrently dispatching a large number of\nlarge requests. Even in the simple case of single segment block\nrequests, this results in a threefold increase in ring capacity.\n\nSigned-off-by: Mark McLoughlin \u003cmarkmc@redhat.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "ee006b353f1ca8c9a8470b72b462beb011d62e32",
      "tree": "205cb0ba2a4e08377effe7a2d10432047e82c1c9",
      "parents": [
        "a92892825a122a74ddad1d408fa27132e28b05ae"
      ],
      "author": {
        "name": "Mark McLoughlin",
        "email": "markmc@redhat.com",
        "time": "Mon May 11 18:11:44 2009 +0100"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:38 2009 +0930"
      },
      "message": "virtio: teach virtio_has_feature() about transport features\n\nDrivers don\u0027t add transport features to their table, so we\nshouldn\u0027t check these with virtio_check_driver_offered_feature().\n\nWe could perhaps add an -\u003eoffered_feature() virtio_config_op,\nbut that perhaps that would be overkill for a consitency check\nlike this.\n\nSigned-off-by: Mark McLoughlin \u003cmarkmc@redhat.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "a92892825a122a74ddad1d408fa27132e28b05ae",
      "tree": "c8dad18eb7842a10a33cdf632b5e0a0aa8fdf778",
      "parents": [
        "82af8ce84ed65d2fb6d8c017d3f2bbbf161061fb"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:37 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:38 2009 +0930"
      },
      "message": "virtio: expose features in sysfs\n\nEach device negotiates feature bits; expose these in sysfs to help\ndiagnostics and debugging.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "82af8ce84ed65d2fb6d8c017d3f2bbbf161061fb",
      "tree": "aed59c86724c7d3f565d1c60b38d25a7bf20985b",
      "parents": [
        "77cf524654a886e0fbbf03b16b44f048deef7b0c"
      ],
      "author": {
        "name": "Michael S. Tsirkin",
        "email": "mst@redhat.com",
        "time": "Thu May 14 13:55:41 2009 +0300"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:37 2009 +0930"
      },
      "message": "virtio_pci: optional MSI-X support\n\nThis implements optional MSI-X support in virtio_pci.\nMSI-X is used whenever the host supports at least 2 MSI-X\nvectors: 1 for configuration changes and 1 for virtqueues.\nPer-virtqueue vectors are allocated if enough vectors\navailable.\n\nSigned-off-by: Michael S. Tsirkin \u003cmst@redhat.com\u003e\nAcked-by: Anthony Liguori \u003caliguori@us.ibm.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e (+ whitespace, style)\n"
    },
    {
      "commit": "77cf524654a886e0fbbf03b16b44f048deef7b0c",
      "tree": "4b55884ceade70463c53517eae382f0412cc317c",
      "parents": [
        "d2a7ddda9ffb1c8961abff6714b0f1eb925c120f"
      ],
      "author": {
        "name": "Michael S. Tsirkin",
        "email": "mst@redhat.com",
        "time": "Thu May 14 13:55:31 2009 +0300"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:37 2009 +0930"
      },
      "message": "virtio_pci: split up vp_interrupt\n\nThis reorganizes virtio-pci code in vp_interrupt slightly, so that\nit\u0027s easier to add per-vq MSI support on top.\n\nSigned-off-by: Michael S. Tsirkin \u003cmst@redhat.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "d2a7ddda9ffb1c8961abff6714b0f1eb925c120f",
      "tree": "1090884fd260d042255255467367e4e6b6193e5d",
      "parents": [
        "9499f5e7ed5224c40706f0cec6542a9916bc7606"
      ],
      "author": {
        "name": "Michael S. Tsirkin",
        "email": "mst@redhat.com",
        "time": "Fri Jun 12 22:16:36 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:36 2009 +0930"
      },
      "message": "virtio: find_vqs/del_vqs virtio operations\n\nThis replaces find_vq/del_vq with find_vqs/del_vqs virtio operations,\nand updates all drivers. This is needed for MSI support, because MSI\nneeds to know the total number of vectors upfront.\n\nSigned-off-by: Michael S. Tsirkin \u003cmst@redhat.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e (+ lguest/9p compile fixes)\n"
    },
    {
      "commit": "9499f5e7ed5224c40706f0cec6542a9916bc7606",
      "tree": "3e4e1b36d3d549ea356e88e6e44359a887c6ee01",
      "parents": [
        "ef688e151c00e5d529703be9a04fd506df8bc54e"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:35 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:36 2009 +0930"
      },
      "message": "virtio: add names to virtqueue struct, mapping from devices to queues.\n\nAdd a linked list of all virtqueues for a virtio device: this helps for\ndebugging and is also needed for upcoming interface change.\n\nAlso, add a \"name\" field for clearer debug messages.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "ef688e151c00e5d529703be9a04fd506df8bc54e",
      "tree": "841d0b0bcd8a5f72f8d8bdc455672d9a6e7468ca",
      "parents": [
        "20f77f5654042cf484d8964b618faf9d620f639b"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:35 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:35 2009 +0930"
      },
      "message": "virtio: meet virtio spec by finalizing features before using device\n\nVirtio devices are supposed to negotiate features before they start using\nthe device, but the current code doesn\u0027t do this.  This is because the\ndriver\u0027s probe() function invariably has to add buffers to a virtqueue,\nor probe the disk (virtio_blk).\n\nThis currently doesn\u0027t matter since no existing backend is strict about\nthe feature negotiation.  But it\u0027s possible to imagine a future feature\nwhich completely changes how a device operates: in this case, we\u0027d need\nto acknowledge it before using the device.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "20f77f5654042cf484d8964b618faf9d620f639b",
      "tree": "d5007f2e5ec72062532b7930ef0a6f68708d9658",
      "parents": [
        "8ebf975608aaebd7feb33d77f07ba21a6380e086"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:33 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 22:16:35 2009 +0930"
      },
      "message": "virtio: fix obsolete documentation on probe function\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "3ea400581f2b595afd91207bbd79c11cb38598e0",
      "tree": "c8d1095b2cb4b516c91f93646fea4d7cb14db92f",
      "parents": [
        "63997775b795f97ef51f3e56bc3abc9edc04bbb0"
      ],
      "author": {
        "name": "Steven Whitehouse",
        "email": "swhiteho@redhat.com",
        "time": "Fri Jun 12 13:40:47 2009 +0100"
      },
      "committer": {
        "name": "Steven Whitehouse",
        "email": "swhiteho@redhat.com",
        "time": "Fri Jun 12 13:40:47 2009 +0100"
      },
      "message": "GFS2: Remove lock_kernel from gfs2_put_super()\n\nIt is not required here.\n\nSigned-off-by: Steven Whitehouse \u003cswhiteho@redhat,com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\n"
    },
    {
      "commit": "5933048c69edb546f1e93c26dc93816f0be9f754",
      "tree": "a051310933342efea5ae64a0bb490aad1e5f1d0f",
      "parents": [
        "ad6561dffa17f17bb68d7207d422c26c381c4313"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:47:04 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:47:05 2009 +0930"
      },
      "message": "module: cleanup FIXME comments about trimming exception table entries.\n\nEveryone cut and paste this comment from my original one.  We now do\nit generically, so cut the comments.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Amerigo Wang \u003camwang@redhat.com\u003e\n"
    },
    {
      "commit": "ad6561dffa17f17bb68d7207d422c26c381c4313",
      "tree": "04cf6480ccd6732ab0ffe3d552bd32599390ff65",
      "parents": [
        "c398df30d5caad626ac72bfab0361a7b0f67a661"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:47:03 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:47:04 2009 +0930"
      },
      "message": "module: trim exception table on init free.\n\nIt\u0027s theoretically possible that there are exception table entries\nwhich point into the (freed) init text of modules.  These could cause\nfuture problems if other modules get loaded into that memory and cause\nan exception as we\u0027d see the wrong fixup.  The only case I know of is\nkvm-intel.ko (when CONFIG_CC_OPTIMIZE_FOR_SIZE\u003dn).\n\nAmerigo fixed this long-standing FIXME in the x86 version, but this\npatch is more general.\n\nThis implements trim_init_extable(); most archs are simple since they\nuse the standard lib/extable.c sort code.  Alpha and IA64 use relative\naddresses in their fixups, so thier trimming is a slight variation.\n\nSparc32 is unique; it doesn\u0027t seem to define ARCH_HAS_SORT_EXTABLE,\nyet it defines its own sort_extable() which overrides the one in lib.\nIt doesn\u0027t sort, so we have to mark deleted entries instead of\nactually trimming them.\n\nInspired-by: Amerigo Wang \u003camwang@redhat.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: linux-alpha@vger.kernel.org\nCc: sparclinux@vger.kernel.org\nCc: linux-ia64@vger.kernel.org\n"
    },
    {
      "commit": "c398df30d5caad626ac72bfab0361a7b0f67a661",
      "tree": "aec470204a0770d138f5d1e2a44ba5921e99bc02",
      "parents": [
        "c0e5e10bf380c7a7c4e8c8b7d42e0aba623e76a6"
      ],
      "author": {
        "name": "Amerigo Wang",
        "email": "amwang@redhat.com",
        "time": "Wed Jun 03 21:46:46 2009 -0400"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:47:03 2009 +0930"
      },
      "message": "module: merge module_alloc() finally\n\nAs Christoph Hellwig suggested, module_alloc() actually can be\nunified for i386 and x86_64 (of course, also UML).\n\nSigned-off-by: WANG Cong \u003camwang@redhat.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: \u0027Ingo Molnar\u0027 \u003cmingo@elte.hu\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "c0e5e10bf380c7a7c4e8c8b7d42e0aba623e76a6",
      "tree": "504bfe55e61424ad86cee429714922a39c084923",
      "parents": [
        "0fdc83b950df9e2eb45db6fca9c3d92c66fd5028"
      ],
      "author": {
        "name": "Amerigo Wang",
        "email": "amwang@redhat.com",
        "time": "Wed Jun 03 21:46:28 2009 -0400"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:47:02 2009 +0930"
      },
      "message": "uml module: fix uml build process due to this merge\n\nDue to the previous merge, uml needs to be fixed.\n\nSigned-off-by: WANG Cong \u003camwang@redhat.com\u003e\nCc: Jeff Dike \u003cjdike@addtoit.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "0fdc83b950df9e2eb45db6fca9c3d92c66fd5028",
      "tree": "5ee9b81828c90a9aa8072cd68d7e0a5edbbc4032",
      "parents": [
        "2d5bf28fb9e3c178db4f5536e2fe38d3a5ed7f40"
      ],
      "author": {
        "name": "Amerigo Wang",
        "email": "amwang@redhat.com",
        "time": "Wed Jun 03 21:46:19 2009 -0400"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:47:01 2009 +0930"
      },
      "message": "x86 module: merge the rest functions with macros\n\nMerge the rest functions together, with proper preprocessing directives.\nFinally remove module_{32|64}.c.\n\nSigned-off-by: WANG Cong \u003camwang@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "2d5bf28fb9e3c178db4f5536e2fe38d3a5ed7f40",
      "tree": "30997ca66fea0b95f82b546ecbcd91e249223fb3",
      "parents": [
        "2ead9439f0c6ed03faafe27abe8bc1dd256d117b"
      ],
      "author": {
        "name": "Amerigo Wang",
        "email": "amwang@redhat.com",
        "time": "Wed Jun 03 21:46:09 2009 -0400"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:47:00 2009 +0930"
      },
      "message": "x86 module: merge the same functions in module_32.c and module_64.c\n\nMerge the same functions both in module_32.c and module_64.c into\nmodule.c.\n\nThis is the first step to merge both of them finally.\n\nSigned-off-by: WANG Cong \u003camwang@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "2ead9439f0c6ed03faafe27abe8bc1dd256d117b",
      "tree": "373004102baf74b539dae01edbdabe13e341c310",
      "parents": [
        "fddd520122953550ec2c8b60e7ca0d0f0d115d97"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:58 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:59 2009 +0930"
      },
      "message": "uvesafb: improve parameter handling.\n\n1) Now module_param(..., invbool, ...) requires a bool, and similarly\n   module_param(..., bool, ...) allows it, change pmi_setpal to a bool.\n2) #define param_get_scroll to NULL, since it can never be called (perm\n   argument to module_param_named is 0).\n3) Return -EINVAL from param_set_scroll if the value is bad, so it\u0027s\n   reported.\n\nNote that I don\u0027t think the old fb_get_options() is required for new\ndrivers: the parameters automatically work as uvesafb.XXX\u003d... anyway.\n\nAcked-by: Michał Januszewski \u003cspock@gentoo.org\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "fddd520122953550ec2c8b60e7ca0d0f0d115d97",
      "tree": "d0c45f94bc0054661ee9af41b607815c24a36cff",
      "parents": [
        "d2c123c27db841c6c11a63de9c144823d2b1ba76"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:57 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:58 2009 +0930"
      },
      "message": "module_param: allow \u0027bool\u0027 module_params to be bool, not just int.\n\nImpact: API cleanup\n\nFor historical reasons, \u0027bool\u0027 parameters must be an int, not a bool.\nBut there are around 600 users, so a conversion seems like useless churn.\n\nSo we use __same_type() to distinguish, and handle both cases.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "d2c123c27db841c6c11a63de9c144823d2b1ba76",
      "tree": "ee9de1ca10681c1f632020783e8a31ec61f35c4e",
      "parents": [
        "45fcc70c0b6ee0c508e1fdb5fef735c3546803f4"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:56 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:57 2009 +0930"
      },
      "message": "module_param: add __same_type convenience wrapper for __builtin_types_compatible_p\n\nImpact: new API\n\n__builtin_types_compatible_p() is a little awkward to use: it takes two\ntypes rather than types or variables, and it\u0027s just damn long.\n\n(typeof(type) \u003d\u003d type, so this works on types as well as vars).\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "45fcc70c0b6ee0c508e1fdb5fef735c3546803f4",
      "tree": "15ea34cf77ecd9bbd4f78259ced012f18a26e01b",
      "parents": [
        "9a71af2c3627b379b7c31917a7f6ee0d29bc559b"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:56 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:56 2009 +0930"
      },
      "message": "module_param: split perm field into flags and perm\n\nImpact: cleanup\n\nRather than hack KPARAM_KMALLOCED into the perm field, separate it out.\nSince the perm field was 32 bits and only needs 16, we don\u0027t add bloat.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "9a71af2c3627b379b7c31917a7f6ee0d29bc559b",
      "tree": "c09049a6a4458be91844500d7d5034b63a1cdcc7",
      "parents": [
        "ab8e2eb722f1e5fcbd8181e3e9ef4e95c52124df"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:53 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:56 2009 +0930"
      },
      "message": "module_param: invbool should take a \u0027bool\u0027, not an \u0027int\u0027\n\nIt takes an \u0027int\u0027 for historical reasons, and there are only two\nusers: simply switch it over to bool.\n\nThe other user (uvesafb.c) will get a (harmless-on-x86) warning until\nthe next patch is applied.\n\nCc: Brad Douglas \u003cbrad@neruo.com\u003e\nCc: Michal Januszewski \u003cspock@gentoo.org\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "ab8e2eb722f1e5fcbd8181e3e9ef4e95c52124df",
      "tree": "41db45ac5411221c6e581952f7842004e6db48a5",
      "parents": [
        "8ebf975608aaebd7feb33d77f07ba21a6380e086"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:50 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Fri Jun 12 21:46:53 2009 +0930"
      },
      "message": "cyber2000fb.c: use proper method for stopping unload if CONFIG_ARCH_SHARK\n\nRussell explains the __module_get():\n\u003e cyber2000fb.c does it in its module initialization function\n\u003e to prevent the module (when built for Shark) from being unloaded.  It\n\u003e does this because it\u0027s from the days of 2.2 kernels and no one bothered\n\u003e writing the module unload support for Shark.\n\nSince 2.4, the correct answer has been to not define an unload fn.\n\nCc: Russell King \u003crmk+lkml@arm.linux.org.uk\u003e\nCc: alex@shark-linux.de\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "63997775b795f97ef51f3e56bc3abc9edc04bbb0",
      "tree": "607519910f92b1101fbe0223c301c503001bc0ef",
      "parents": [
        "8ebf975608aaebd7feb33d77f07ba21a6380e086"
      ],
      "author": {
        "name": "Steven Whitehouse",
        "email": "swhiteho@redhat.com",
        "time": "Fri Jun 12 08:49:20 2009 +0100"
      },
      "committer": {
        "name": "Steven Whitehouse",
        "email": "swhiteho@redhat.com",
        "time": "Fri Jun 12 08:49:20 2009 +0100"
      },
      "message": "GFS2: Add tracepoints\n\nThis patch adds the ability to trace various aspects of the GFS2\nfilesystem. The trace points are divided into three groups,\nglocks, logging and bmap. These points have been chosen because\nthey allow inspection of the major internal functions of GFS2\nand they are also generic enough that they are unlikely to need\nany major changes as the filesystem evolves.\n\nSigned-off-by: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\n"
    },
    {
      "commit": "1260866a271abc84274345580f3d613d3bceff87",
      "tree": "4e03bf184965f1ec0c097779c430d2404d82b979",
      "parents": [
        "8c5dd8f43367f4f266dd616f11658005bc2d20ef"
      ],
      "author": {
        "name": "Catalin Marinas",
        "email": "catalin.marinas@arm.com",
        "time": "Mon May 11 13:22:00 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jun 12 09:21:33 2009 +0200"
      },
      "message": "x86: Provide _sdata in the vmlinux.lds.S file\n\n_sdata is a common symbol defined by many architectures and made\navailable to the kernel via asm-generic/sections.h. Kmemleak uses this\nsymbol when scanning the data sections.\n\n[ Impact: add new global symbol ]\n\nSigned-off-by: Catalin Marinas \u003ccatalin.marinas@arm.com\u003e\nLKML-Reference: \u003c20090511122105.26556.96593.stgit@pc1117.cambridge.arm.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "8ebf975608aaebd7feb33d77f07ba21a6380e086",
      "tree": "6de4ee1dd3ede890169644ea586ed7c8c9d8f7b2",
      "parents": [
        "4b4f1d017815f96737ca4a62f90e5a1f0b9f02d6"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Thu Jun 11 20:00:41 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 20:14:23 2009 -0700"
      },
      "message": "block: fix kernel-doc in recent block/ changes\n\nFix kernel-doc warnings in recently changed block/ source code.\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4b4f1d017815f96737ca4a62f90e5a1f0b9f02d6",
      "tree": "c95ae92ec01cabf6c2a40d31a31da6a4d9256816",
      "parents": [
        "875287caa067492779670f5fb3b98ec8dcfe2cb0",
        "aa7dfb8954ccf49e026ba13d12991a4eb7defb96"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 20:05:37 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 20:05:37 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (87 commits)\n  nilfs2: get rid of bd_mount_sem use from nilfs\n  nilfs2: correct exclusion control in nilfs_remount function\n  nilfs2: simplify remaining sget() use\n  nilfs2: get rid of sget use for checking if current mount is present\n  nilfs2: get rid of sget use for acquiring nilfs object\n  nilfs2: remove meaningless EBUSY case from nilfs_get_sb function\n  remove the call to -\u003ewrite_super in __sync_filesystem\n  nilfs2: call nilfs2_write_super from nilfs2_sync_fs\n  jffs2: call jffs2_write_super from jffs2_sync_fs\n  ufs: add -\u003esync_fs\n  sysv: add -\u003esync_fs\n  hfsplus: add -\u003esync_fs\n  hfs: add -\u003esync_fs\n  fat: add -\u003esync_fs\n  ext2: add -\u003esync_fs\n  exofs: add -\u003esync_fs\n  bfs: add -\u003esync_fs\n  affs: add -\u003esync_fs\n  sanitize -\u003efsync() for affs\n  repair bfs_write_inode(), switch bfs to simple_fsync()\n  ...\n"
    },
    {
      "commit": "875287caa067492779670f5fb3b98ec8dcfe2cb0",
      "tree": "258037cc7678cfaeb738b970b4791ea10e193c96",
      "parents": [
        "aee74f3bb3f4fb5dbeae8c1947c6d8ebdc19ee01",
        "193e98401a89707ea374e9c32c1b9a5a9dd87a48"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 20:05:08 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 20:05:08 2009 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu:\n  m68knommu: remove unecessary include of thread_info.h in entry.S\n  m68knommu: enumerate INIT_THREAD fields properly\n  headers_check fix: m68k, swab.h\n  arch/m68knommu: Convert #ifdef DEBUG printk(KERN_DEBUG to pr_debug(\n  m68knommu: remove obsolete reset code\n  m68knommu: move CPU reset code for the 5272 ColdFire into its platform code\n  m68knommu: move CPU reset code for the 528x ColdFire into its platform code\n  m68knommu: move CPU reset code for the 527x ColdFire into its platform code\n  m68knommu: move CPU reset code for the 523x ColdFire into its platform code\n  m68knommu: move CPU reset code for the 520x ColdFire into its platform code\n  m68knommu: add CPU reset code for the 532x ColdFire\n  m68knommu: add CPU reset code for the 5249 ColdFire\n  m68knommu: add CPU reset code for the 5206e ColdFire\n  m68knommu: add CPU reset code for the 5206 ColdFire\n  m68knommu: add CPU reset code for the 5407 ColdFire\n  m68knommu: add CPU reset code for the 5307 ColdFire\n  m68knommu: merge system reset for code ColdFire 523x family\n  m68knommu: fix system reset for ColdFire 527x family\n"
    },
    {
      "commit": "aee74f3bb3f4fb5dbeae8c1947c6d8ebdc19ee01",
      "tree": "fd86fd5a4f8adf8d185c1bfb8972253570958cdf",
      "parents": [
        "12274e96b42884f043dfaa87eb1e5e10281bfac3"
      ],
      "author": {
        "name": "Yinghai Lu",
        "email": "yinghai@kernel.org",
        "time": "Thu Jun 11 15:09:00 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 20:04:37 2009 -0700"
      },
      "message": "kvm: remove the duplicated cpumask_clear\n\nzalloc_cpumask_var already cleared it.\n\nSigned-off-by: Yinghai Lu \u003cyinghai@kernel.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "12274e96b42884f043dfaa87eb1e5e10281bfac3",
      "tree": "7171d6a49dbac49826670128e114c52e7539782d",
      "parents": [
        "e14112d1bd5e193166b54be19119cf6440470560"
      ],
      "author": {
        "name": "Yinghai Lu",
        "email": "yinghai@kernel.org",
        "time": "Thu Jun 11 15:07:48 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 20:04:36 2009 -0700"
      },
      "message": "x86: use zalloc_cpumask_var in arch_early_irq_init\n\nSo we make sure MAXSMP gets a cleared cpumask\n\nSigned-off-by: Yinghai Lu \u003cyinghai@kernel.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e14112d1bd5e193166b54be19119cf6440470560",
      "tree": "7e38942535b91872b5f9869a1e6597add34c60cc",
      "parents": [
        "a525890cb6a2949b644d212ae290b658967d3919"
      ],
      "author": {
        "name": "Stephen Rothwell",
        "email": "sfr@canb.auug.org.au",
        "time": "Fri Jun 12 10:14:22 2009 +1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 11 20:03:13 2009 -0700"
      },
      "message": "perfcounters: remove powerpc definitions of perf_counter_do_pending\n\nCommit 925d519ab82b6dd7aca9420d809ee83819c08db2 (\"perf_counter:\nunify and fix delayed counter wakeup\") added global definitions.\n\nSigned-off-by: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nAcked-by: Paul Mackerras \u003cpaulus@samba.org\u003e\nAcked-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aa7dfb8954ccf49e026ba13d12991a4eb7defb96",
      "tree": "ff2d6cf81629322906bd0cea1423e9efe516ffee",
      "parents": [
        "e59399d0102c1813cec48db5cebe1750313f88a0"
      ],
      "author": {
        "name": "Ryusuke Konishi",
        "email": "konishi.ryusuke@lab.ntt.co.jp",
        "time": "Mon Jun 08 01:39:33 2009 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:18 2009 -0400"
      },
      "message": "nilfs2: get rid of bd_mount_sem use from nilfs\n\nThis will remove every bd_mount_sem use in nilfs.\n\nThe intended exclusion control was replaced by the previous patch\n(\"nilfs2: correct exclusion control in nilfs_remount function\") for\nnilfs_remount(), and this patch will replace remains with a new mutex\nthat this inserts in nilfs object.\n\nSigned-off-by: Ryusuke Konishi \u003ckonishi.ryusuke@lab.ntt.co.jp\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e59399d0102c1813cec48db5cebe1750313f88a0",
      "tree": "cd4fde6b5c442ede5d00b9640d3a545f847aeb8c",
      "parents": [
        "6dd4740662405a68bb229ac2b9e0aeaaf2188bf2"
      ],
      "author": {
        "name": "Ryusuke Konishi",
        "email": "konishi.ryusuke@lab.ntt.co.jp",
        "time": "Mon Jun 08 01:39:32 2009 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:18 2009 -0400"
      },
      "message": "nilfs2: correct exclusion control in nilfs_remount function\n\nnilfs_remount() changes mount state of a superblock instance.  Even\nthough nilfs accesses other superblock instances during mount or\nremount, the mount state was not properly protected in\nnilfs_remount().\n\nMoreover, nilfs_remount() has a lock order reversal problem;\nnilfs_get_sb() holds:\n\n  1. bdev-\u003ebd_mount_sem\n  2. sb-\u003es_umount  (sget acquires)\n\nand nilfs_remount() holds:\n\n  1. sb-\u003es_umount  (locked by the caller in vfs)\n  2. bdev-\u003ebd_mount_sem\n\nTo avoid these problems, this patch divides a semaphore protecting\nsuper block instances from nilfs-\u003ens_sem, and applies it to the mount\nstate protection in nilfs_remount().\n\nWith this change, bd_mount_sem use is removed from nilfs_remount() and\nthe lock order reversal will be resolved.  And the new rw-semaphore,\nnilfs-\u003ens_super_sem will properly protect the mount state except the\nmodification from nilfs_error function.\n\nSigned-off-by: Ryusuke Konishi \u003ckonishi.ryusuke@lab.ntt.co.jp\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6dd4740662405a68bb229ac2b9e0aeaaf2188bf2",
      "tree": "36e6ae2a095613be1c36e8828ee9471e60c09de6",
      "parents": [
        "3f82ff55168e92859119bf348e9e0bd6714d2fea"
      ],
      "author": {
        "name": "Ryusuke Konishi",
        "email": "konishi.ryusuke@lab.ntt.co.jp",
        "time": "Mon Jun 08 01:39:31 2009 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:18 2009 -0400"
      },
      "message": "nilfs2: simplify remaining sget() use\n\nThis simplifies the test function passed on the remaining sget()\ncallsite in nilfs.\n\nInstead of checking mount type (i.e. ro-mount/rw-mount/snapshot mount)\nin the test function passed to sget(), this patch first looks up the\nnilfs_sb_info struct which the given mount type matches, and then\nacquires the super block instance holding the nilfs_sb_info.\n\nSigned-off-by: Ryusuke Konishi \u003ckonishi.ryusuke@lab.ntt.co.jp\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3f82ff55168e92859119bf348e9e0bd6714d2fea",
      "tree": "f35bf723b02d6fe8c101252aa4a2c0e0172fd4aa",
      "parents": [
        "33c8e57c86d1bd1548c12a4f7c4bceb94b862cca"
      ],
      "author": {
        "name": "Ryusuke Konishi",
        "email": "konishi.ryusuke@lab.ntt.co.jp",
        "time": "Mon Jun 08 01:39:30 2009 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:17 2009 -0400"
      },
      "message": "nilfs2: get rid of sget use for checking if current mount is present\n\nThis stops using sget() for checking if an r/w-mount or an r/o-mount\nexists on the device.  This elimination uses a back pointer to the\ncurrent mount added to nilfs object.\n\nSigned-off-by: Ryusuke Konishi \u003ckonishi.ryusuke@lab.ntt.co.jp\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "33c8e57c86d1bd1548c12a4f7c4bceb94b862cca",
      "tree": "8e2052a81dc1036e64d78da1082ab6af01ae4bbd",
      "parents": [
        "81fc20bd0e75ba6357bce2403767d7c2585d8f28"
      ],
      "author": {
        "name": "Ryusuke Konishi",
        "email": "konishi.ryusuke@lab.ntt.co.jp",
        "time": "Mon Jun 08 01:39:29 2009 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:17 2009 -0400"
      },
      "message": "nilfs2: get rid of sget use for acquiring nilfs object\n\nThis will change the way to obtain nilfs object in nilfs_get_sb()\nfunction.\n\nPreviously, a preliminary sget() call was performed, and the nilfs\nobject was acquired from a super block instance found by the sget()\ncall.\n\nThis patch, instead, instroduces a new dedicated function\nfind_or_create_nilfs(); as the name implies, the function finds an\nexistent nilfs object from a global list or creates a new one if no\nobject is found on the device.\n\nSigned-off-by: Ryusuke Konishi \u003ckonishi.ryusuke@lab.ntt.co.jp\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "81fc20bd0e75ba6357bce2403767d7c2585d8f28",
      "tree": "e3680d7c8184da3cbb4b7efe83fe99626d08cd68",
      "parents": [
        "0c95ee190e1dea60c55c834d14695341085c9b7b"
      ],
      "author": {
        "name": "Ryusuke Konishi",
        "email": "konishi.ryusuke@lab.ntt.co.jp",
        "time": "Mon Jun 08 01:39:28 2009 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:17 2009 -0400"
      },
      "message": "nilfs2: remove meaningless EBUSY case from nilfs_get_sb function\n\nThe following EBUSY case in nilfs_get_sb() is meaningless.  Indeed,\nthis error code is never returned to the caller.\n\n    if (!s-\u003es_root) {\n          ...\n    } else if (!(s-\u003es_flags \u0026 MS_RDONLY)) {\n        err \u003d -EBUSY;\n    }\n\nThis simply removes the else case.\n\nSigned-off-by: Ryusuke Konishi \u003ckonishi.ryusuke@lab.ntt.co.jp\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0c95ee190e1dea60c55c834d14695341085c9b7b",
      "tree": "2d0899f7aa04acc0679a760e6710c8605745ac92",
      "parents": [
        "d731e06323cb705003e4172ec209e469be4c18e1"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:08:54 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:17 2009 -0400"
      },
      "message": "remove the call to -\u003ewrite_super in __sync_filesystem\n\nNow that all filesystems provide -\u003esync_fs methods we can change\n__sync_filesystem to only call -\u003esync_fs.\n\nThis gives us a clear separation between periodic writeouts which\nare driven by -\u003ewrite_super and data integrity syncs that go\nthrough -\u003esync_fs. (modulo file_fsync which is also going away)\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d731e06323cb705003e4172ec209e469be4c18e1",
      "tree": "636b1b2f7aaea08fa7be27b3d908fe6dbe6ec70b",
      "parents": [
        "d579ed00aa96a7f7486978540a0d7cecaff742ae"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:08:36 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:17 2009 -0400"
      },
      "message": "nilfs2: call nilfs2_write_super from nilfs2_sync_fs\n\nThe call to -\u003ewrite_super from __sync_filesystem will go away, so make\nsure nilfs2 performs the same actions from inside -\u003esync_fs.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d579ed00aa96a7f7486978540a0d7cecaff742ae",
      "tree": "a1c988e4f97ea9e3750779ff9cfa0f12d95386e4",
      "parents": [
        "8c8006564a58d0ea912bf7f2d0a758d97e4b464f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:08:21 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:16 2009 -0400"
      },
      "message": "jffs2: call jffs2_write_super from jffs2_sync_fs\n\nThe call to -\u003ewrite_super from __sync_filesystem will go away, so make\nsure jffs2 performs the same actions from inside -\u003esync_fs.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "8c8006564a58d0ea912bf7f2d0a758d97e4b464f",
      "tree": "696dd67b5b2c3e303fe17bf992ced9ccb4b34806",
      "parents": [
        "ad43ffdeea0a7bd3e6036c4aeec2e6699aef8ac7"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:08:05 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:16 2009 -0400"
      },
      "message": "ufs: add -\u003esync_fs\n\nAdd a -\u003esync_fs method for data integrity syncs, and reimplement\n-\u003ewrite_super ontop of it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ad43ffdeea0a7bd3e6036c4aeec2e6699aef8ac7",
      "tree": "dcab8568dca72f130287dbe356c0fe0d7afe4ab7",
      "parents": [
        "7fbc6df0e7a561a313f49faa77829d5de45a97f8"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:07:45 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:16 2009 -0400"
      },
      "message": "sysv: add -\u003esync_fs\n\nAdd a -\u003esync_fs method for data integrity syncs, and reimplement\n-\u003ewrite_super ontop of it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7fbc6df0e7a561a313f49faa77829d5de45a97f8",
      "tree": "c19d60ff362527ce66489d2fdbecc34a89b0a0ef",
      "parents": [
        "58bc5bbb873eb5d86126a3fd3ff02aaa69ec15d0"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:05:12 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:16 2009 -0400"
      },
      "message": "hfsplus: add -\u003esync_fs\n\nAdd a -\u003esync_fs method for data integrity syncs, and reimplement\n-\u003ewrite_super ontop of it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "58bc5bbb873eb5d86126a3fd3ff02aaa69ec15d0",
      "tree": "ecc9df2d1205d031cdca77f0d2fb4cd588621f3e",
      "parents": [
        "f83d6d46e7adf241a064a4a425e5cd8a8fd8925f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:04:54 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:15 2009 -0400"
      },
      "message": "hfs: add -\u003esync_fs\n\nAdd a -\u003esync_fs method for data integrity syncs.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f83d6d46e7adf241a064a4a425e5cd8a8fd8925f",
      "tree": "3ebefc6dc784ec0156fd3a074b694630b5a88d88",
      "parents": [
        "40f31dd47e7c3d15af1f9845eda0fa0c4c33f32f"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:04:35 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:15 2009 -0400"
      },
      "message": "fat: add -\u003esync_fs\n\nAdd a -\u003esync_fs method for data integrity syncs.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "40f31dd47e7c3d15af1f9845eda0fa0c4c33f32f",
      "tree": "f711eb7629ced0f4ffd3cfb47eb69a9717143559",
      "parents": [
        "80e09fb942d38beb19dcffbeb14d496beeb0a989"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:04:17 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:15 2009 -0400"
      },
      "message": "ext2: add -\u003esync_fs\n\nAdd a -\u003esync_fs method for data integrity syncs, and reimplement\n-\u003ewrite_super ontop of it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "80e09fb942d38beb19dcffbeb14d496beeb0a989",
      "tree": "cdaa5cf4baf745ee4c83b8e03cb75581e7ea1ffa",
      "parents": [
        "561e47ce7244168788d4ecef9a2271df204b3c89"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:03:58 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:15 2009 -0400"
      },
      "message": "exofs: add -\u003esync_fs\n\nAdd a -\u003esync_fs method for data integrity syncs, and reimplement\n-\u003ewrite_super ontop of it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "561e47ce7244168788d4ecef9a2271df204b3c89",
      "tree": "b587db305924ff4fea0ca1ad18b341dfda65281e",
      "parents": [
        "e28964365faf3b9961695eb62b48cbc9f2a2a245"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:03:38 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:14 2009 -0400"
      },
      "message": "bfs: add -\u003esync_fs\n\nAdd a -\u003esync_fs method for data integrity syncs, and reimplement\n-\u003ewrite_super ontop of it.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "e28964365faf3b9961695eb62b48cbc9f2a2a245",
      "tree": "413a1bfac3009e2f9a370b8f709c37b1ea8878d0",
      "parents": [
        "c475879556a8602bbe2faa9a06f6e5fcc8c05bb2"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Mon Jun 08 10:03:15 2009 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:14 2009 -0400"
      },
      "message": "affs: add -\u003esync_fs\n\nAdd a -\u003esync_fs method for data integrity syncs.  Factor out common code\nbetween affs_put_super, affs_write_super and the new affs_sync_fs into\na helper.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c475879556a8602bbe2faa9a06f6e5fcc8c05bb2",
      "tree": "9d7e4882a08171d1ff1b84e3f02d3e604756815b",
      "parents": [
        "4427f0c36e22e2cd6696b2fe7643e9756a14b3d3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 08 01:22:00 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:14 2009 -0400"
      },
      "message": "sanitize -\u003efsync() for affs\n\nunfortunately, for affs (especially for affs directories) we have\nno real way to keep track of metadata ownership.  So we have to\ndo more or less what file_fsync() does, but we do *not* need to\ncall write_super() there.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4427f0c36e22e2cd6696b2fe7643e9756a14b3d3",
      "tree": "1d3035350178d974a1099b7795dc4a5f64b29fe8",
      "parents": [
        "224c886643e52e6b4c1143489cd0b289b6c03976"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 08 01:15:58 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:14 2009 -0400"
      },
      "message": "repair bfs_write_inode(), switch bfs to simple_fsync()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "224c886643e52e6b4c1143489cd0b289b6c03976",
      "tree": "62b7ca28fa19649acc39eb25f9b9c439a07ba87b",
      "parents": [
        "ffdc9064f8b4fa9db37a7d5180f41cce2ea2b7ad"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 08 00:46:40 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:14 2009 -0400"
      },
      "message": "Fix adfs GET_FRAG_ID() on big-endian\n\nMissing conversion to host-endian before doing shifts\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ffdc9064f8b4fa9db37a7d5180f41cce2ea2b7ad",
      "tree": "a7cc3f3940211682289983865e453b4d7083554b",
      "parents": [
        "bea6b64c277f0824cdaea6190209b26a164419d6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jun 08 00:44:42 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:13 2009 -0400"
      },
      "message": "repair adfs -\u003ewrite_inode(), switch to simple_fsync()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "bea6b64c277f0824cdaea6190209b26a164419d6",
      "tree": "0eebdf31c3faf13d5ed7cc81f9e5e253dd4afe54",
      "parents": [
        "90de066443a8632bb42fed0a8216313d7da07aba"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 07 15:44:50 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:13 2009 -0400"
      },
      "message": "switch omfs to simple_fsync()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "90de066443a8632bb42fed0a8216313d7da07aba",
      "tree": "7ee2fb0e0a87fd83cf7cce88e1044293fc438fc0",
      "parents": [
        "a932801543fe74050ebee07fde082234c46b624f"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 07 15:40:27 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:13 2009 -0400"
      },
      "message": "switch udf to simple_fsync()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a932801543fe74050ebee07fde082234c46b624f",
      "tree": "2cda35832500fd0003a467b685fd9fb82968db73",
      "parents": [
        "05459ca81ac3064cb040d983342bc453cccec458"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jun 07 15:35:18 2009 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Jun 11 21:36:13 2009 -0400"
      },
      "message": "switch ufs to simple_fsync()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    }
  ],
  "next": "05459ca81ac3064cb040d983342bc453cccec458"
}
