)]}'
{
  "log": [
    {
      "commit": "c55d267de274d308927b60c3e740c1a826832317",
      "tree": "21b53a8c725d9f9650f60d94b349459d5b8dae10",
      "parents": [
        "61ef46fd45c3c62dc7c880a45dd2aa841b9af8fb",
        "bc898c97f7ba24def788d9f80786cf028a197122"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 17 17:54:40 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 17 17:54:40 2011 -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: (170 commits)\n  [SCSI] scsi_dh_rdac: Add MD36xxf into device list\n  [SCSI] scsi_debug: add consecutive medium errors\n  [SCSI] libsas: fix ata list corruption issue\n  [SCSI] hpsa: export resettable host attribute\n  [SCSI] hpsa: move device attributes to avoid forward declarations\n  [SCSI] scsi_debug: Logical Block Provisioning (SBC3r26)\n  [SCSI] sd: Logical Block Provisioning update\n  [SCSI] Include protection operation in SCSI command trace\n  [SCSI] hpsa: fix incorrect PCI IDs and add two new ones (2nd try)\n  [SCSI] target: Fix volume size misreporting for volumes \u003e 2TB\n  [SCSI] bnx2fc: Broadcom FCoE offload driver\n  [SCSI] fcoe: fix broken fcoe interface reset\n  [SCSI] fcoe: precedence bug in fcoe_filter_frames()\n  [SCSI] libfcoe: Remove stale fcoe-netdev entries\n  [SCSI] libfcoe: Move FCOE_MTU definition from fcoe.h to libfcoe.h\n  [SCSI] libfc: introduce __fc_fill_fc_hdr that accepts fc_hdr as an argument\n  [SCSI] fcoe, libfc: initialize EM anchors list and then update npiv EMs\n  [SCSI] Revert \"[SCSI] libfc: fix exchange being deleted when the abort itself is timed out\"\n  [SCSI] libfc: Fixing a memory leak when destroying an interface\n  [SCSI] megaraid_sas: Version and Changelog update\n  ...\n\nFix up trivial conflicts due to whitespace differences in\ndrivers/scsi/libsas/{sas_ata.c,sas_scsi_host.c}\n"
    },
    {
      "commit": "0aeea18964173715a1037034ef6838198f319319",
      "tree": "62ff402a41a675f0269bf5172d14b7db8c4e47ee",
      "parents": [
        "9179746652faf0aba07b8b7f770dcf29892a24c6"
      ],
      "author": {
        "name": "Lukas Czerner",
        "email": "lczerner@redhat.com",
        "time": "Fri Mar 11 10:23:53 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Mar 11 15:36:08 2011 +0100"
      },
      "message": "block: fix mis-synchronisation in blkdev_issue_zeroout()\n\nBZ29402\nhttps://bugzilla.kernel.org/show_bug.cgi?id\u003d29402\n\nWe can hit serious mis-synchronization in bio completion path of\nblkdev_issue_zeroout() leading to a panic.\n\nThe problem is that when we are going to wait_for_completion() in\nblkdev_issue_zeroout() we check if the bb.done equals issued (number of\nsubmitted bios). If it does, we can skip the wait_for_completition()\nand just out of the function since there is nothing to wait for.\nHowever, there is a ordering problem because bio_batch_end_io() is\ncalling atomic_inc(\u0026bb-\u003edone) before complete(), hence it might seem to\nblkdev_issue_zeroout() that all bios has been completed and exit. At\nthis point when bio_batch_end_io() is going to call complete(bb-\u003ewait),\nbb and wait does not longer exist since it was allocated on stack in\nblkdev_issue_zeroout() \u003d\u003d\u003e panic!\n\n(thread 1)                      (thread 2)\nbio_batch_end_io()              blkdev_issue_zeroout()\n  if(bb) {                      ...\n    if (bb-\u003eend_io)             ...\n      bb-\u003eend_io(bio, err);     ...\n    atomic_inc(\u0026bb-\u003edone);      ...\n    ...                         while (issued !\u003d atomic_read(\u0026bb.done))\n    ...                         (let issued \u003d\u003d bb.done)\n    ...                         (do the rest of the function)\n    ...                         return ret;\n    complete(bb-\u003ewait);\n    ^^^^^^^^\n    panic\n\nWe can fix this easily by simplifying bio_batch and completion counting.\n\nAlso remove bio_end_io_t *end_io since it is not used.\n\nSigned-off-by: Lukas Czerner \u003clczerner@redhat.com\u003e\nReported-by: Eric Whitney \u003ceric.whitney@hp.com\u003e\nTested-by: Eric Whitney \u003ceric.whitney@hp.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCC: Dmitry Monakhov \u003cdmonakhov@openvz.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "255bb490c8c27eed484d538efe6ef6a7473bd3f6",
      "tree": "630289b9de253a1f0575f29d2de019494016ff79",
      "parents": [
        "1654e7411a1ad4999fe7890ef51d2a2bbb1fcf76"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 02 08:48:06 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 08:48:06 2011 -0500"
      },
      "message": "block: blk-flush shouldn\u0027t call directly into q-\u003erequest_fn() __blk_run_queue()\n\nblk-flush decomposes a flush into sequence of multiple requests.  On\ncompletion of a request, the next one is queued; however, block layer\nmust not implicitly call into q-\u003erequest_fn() directly from completion\npath.  This makes the queue behave unexpectedly when seen from the\ndrivers and violates the assumption that q-\u003erequest_fn() is called\nwith process context + queue_lock.\n\nThis patch makes blk-flush the following two changes to make sure\nq-\u003erequest_fn() is not called directly from request completion path.\n\n- blk_flush_complete_seq_end_io() now asks __blk_run_queue() to always\n  use kblockd instead of calling directly into q-\u003erequest_fn().\n\n- queue_next_fseq() uses ELEVATOR_INSERT_REQUEUE instead of\n  ELEVATOR_INSERT_FRONT so that elv_insert() doesn\u0027t try to unplug the\n  request queue directly.\n\nReported by Jan in the following threads.\n\n http://thread.gmane.org/gmane.linux.ide/48778\n http://thread.gmane.org/gmane.linux.ide/48786\n\nstable: applicable to v2.6.37.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReported-by: Jan Beulich \u003cJBeulich@novell.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "1654e7411a1ad4999fe7890ef51d2a2bbb1fcf76",
      "tree": "c8071cf8cc1aef9e776697b72aaca5a22a47c3d7",
      "parents": [
        "291d24f6d9e7bbef81454fade8a44720665c7302"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 02 08:48:05 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Mar 02 08:48:05 2011 -0500"
      },
      "message": "block: add @force_kblockd to __blk_run_queue()\n\n__blk_run_queue() automatically either calls q-\u003erequest_fn() directly\nor schedules kblockd depending on whether the function is recursed.\nblk-flush implementation needs to be able to explicitly choose\nkblockd.  Add @force_kblockd.\n\nAll the current users are converted to specify %false for the\nparameter and this patch doesn\u0027t introduce any behavior change.\n\nstable: This is prerequisite for fixing ide oops caused by the new\n        blk-flush implementation.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Jan Beulich \u003cJBeulich@novell.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "291d24f6d9e7bbef81454fade8a44720665c7302",
      "tree": "8e23a24b51e9a0106cbd7e5375e53a972794b8cd",
      "parents": [
        "450adcbe518ab3a3953d8475309525d22de77cba"
      ],
      "author": {
        "name": "Ben Hutchings",
        "email": "ben@decadent.org.uk",
        "time": "Tue Mar 01 13:45:24 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 13:45:24 2011 -0500"
      },
      "message": "block: fix kernel-doc format for blkdev_issue_zeroout\n\nSigned-off-by: Ben Hutchings \u003cben@decadent.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "450adcbe518ab3a3953d8475309525d22de77cba",
      "tree": "352fd47d75b86804e590fd88c09f953a798ba8b0",
      "parents": [
        "3e1f2356ce231488dc1fa844e5ce91bcb59fc2a1"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Mar 01 13:40:54 2011 -0500"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 01 13:41:53 2011 -0500"
      },
      "message": "blk-throttle: Do not use kblockd workqueue for throtl work\n\no Dominik Klein reported a system hang issue while doing some blkio\n  throttling testing.\n\n  https://lkml.org/lkml/2011/2/24/173\n\no Some tracing revealed that CFQ was not dispatching any more jobs as\n  queue unplug was not happening. And queue unplug was not happening\n  because unplug work was not being called as there was one throttling\n  work on same cpu which as not finished yet. And throttling work had not\n  finished as it was tyring to dispatch a bio to CFQ but all the request\n  descriptors were consume to it was put to sleep.\n\no So basically it is a cyclic dependecny between CFQ unplug work and\n  throtl dispatch work. Tejun suggested that use separate workqueue for\n  such cases.\n\no This patch uses a separate workqueue for throttle related work and\n  does not rely on kblockd workqueue anymore.\n\nCc: stable@kernel.org\nReported-by: Dominik Klein \u003cdk@in-telegence.net\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "638691a7a46a4ae9a7b56c603299e42d7f6e722e",
      "tree": "f744b3fbdd4704ef9ae122b67a14785b4a7a6b65",
      "parents": [
        "0a93ea2e897bd793cc0aaaddc397eff32ac8d6fe",
        "f0b4f7e2f29af678bd9af43422c537dcb6008603"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 25 11:13:26 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 25 11:13:26 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://neil.brown.name/md\n\n* \u0027for-linus\u0027 of git://neil.brown.name/md:\n  md: Fix - again - partition detection when array becomes active\n  Fix over-zealous flush_disk when changing device size.\n  md: avoid spinlock problem in blk_throtl_exit\n  md: correctly handle probe of an \u0027mdp\u0027 device.\n  md: don\u0027t set_capacity before array is active.\n  md: Fix raid1-\u003eraid0 takeover\n"
    },
    {
      "commit": "3c522cedb572bb8d2e4867f358bdaa7d0c53d88c",
      "tree": "b348cabd2574638702f9abcccd0b8b711b136162",
      "parents": [
        "dcace5ac85c628af21878a1fa151e5e6403fb8eb"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Thu Feb 24 15:45:41 2011 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 24 08:54:21 2011 -0800"
      },
      "message": "block: fix refcounting in BLKBSZSET\n\nAdam Kovari and others reported that disconnecting an USB drive with\nan ntfs-3g filesystem would cause \"kernel BUG at fs/inode.c:1421!\" to\nbe triggered.\n\nThe BUG could be traced back to ioctl(BLKBSZSET), which would\nerroneously decrement the refcount on the bdev.  This is because\nblkdev_get() expects the refcount to be already incremented and either\nreturns success or decrements the refcount and returns an error.\n\nThe bug was introduced by e525fd89 (block: make blkdev_get/put()\nhandle exclusive access), which didn\u0027t take into account this behavior\nof blkdev_get().\n\nThis fixes\n  https://bugzilla.kernel.org/show_bug.cgi?id\u003d29202\n(and likely 29792 too)\n\nReported-by: Adam Kovari \u003ckovariadam@gmail.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "93b270f76e7ef3b81001576860c2701931cdc78b",
      "tree": "abaca0e4d3e86721815498fafd06295dd9cfd002",
      "parents": [
        "da9cf5050a2e3dbc3cf26a8d908482eb4485ed49"
      ],
      "author": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Feb 24 17:25:47 2011 +1100"
      },
      "committer": {
        "name": "NeilBrown",
        "email": "neilb@suse.de",
        "time": "Thu Feb 24 17:25:47 2011 +1100"
      },
      "message": "Fix over-zealous flush_disk when changing device size.\n\nThere are two cases when we call flush_disk.\nIn one, the device has disappeared (check_disk_change) so any\ndata will hold becomes irrelevant.\nIn the oter, the device has changed size (check_disk_size_change)\nso data we hold may be irrelevant.\n\nIn both cases it makes sense to discard any \u0027clean\u0027 buffers,\nso they will be read back from the device if needed.\n\nIn the former case it makes sense to discard \u0027dirty\u0027 buffers\nas there will never be anywhere safe to write the data.  In the\nsecond case it *does*not* make sense to discard dirty buffers\nas that will lead to file system corruption when you simply enlarge\nthe containing devices.\n\nflush_disk calls __invalidate_devices.\n__invalidate_device calls both invalidate_inodes and invalidate_bdev.\n\ninvalidate_inodes *does* discard I_DIRTY inodes and this does lead\nto fs corruption.\n\ninvalidate_bev *does*not* discard dirty pages, but I don\u0027t really care\nabout that at present.\n\nSo this patch adds a flag to __invalidate_device (calling it\n__invalidate_device2) to indicate whether dirty buffers should be\nkilled, and this is passed to invalidate_inodes which can choose to\nskip dirty inodes.\n\nflusk_disk then passes true from check_disk_change and false from\ncheck_disk_size_change.\n\ndm avoids tripping over this problem by calling i_size_write directly\nrathher than using check_disk_size_change.\n\nmd does use check_disk_size_change and so is affected.\n\nThis regression was introduced by commit 608aeef17a which causes\ncheck_disk_size_change to call flush_disk, so it is suitable for any\nkernel since 2.6.27.\n\nCc: stable@kernel.org\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nCc: Andrew Patterson \u003candrew.patterson@hp.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nSigned-off-by: NeilBrown \u003cneilb@suse.de\u003e\n"
    },
    {
      "commit": "79775567e0439ca47eb9f501e52c4b713d44cf89",
      "tree": "1cb890e0a061b007ae10bd281a60ada60a6d2bb1",
      "parents": [
        "751b2a7d623ead9e55f751a6087efeab454b5659"
      ],
      "author": {
        "name": "Hannes Reinecke",
        "email": "hare@suse.de",
        "time": "Tue Jan 18 10:13:13 2011 +0100"
      },
      "committer": {
        "name": "James Bottomley",
        "email": "James.Bottomley@suse.de",
        "time": "Sat Feb 12 10:33:37 2011 -0600"
      },
      "message": "[SCSI] block: improve detail in I/O error messages\n\nClassify severity of I/O errors for target, nexus, and\ntransport errors.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Hannes Reinecke \u003chare@suse.de\u003e\nAcked-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: James Bottomley \u003cJames.Bottomley@suse.de\u003e\n"
    },
    {
      "commit": "aceb91cd351bc3a19a783c901fe8a8070d5f6fa9",
      "tree": "a0863e940a77ae10d3c8b391488e29a8245b31be",
      "parents": [
        "ae8eed2d0906bf0d8eb0c2a4651676a41d361297",
        "b8cf0e0e552ca48e9a00f518aeb4f5e03984022b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 09 11:45:21 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 09 11:45:21 2011 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  cdrom: support devices that have check_events but not media_changed\n  cfq-iosched: Don\u0027t wait if queue already has requests.\n  blkio-throttle: Avoid calling blkiocg_lookup_group() for root group\n  cfq: rename a function to give it more appropriate name\n  cciss: make cciss_revalidate not loop through CISS_MAX_LUNS volumes unnecessarily.\n  drivers/block/aoe/Makefile: replace the use of \u003cmodule\u003e-objs with \u003cmodule\u003e-y\n  loop: queue_lock NULL pointer derefence in blk_throtl_exit\n  drivers/block/Makefile: replace the use of \u003cmodule\u003e-objs with \u003cmodule\u003e-y\n  blktrace: Don\u0027t output messages if NOTIFY isn\u0027t set.\n"
    },
    {
      "commit": "02a8f01b5a9f396d0327977af4c232d0f94c45fd",
      "tree": "ace818b81f26c30c473af698882dc9786d13afe5",
      "parents": [
        "be2c6b1990904dbd43f3d9b90fa2c530504375cd"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Wed Feb 09 14:20:03 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Feb 09 14:22:36 2011 +0100"
      },
      "message": "cfq-iosched: Don\u0027t wait if queue already has requests.\n\nCommit 7667aa0630407bc07dc38dcc79d29cc0a65553c1 added logic to wait for\nthe last queue of the group to become busy (have at least one request),\nso that the group does not lose out for not being continuously\nbacklogged. The commit did not check for the condition that the last\nqueue already has some requests. As a result, if the queue already has\nrequests, wait_busy is set. Later on, cfq_select_queue() checks the\nflag, and decides that since the queue has a request now and wait_busy\nis set, the queue is expired.  This results in early expiration of the\nqueue.\n\nThis patch fixes the problem by adding a check to see if queue already\nhas requests. If it does, wait_busy is not set. As a result, time slices\ndo not expire early.\n\nThe queues with more than one request are usually buffered writers.\nTesting shows improvement in isolation between buffered writers.\n\nCc: stable@kernel.org\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6a108a14fa356ef607be308b68337939e56ea94e",
      "tree": "1bf260572bd8f95ed867307a2bcf5d881c8ae4a6",
      "parents": [
        "12fcdba1b7ae8b25696433f420b775aeb556d89b"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Thu Jan 20 14:44:16 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:05 2011 -0800"
      },
      "message": "kconfig: rename CONFIG_EMBEDDED to CONFIG_EXPERT\n\nThe meaning of CONFIG_EMBEDDED has long since been obsoleted; the option\nis used to configure any non-standard kernel with a much larger scope than\nonly small devices.\n\nThis patch renames the option to CONFIG_EXPERT in init/Kconfig and fixes\nreferences to the option throughout the kernel.  A new CONFIG_EMBEDDED\noption is added that automatically selects CONFIG_EXPERT when enabled and\ncan be used in the future to isolate options that should only be\nconsidered for embedded systems (RISC architectures, SLOB, etc).\n\nCalling the option \"EXPERT\" more accurately represents its intention: only\nexpert users who understand the impact of the configuration changes they\nare making should enable it.\n\nReviewed-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: David Woodhouse \u003cdavid.woodhouse@intel.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: Greg KH \u003cgregkh@suse.de\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Robin Holt \u003cholt@sgi.com\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "be2c6b1990904dbd43f3d9b90fa2c530504375cd",
      "tree": "f2ec4322adc9f0607b5a78367bc66d8fa333cf54",
      "parents": [
        "ba5bd520f679c450fb6efa439618703bd0956daa"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "message": "blkio-throttle: Avoid calling blkiocg_lookup_group() for root group\n\no Jeff Moyer was doing some testing on a RAM backed disk and\n  blkiocg_lookup_group() showed up high overhead after memcpy(). Similarly\n  somebody else reported that blkiocg_lookup_group() is eating 6% extra\n  cpu. Though looking at the code I can\u0027t think why the overhead of\n  this function is so high. One thing is that it is called with very high\n  frequency (once for every IO).\n\no For lot of folks blkio controller will be compiled in but they might\n  not have actually created cgroups. Hence optimize the case of root\n  cgroup where we can avoid calling blkiocg_lookup_group() if IO is happening\n  in root group (common case).\n\nReported-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "ba5bd520f679c450fb6efa439618703bd0956daa",
      "tree": "f3957e89e43c4955ae261ea96da570f36450f51f",
      "parents": [
        "68264e9d6781f7163e92c517769bb470fa43f6cd"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Jan 19 08:25:02 2011 -0700"
      },
      "message": "cfq: rename a function to give it more appropriate name\n\no Rename a function to give it more approprate name. We are calculating\n  cfq queue slice and function name gives the impression as if cfq group\n  slice length is being calculated.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c553f8e335c00a7cff3ab3f13e793b13d3f2207f",
      "tree": "f9371c9e1191711dd2e774e04d99f3fa90d697fa",
      "parents": [
        "f8ae6e3eb8251be32c6e913393d9f8d9e0609489"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 14 08:41:03 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 14 08:41:03 2011 +0100"
      },
      "message": "block cfq: compensate preempted queue even if it has no slice assigned\n\nIf a queue is preempted before it gets slice assigned, the queue doesn\u0027t get\ncompensation, which looks unfair. For such queue, we compensate it for a whole\nslice.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f8ae6e3eb8251be32c6e913393d9f8d9e0609489",
      "tree": "50b096572a4f8e7992e7e7e2e599e77d334c2b5b",
      "parents": [
        "52cfd503ad7176d23a5dd7af3981744feb60622f"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 14 08:41:02 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 14 08:41:02 2011 +0100"
      },
      "message": "block cfq: make queue preempt work for queues from different workload\n\nI got this:\n             fio-874   [007]  2157.724514:   8,32   m   N cfq874 preempt\n             fio-874   [007]  2157.724519:   8,32   m   N cfq830 slice expired t\u003d1\n             fio-874   [007]  2157.724520:   8,32   m   N cfq830 sl_used\u003d1 disp\u003d0 charge\u003d1 iops\u003d0 sect\u003d0\n             fio-874   [007]  2157.724521:   8,32   m   N cfq830 set_active wl_prio:0 wl_type:0\n             fio-874   [007]  2157.724522:   8,32   m   N cfq830 Not idling. st-\u003ecount:1\n\ncfq830 is an async queue, and preempted by a sync queue cfq874. But since we\nhave cfqg-\u003esaved_workload_slice mechanism, the preempt is a nop.\nLooks currently our preempt is totally broken if the two queues are not from\nthe same workload type.\nBelow patch fixes it. This will might make async queue starvation, but it\u0027s\nwhat our old code does before cgroup is added.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "275220f0fcff1adf28a717076e00f575edf05fda",
      "tree": "d249bccc80c64443dab211639050c4fb14332648",
      "parents": [
        "fe3c560b8a22cb28e54fe8950abef38e88d75831",
        "81c5e2ae33c4b19e53966b427e33646bf6811830"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 10:45:01 2011 -0800"
      },
      "message": "Merge branch \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.38/core\u0027 of git://git.kernel.dk/linux-2.6-block: (43 commits)\n  block: ensure that completion error gets properly traced\n  blktrace: add missing probe argument to block_bio_complete\n  block cfq: don\u0027t use atomic_t for cfq_group\n  block cfq: don\u0027t use atomic_t for cfq_queue\n  block: trace event block fix unassigned field\n  block: add internal hd part table references\n  block: fix accounting bug on cross partition merges\n  kref: add kref_test_and_get\n  bio-integrity: mark kintegrityd_wq highpri and CPU intensive\n  block: make kblockd_workqueue smarter\n  Revert \"sd: implement sd_check_events()\"\n  block: Clean up exit_io_context() source code.\n  Fix compile warnings due to missing removal of a \u0027ret\u0027 variable\n  fs/block: type signature of major_to_index(int) to major_to_index(unsigned)\n  block: convert !IS_ERR(p) \u0026\u0026 p to !IS_ERR_NOR_NULL(p)\n  cfq-iosched: don\u0027t check cfqg in choose_service_tree()\n  fs/splice: Pull buf-\u003eops-\u003econfirm() from splice_from_pipe actors\n  cdrom: export cdrom_check_events()\n  sd: implement sd_check_events()\n  sr: implement sr_check_events()\n  ...\n"
    },
    {
      "commit": "81c5e2ae33c4b19e53966b427e33646bf6811830",
      "tree": "a602a6dd100165c8948bfa713e6f0b422dcba5d8",
      "parents": [
        "797a455d2c682476c3797dbfecf5bf84c1e3b9d3",
        "fcc57045d53edc35bcce456e60ac4aa802712934"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jan 13 14:47:54 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Jan 13 14:47:54 2011 +0100"
      },
      "message": "Merge branch \u0027for-2.6.38/event-handling\u0027 into for-2.6.38/core\n"
    },
    {
      "commit": "329a67815b596d23daf0caa588ae0800e925320f",
      "tree": "5fcf8a7c4a4d43b2cc7dc220d6bb25bdf27d153f",
      "parents": [
        "30d7b9448f03f2c82d0fd44738674cc156a8ce0a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 07 08:48:28 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:48:28 2011 +0100"
      },
      "message": "block cfq: don\u0027t use atomic_t for cfq_group\n\ncfq_group-\u003eref is used with queue_lock hold, the only exception is\ncfq_set_request, which looks like a bug to me, so ref doesn\u0027t need\nto be an atomic and atomic operation is slower.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "30d7b9448f03f2c82d0fd44738674cc156a8ce0a",
      "tree": "f925a59dfe6a7b2da5240e9d43d873de7b1de273",
      "parents": [
        "b7908c1035af7652cd613991b54dbff9c8b6bd3a"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Fri Jan 07 08:46:59 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:46:59 2011 +0100"
      },
      "message": "block cfq: don\u0027t use atomic_t for cfq_queue\n\ncfq_queue-\u003eref is used with queue_lock hold, so ref doesn\u0027t need to be an atomic\nand atomic operation is slower.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "6c23a9681c0fe7fb7dd331b39dda11926f43746e",
      "tree": "bf113a475a17faa866e7e59806378107dcb3aa40",
      "parents": [
        "09e099d4bafea3b15be003d548bdf94b4b6e0e17"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:43:37 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Jan 07 08:43:37 2011 +0100"
      },
      "message": "block: add internal hd part table references\n\nWe can\u0027t use krefs since it\u0027s apparently restricted to very basic\nreference counting.\n\nThis reverts commit e4a683c8.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "09e099d4bafea3b15be003d548bdf94b4b6e0e17",
      "tree": "a4199338ad73e88c0863bbfc6604c4972055f16d",
      "parents": [
        "e4a683c899cd5a49f8d684a054c95bd115a0c005"
      ],
      "author": {
        "name": "Jerome Marchand",
        "email": "jmarchan@redhat.com",
        "time": "Wed Jan 05 16:57:38 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Jan 05 16:57:38 2011 +0100"
      },
      "message": "block: fix accounting bug on cross partition merges\n\n/proc/diskstats would display a strange output as follows.\n\n$ cat /proc/diskstats |grep sda\n   8       0 sda 90524 7579 102154 20464 0 0 0 0 0 14096 20089\n   8       1 sda1 19085 1352 21841 4209 0 0 0 0 4294967064 15689 4293424691\n                                                ~~~~~~~~~~\n   8       2 sda2 71252 3624 74891 15950 0 0 0 0 232 23995 1562390\n   8       3 sda3 54 487 2188 92 0 0 0 0 0 88 92\n   8       4 sda4 4 0 8 0 0 0 0 0 0 0 0\n   8       5 sda5 81 2027 2130 138 0 0 0 0 0 87 137\n\nIts reason is the wrong way of accounting hd_struct-\u003ein_flight. When a bio is\nmerged into a request belongs to different partition by ELEVATOR_FRONT_MERGE.\n\nThe detailed root cause is as follows.\n\nAssuming that there are two partition, sda1 and sda2.\n\n1. A request for sda2 is in request_queue. Hence sda1\u0027s hd_struct-\u003ein_flight\n   is 0 and sda2\u0027s one is 1.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |          0\n   sda2 |          1\n   ---------------------------\n\n2. A bio belongs to sda1 is issued and is merged into the request mentioned on\n   step1 by ELEVATOR_BACK_MERGE. The first sector of the request is changed\n   from sda2 region to sda1 region. However the two partition\u0027s\n   hd_struct-\u003ein_flight are not changed.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |          0\n   sda2 |          1\n   ---------------------------\n\n3. The request is finished and blk_account_io_done() is called. In this case,\n   sda2\u0027s hd_struct-\u003ein_flight, not a sda1\u0027s one, is decremented.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |         -1\n   sda2 |          1\n   ---------------------------\n\nThe patch fixes the problem by caching the partition lookup\ninside the request structure, hence making sure that the increment\nand decrement will always happen on the same partition struct. This\nalso speeds up IO with accounting enabled, since it cuts down on\nthe number of lookups we have to do.\n\nAlso add a refcount to struct hd_struct to keep the partition in\nmemory as long as users exist. We use kref_test_and_get() to ensure\nwe don\u0027t add a reference to a partition which is going away.\n\nSigned-off-by: Jerome Marchand \u003cjmarchan@redhat.com\u003e\nSigned-off-by: Yasuaki Ishimatsu \u003cisimatu.yasuaki@jp.fujitsu.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "89b90be2d877a904b1704e4029db65655bfc6282",
      "tree": "0dbeda7f0efa17373bdd3c59793a36c417fa9d1c",
      "parents": [
        "27667c996f6a0bed4ad1e10ac0a0dbb6037968db"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Jan 03 15:01:47 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Jan 03 15:01:47 2011 +0100"
      },
      "message": "block: make kblockd_workqueue smarter\n\nkblockd is used for unplugging and may affect IO latency and\nthroughput and the max number of concurrent work items are bound by\nthe number of block devices.  Make it HIGHPRI workqueue w/ default max\nconcurrency.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4b7bd364700d9ac8372eff48832062b936d0793b",
      "tree": "0dbf78c95456a0b02d07fcd473281f04a87e266d",
      "parents": [
        "c0d8768af260e2cbb4bf659ae6094a262c86b085",
        "90a8a73c06cc32b609a880d48449d7083327e11a"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Dec 22 18:57:02 2010 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Dec 22 18:57:02 2010 +0100"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n\nConflicts:\n\tMAINTAINERS\n\tarch/arm/mach-omap2/pm24xx.c\n\tdrivers/scsi/bfa/bfa_fcpim.c\n\nNeeded to update to apply fixes for which the old branch was too\noutdated.\n"
    },
    {
      "commit": "27667c996f6a0bed4ad1e10ac0a0dbb6037968db",
      "tree": "dcbcd7354f6ccaa3fe88fdf0a0a5f1e168ff8c40",
      "parents": [
        "3603b8eaccc8e41d3f355b3cadd662a3dd6699fd"
      ],
      "author": {
        "name": "Bart Van Assche",
        "email": "bvanassche@acm.org",
        "time": "Tue Dec 21 15:07:45 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Dec 21 15:07:45 2010 +0100"
      },
      "message": "block: Clean up exit_io_context() source code.\n\nThis patch fixes a spelling error in a source code comment and removes\nsuperfluous braces in the function exit_io_context().\n\nSigned-off-by: Bart Van Assche \u003cbvanassche@acm.org\u003e\nCc: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7f8635cc9e66a26d7280ba680b044fa2f65104af",
      "tree": "0d8506e86d07e15c473aca1a09af7ad6ff7d8b49",
      "parents": [
        "3cb50ddf97a0a1ca4c68bc12fa1e727a6b45fbf2",
        "0fc13c8995cd96f4123de400c71c223d80400ed9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 20 09:19:46 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 20 09:19:46 2010 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  cciss: fix cciss_revalidate panic\n  block: max hardware sectors limit wrapper\n  block: Deprecate QUEUE_FLAG_CLUSTER and use queue_limits instead\n  blk-throttle: Correct the placement of smp_rmb()\n  blk-throttle: Trim/adjust slice_end once a bio has been dispatched\n  block: check for proper length of iov entries earlier in blk_rq_map_user_iov()\n  drbd: fix for spin_lock_irqsave in endio callback\n  drbd: don\u0027t recvmsg with zero length\n"
    },
    {
      "commit": "e61eb2e93fe86931d46831752a82dab25a5335ca",
      "tree": "631aeb9bf8614903972a6a9945040a4d528f1029",
      "parents": [
        "b9f985b6e05ebd7af2aaef0eb3ae369390ef191f"
      ],
      "author": {
        "name": "Yang Zhang",
        "email": "kthreadd@gmail.com",
        "time": "Fri Dec 17 09:00:18 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 09:00:18 2010 +0100"
      },
      "message": "fs/block: type signature of major_to_index(int) to major_to_index(unsigned)\n\nThe major/minor device numbers are always defined and used as `unsigned\u0027.\n\nSigned-off-by: Yang Zhang \u003ckthreadd@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b9f985b6e05ebd7af2aaef0eb3ae369390ef191f",
      "tree": "69aa4bd9501f988302a155ebfdc630bd2a37bfde",
      "parents": [
        "7278c9c19bd85cf33213a2e0b538a18d3ac8ad00"
      ],
      "author": {
        "name": "Yang Zhang",
        "email": "kthreadd@gmail.com",
        "time": "Fri Dec 17 08:58:36 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:58:36 2010 +0100"
      },
      "message": "block: convert !IS_ERR(p) \u0026\u0026 p to !IS_ERR_NOR_NULL(p)\n\nSigned-off-by: Yang Zhang \u003ckthreadd@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7278c9c19bd85cf33213a2e0b538a18d3ac8ad00",
      "tree": "e080ada1f8cc00fef4600976f8cf489cc94d1c03",
      "parents": [
        "a8adbe378b56acd5945df70753c7e8f6fe223304"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Fri Dec 17 08:57:14 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:57:14 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t check cfqg in choose_service_tree()\n\nWhen cfq_choose_cfqg() is called in select_queue(), there must be at least one\nbacklogged CFQ queue waiting for dispatching, hence there must be at least one\nbacklogged CFQ group on service tree. So we never call choose_service_tree()\nwith cfqg \u003d\u003d NULL.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "72d4cd9f38b5ed96b75df4c622be25e1c2648dd3",
      "tree": "a229645cbbc63aad3fa5b57ea9f092e618588890",
      "parents": [
        "e692cb668fdd5a712c6ed2a2d6f2a36ee83997b4"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Fri Dec 17 08:34:20 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:36:01 2010 +0100"
      },
      "message": "block: max hardware sectors limit wrapper\n\nImplement blk_limits_max_hw_sectors() and make\nblk_queue_max_hw_sectors() a wrapper around it.\n\nDM needs this to avoid setting queue_limits\u0027 max_hw_sectors and\nmax_sectors directly.  dm_set_device_limits() now leverages\nblk_limits_max_hw_sectors() logic to establish the appropriate\nmax_hw_sectors minimum (PAGE_SIZE).  Fixes issue where DM was\nincorrectly setting max_sectors rather than max_hw_sectors (which\ncaused dm_merge_bvec()\u0027s max_hw_sectors check to be ineffective).\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: stable@kernel.org\nAcked-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e692cb668fdd5a712c6ed2a2d6f2a36ee83997b4",
      "tree": "accf682fe5e1388f305b5fc364a931dfda5f3fb9",
      "parents": [
        "04a6b516cdc6efc2500b52a540cf65be8c5aaf9e"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Wed Dec 01 19:41:49 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Dec 17 08:35:53 2010 +0100"
      },
      "message": "block: Deprecate QUEUE_FLAG_CLUSTER and use queue_limits instead\n\nWhen stacking devices, a request_queue is not always available. This\nforced us to have a no_cluster flag in the queue_limits that could be\nused as a carrier until the request_queue had been set up for a\nmetadevice.\n\nThere were several problems with that approach. First of all it was up\nto the stacking device to remember to set queue flag after stacking had\ncompleted. Also, the queue flag and the queue limits had to be kept in\nsync at all times. We got that wrong, which could lead to us issuing\ncommands that went beyond the max scatterlist limit set by the driver.\n\nThe proper fix is to avoid having two flags for tracking the same thing.\nWe deprecate QUEUE_FLAG_CLUSTER and use the queue limit directly in the\nblock layer merging functions. The queue_limit \u0027no_cluster\u0027 is turned\ninto \u0027cluster\u0027 to avoid double negatives and to ease stacking.\nClustering defaults to being enabled as before. The queue flag logic is\nremoved from the stacking function, and explicitly setting the cluster\nflag is no longer necessary in DM and MD.\n\nReported-by: Ed Lin \u003ced.lin@promise.com\u003e\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "77ea887e433ad8389d416826936c110fa7910f80",
      "tree": "ac9d32aabcebf5a465acae2066b12c9335b5ca6f",
      "parents": [
        "d2bf1b6723ed0eab378363649d15b7893bf14e91"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 08 20:57:37 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Dec 16 17:53:38 2010 +0100"
      },
      "message": "implement in-kernel gendisk events handling\n\nCurrently, media presence polling for removeable block devices is done\nfrom userland.  There are several issues with this.\n\n* Polling is done by periodically opening the device.  For SCSI\n  devices, the command sequence generated by such action involves a\n  few different commands including TEST_UNIT_READY.  This behavior,\n  while perfectly legal, is different from Windows which only issues\n  single command, GET_EVENT_STATUS_NOTIFICATION.  Unfortunately, some\n  ATAPI devices lock up after being periodically queried such command\n  sequences.\n\n* There is no reliable and unintrusive way for a userland program to\n  tell whether the target device is safe for media presence polling.\n  For example, polling for media presence during an on-going burning\n  session can make it fail.  The polling program can avoid this by\n  opening the device with O_EXCL but then it risks making a valid\n  exclusive user of the device fail w/ -EBUSY.\n\n* Userland polling is unnecessarily heavy and in-kernel implementation\n  is lighter and better coordinated (workqueue, timer slack).\n\nThis patch implements framework for in-kernel disk event handling,\nwhich includes media presence polling.\n\n* bdops-\u003echeck_events() is added, which supercedes -\u003emedia_changed().\n  It should check whether there\u0027s any pending event and return if so.\n  Currently, two events are defined - DISK_EVENT_MEDIA_CHANGE and\n  DISK_EVENT_EJECT_REQUEST.  -\u003echeck_events() is guaranteed not to be\n  called parallelly.\n\n* gendisk-\u003eevents and -\u003easync_events are added.  These should be\n  initialized by block driver before passing the device to add_disk().\n  The former contains the mask of all supported events and the latter\n  the mask of all events which the device can report without polling.\n  /sys/block/*/events[_async] export these to userland.\n\n* Kernel parameter block.events_dfl_poll_msecs controls the system\n  polling interval (default is 0 which means disable) and\n  /sys/block/*/events_poll_msecs control polling intervals for\n  individual devices (default is -1 meaning use system setting).  Note\n  that if a device can report all supported events asynchronously and\n  its polling interval isn\u0027t explicitly set, the device won\u0027t be\n  polled regardless of the system polling interval.\n\n* If a device is opened exclusively with write access, event checking\n  is automatically disabled until all write exclusive accesses are\n  released.\n\n* There are event \u0027clearing\u0027 events.  For example, both of currently\n  defined events are cleared after the device has been successfully\n  opened.  This information is passed to -\u003echeck_events() callback\n  using @clearing argument as a hint.\n\n* Event checking is always performed from system_nrt_wq and timer\n  slack is set to 25% for polling.\n\n* Nothing changes for drivers which implement -\u003emedia_changed() but\n  not -\u003echeck_events().  Going forward, all drivers will be converted\n  to -\u003echeck_events() and -\u003emedia_change() will be dropped.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d2bf1b6723ed0eab378363649d15b7893bf14e91",
      "tree": "4a4144b09ab747ad661605aa761753d9a805e77f",
      "parents": [
        "dddd9dc340ae1a41d90e084529ca979c77c4ecfe"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 08 20:57:36 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Dec 16 17:53:38 2010 +0100"
      },
      "message": "block: move register_disk() and del_gendisk() to block/genhd.c\n\nThere\u0027s no reason for register_disk() and del_gendisk() to be in\nfs/partitions/check.c.  Move both to genhd.c.  While at it, collapse\nunlink_gendisk(), which was artificially in a separate function due to\ngenhd.c / check.c split, into del_gendisk().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "dddd9dc340ae1a41d90e084529ca979c77c4ecfe",
      "tree": "7ab2dba891308a0c9209d71ecc8d620260b8674b",
      "parents": [
        "e4ea0c16a85d221ebcc3a21f32e321440459e0fc"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Dec 08 20:57:35 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Dec 16 17:53:38 2010 +0100"
      },
      "message": "block: kill genhd_media_change_notify()\n\nThere\u0027s no user of the facility.  Kill it.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e4ea0c16a85d221ebcc3a21f32e321440459e0fc",
      "tree": "47acf4da84f9a448e6eb6172a5440ccc60696ed9",
      "parents": [
        "760701bfe14faee8ea0608a9cab2046071d98a39"
      ],
      "author": {
        "name": "Shaohua Li writes",
        "email": "shaohua.li@intel.com",
        "time": "Mon Dec 13 14:32:22 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Dec 13 14:32:22 2010 +0100"
      },
      "message": "block cfq: select new workload if priority changed\n\nIf priority is changed, continuing to check workload_expires and service tree\ncount of the previous workload does not make sense. We should always choose\nthe workload with lowest key of new priority in such case.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c7a841f3aca469187db76842676951a672fd27d1",
      "tree": "6819d796270f9b4c5eb4cae374a69ab1988d384a",
      "parents": [
        "057f02a38e67a944a2d0b89bb0111efb9dbe6e6e"
      ],
      "author": {
        "name": "James Smart",
        "email": "james.smart@emulex.com",
        "time": "Sun Nov 14 11:12:04 2010 -0500"
      },
      "committer": {
        "name": "James Bottomley",
        "email": "James.Bottomley@suse.de",
        "time": "Thu Dec 09 09:41:14 2010 -0600"
      },
      "message": "[SCSI] bsg: correct fault if queue object removed while dev_t open\n\nThis patch corrects an issue in bsg that results in a general protection\nfault if an LLD is removed while an application is using an open file\nhandle to a bsg device, and the application issues an ioctl. The fault\noccurs because the class_dev is NULL, having been cleared in\nbsg_unregister_queue() when the driver was removed.  With this\npatch, a check is made for the class_dev, and the application\nwill receive ENXIO if the related object is gone.\n\nSigned-off-by: Carl Lajeunesse \u003ccarl.lajeunesse@emulex.com\u003e\nSigned-off-by: James Smart \u003cjames.smart@emulex.com\u003e\nSigned-off-by: James Bottomley \u003cJames.Bottomley@suse.de\u003e\n"
    },
    {
      "commit": "04a6b516cdc6efc2500b52a540cf65be8c5aaf9e",
      "tree": "fa5d6675308df0ff42eceeec1b406d2ce5eb2ff6",
      "parents": [
        "d1ae8ffdfaa16b2ab2e9346e81cf0ab6eaaae347"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Dec 01 19:34:52 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Dec 01 19:34:52 2010 +0100"
      },
      "message": "blk-throttle: Correct the placement of smp_rmb()\n\no I was discussing what are the variable being updated without spin lock and\n  why do we need barriers and Oleg pointed out that location of smp_rmb()\n  should be between read of td-\u003elimits_changed and tg-\u003elimits_changed. This\n  patch fixes it.\n\no Following is one possible sequence of events. Say cpu0 is executing\n  throtl_update_blkio_group_read_bps() and cpu1 is executing\n  throtl_process_limit_change().\n\n cpu0                                                cpu1\n\n tg-\u003elimits_changed \u003d true;\n smp_mb__before_atomic_inc();\n atomic_inc(\u0026td-\u003elimits_changed);\n\n                                     if (!atomic_read(\u0026td-\u003elimits_changed))\n                                             return;\n\n                                     if (tg-\u003elimits_changed)\n                                             do_something;\n\n If cpu0 has updated tg-\u003elimits_changed and td-\u003elimits_changed, we want to\n make sure that if update to td-\u003elimits_changed is visible on cpu1, then\n update to tg-\u003elimits_changed should also be visible.\n\n Oleg pointed out to ensure that we need to insert an smp_rmb() between\n td-\u003elimits_changed read and tg-\u003elimits_changed read.\n\no I had erroneously put smp_rmb() before atomic_read(\u0026td-\u003elimits_changed).\n  This patch fixes it.\n\nReported-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d1ae8ffdfaa16b2ab2e9346e81cf0ab6eaaae347",
      "tree": "d34fabaf556ec4471e076b4794fa1de8515956f0",
      "parents": [
        "5478755616ae2ef1ce144dded589b62b2a50d575"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Wed Dec 01 19:34:46 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Dec 01 19:34:46 2010 +0100"
      },
      "message": "blk-throttle: Trim/adjust slice_end once a bio has been dispatched\n\no During some testing I did following and noticed throttling stops working.\n\n        - Put a very low limit on a cgroup, say 1 byte per second.\n        - Start some reads, this will set slice_end to a very high value.\n        - Change the limit to higher value say 1MB/s\n        - Now IO unthrottles and finishes as expected.\n        - Try to do the read again but IO is not limited to 1MB/s as expected.\n\no What is happening.\n        - Initially low value of limit sets slice_end to a very high value.\n        - During updation of limit, slice_end is not being truncated.\n        - Very high value of slice_end leads to keeping the existing slice\n          valid for a very long time and new slice does not start.\n        - tg_may_dispatch() is called in blk_throtle_bio(), and trim_slice()\n          is not called in this path. So slice_start is some old value and\n          practically we are able to do huge amount of IO.\n\no There are many ways it can be fixed. I have fixed it by trying to\n  adjust/cleanup slice_end in trim_slice(). Generally we extend slices if bio\n  is big and can\u0027t be dispatched in one slice. After dispatch of bio, readjust\n  the slice_end to make sure we don\u0027t end up with huge values.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "760701bfe14faee8ea0608a9cab2046071d98a39",
      "tree": "780193b7803aced7ecb2a53f0ce43150eb8ebeab",
      "parents": [
        "b54ce60eb7f61f8e314b8b241b0469eda3bb1d42"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Tue Nov 30 20:52:47 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 30 20:52:47 2010 +0100"
      },
      "message": "cfq-iosched: Get rid of on_st flag\n\nIt\u0027s able to check whether a CFQ group on a service tree by\nchecking \"cfqg-\u003erb_node\". There\u0027s no need to maintain an\nextra flag here.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b54ce60eb7f61f8e314b8b241b0469eda3bb1d42",
      "tree": "fcf25315bb0ef06ad7f9017f84fce9021768682f",
      "parents": [
        "f30195c50245d8ace628e1978b1daa8df86e7224"
      ],
      "author": {
        "name": "Gui Jianfeng",
        "email": "guijianfeng@cn.fujitsu.com",
        "time": "Tue Nov 30 20:52:46 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 30 20:52:46 2010 +0100"
      },
      "message": "cfq-iosched: Get rid of st-\u003eactive\n\nWhen a cfq group is running, it won\u0027t be dequeued from service tree, so\nthere\u0027s no need to store the active one in st-\u003eactive. Just gid rid of it.\n\nSigned-off-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5478755616ae2ef1ce144dded589b62b2a50d575",
      "tree": "b1dffb15dba1a924bba289beb78ea23f34782c9c",
      "parents": [
        "a115413de13ae6beb0cbfc198afe385a261ab284"
      ],
      "author": {
        "name": "Xiaotian Feng",
        "email": "dfeng@redhat.com",
        "time": "Mon Nov 29 10:03:55 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 29 10:04:50 2010 +0100"
      },
      "message": "block: check for proper length of iov entries earlier in blk_rq_map_user_iov()\n\ncommit 9284bcf checks for proper length of iov entries in\nblk_rq_map_user_iov(). But if the map is unaligned, kernel\nwill break out the loop without checking for the proper length.\nSo we need to check the proper length before the unalign check.\n\nSigned-off-by: Xiaotian Feng \u003cdfeng@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f30195c50245d8ace628e1978b1daa8df86e7224",
      "tree": "edf4f91c4356c41d50fb07f15cebd1e6442538ad",
      "parents": [
        "d07335e51df0c6dec202d315fc4f1f7e100eec4e",
        "d4d77629953eabd3c14f6fa5746f6b28babfc55f"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Nov 27 19:49:18 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Nov 27 19:49:18 2010 +0100"
      },
      "message": "Merge branch \u0027cleanup-bd_claim\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc into for-2.6.38/core\n"
    },
    {
      "commit": "78daa87b1d332e4ac963c793a4157533d57501c7",
      "tree": "c133840b219a446c11fa2391bb0d887e71f5809f",
      "parents": [
        "d4d2ad948e9a9c316e72fdc09d7490dfda4773da",
        "bbe425cd9ae83eacd0c9f09df2bf56dc911a54cd"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Nov 27 07:17:50 2010 +0900"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Nov 27 07:17:50 2010 +0900"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  cciss: fix build for PROC_FS disabled\n  block: fix amiga and atari floppy driver compile warning\n  blk-throttle: Fix calculation of max number of WRITES to be dispatched\n  ioprio: grab rcu_read_lock in sys_ioprio_{set,get}()\n  xen/blkfront: cope with backend that fail empty BLKIF_OP_WRITE_BARRIER requests\n  xen/blkfront: Implement FUA with BLKIF_OP_WRITE_BARRIER\n  xen/blkfront: change blk_shadow.request to proper pointer\n  xen/blkfront: map REQ_FLUSH into a full barrier\n"
    },
    {
      "commit": "451a3c24b0135bce54542009b5fde43846c7cf67",
      "tree": "f0fbbcc155aef2a1ffcb8aa593fe7a966d0e6900",
      "parents": [
        "55f6561c6941713ab5ae9180525b026dd40b7d14"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Wed Nov 17 16:26:55 2010 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 17 08:59:32 2010 -0800"
      },
      "message": "BKL: remove extraneous #include \u003csmp_lock.h\u003e\n\nThe big kernel lock has been removed from all these files at some point,\nleaving only the #include.\n\nRemove this too as a cleanup.\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d07335e51df0c6dec202d315fc4f1f7e100eec4e",
      "tree": "db6ac1db8d87738b9e44497e082d490c14413f5d",
      "parents": [
        "5fbf85639287b6ea287f4f5e5e7e36608f0f60bd"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Tue Nov 16 12:52:38 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 12:53:39 2010 +0100"
      },
      "message": "block: Rename \"block_remap\" tracepoint to \"block_bio_remap\" to clarify the event.\n\nSigned-off-by: Kiyoshi Ueda \u003ck-ueda@ct.jp.nec.com\u003e\nSigned-off-by: Jun\u0027ichi Nomura \u003cj-nomura@ce.jp.nec.com\u003e\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5fbf85639287b6ea287f4f5e5e7e36608f0f60bd",
      "tree": "608a51e6ee572dba94b43f1933e49ab88562e4c0",
      "parents": [
        "a02056349cdea2252cd2b21643ebf025e83a29f2",
        "bdc85df7a8417b9893443ff5520804699416b6f3"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:10:12 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:10:12 2010 +0100"
      },
      "message": "Merge branch \u0027for-2.6.38/rc2-holder\u0027 into for-2.6.38/core\n"
    },
    {
      "commit": "a02056349cdea2252cd2b21643ebf025e83a29f2",
      "tree": "b7c889d6cbe8e7188d07d99a5c9da858c53a5b6c",
      "parents": [
        "34db1d595ef6f183fbc1e42cda45a3dfa0035258",
        "e53beacd23d9cb47590da6a7a7f6d417b941a994"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:09:42 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 16 10:09:42 2010 +0100"
      },
      "message": "Merge branch \u0027v2.6.37-rc2\u0027 into for-2.6.38/core\n"
    },
    {
      "commit": "bdc85df7a8417b9893443ff5520804699416b6f3",
      "tree": "7d1158ff87d327934c0c3b0d5ec9b02ed4811de6",
      "parents": [
        "0143832cc96d0bf78486297aad5c8fb2c2ead02a"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Nov 15 19:37:36 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 15 19:37:36 2010 +0100"
      },
      "message": "blk-cgroup: Allow creation of hierarchical cgroups\n\no Allow hierarchical cgroup creation for blkio controller\n\no Currently we disallow it as both the io controller policies (throttling\n  as well as proportion bandwidth) do not support hierarhical accounting\n  and control. But the flip side is that blkio controller can not be used with\n  libvirt as libvirt creates a cgroup hierarchy deeper than 1 level.\n\n  \u003ctop-level-cgroup-dir\u003e/\u003ccontroller\u003e/libvirt/qemu/\u003cvirtual-machine-groups\u003e\n\no So this patch will allow creation of cgroup hierarhcy but at the backend\n  everything will be treated as flat. So if somebody created a an hierarchy\n  like as follows.\n\n\t\t\troot\n\t\t\t/  \\\n\t\t     test1 test2\n\t\t\t|\n\t\t     test3\n\n  CFQ and throttling will practically treat all groups at same level.\n\n\t\t\t\tpivot\n\t\t\t     /  |   \\  \\\n\t\t\troot  test1 test2  test3\n\no Once we have actual support for hierarchical accounting and control\n  then we can introduce another cgroup tunable file \"blkio.use_hierarchy\"\n  which will be 0 by default but if user wants to enforce hierarhical\n  control then it can be set to 1. This way there should not be any\n  ABI problems down the line.\n\no The only not so pretty part is introduction of extra file \"use_hierarchy\"\n  down the line. Kame-san had mentioned that hierarhical accounting is\n  expensive in memory controller hence they keep it off by default. I\n  suspect same will be the case for IO controller also as for each IO\n  completion we shall have to account IO through hierarchy up to the root.\n  if yes, then it probably is not a very bad idea to introduce this extra\n  file so that it will be used only when somebody needs it and some people\n  might enable hierarchy only in part of the hierarchy.\n\no This is how basically memory controller also uses \"use_hierarhcy\" and\n  they also allowed creation of hierarchies when actual backend support\n  was not available.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nReviewed-by: Gui Jianfeng \u003cguijianfeng@cn.fujitsu.com\u003e\nReviewed-by: Ciju Rajan K \u003cciju@linux.vnet.ibm.com\u003e\nTested-by: Ciju Rajan K \u003cciju@linux.vnet.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c2f6805d470af369a7337801deeecea800dbfe1c",
      "tree": "2381b8c512d611869877adfad3d5e0dfe75e668a",
      "parents": [
        "d69b78ba1deaaa95ffa8dac5a9ca819ce454d52e"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Mon Nov 15 19:32:42 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 15 19:32:42 2010 +0100"
      },
      "message": "blk-throttle: Fix calculation of max number of WRITES to be dispatched\n\no Currently we try to dispatch more READS and less WRITES (75%, 25%) in one\n  dispatch round. ummy pointed out that there is a bug in max_nr_writes\n  calculation. This patch fixes it.\n\nReported-by: ummy y \u003cyummylln@yahoo.com.cn\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "e525fd89d380c4a94c0d63913a1dd1a593ed25e7",
      "tree": "d226ef40d3f99e42fcf272ad432585cbd641ebec",
      "parents": [
        "e09b457bdb7e8d23fc54dcef0930ac697d8de895"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Nov 13 11:55:17 2010 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Nov 13 11:55:17 2010 +0100"
      },
      "message": "block: make blkdev_get/put() handle exclusive access\n\nOver time, block layer has accumulated a set of APIs dealing with bdev\nopen, close, claim and release.\n\n* blkdev_get/put() are the primary open and close functions.\n\n* bd_claim/release() deal with exclusive open.\n\n* open/close_bdev_exclusive() are combination of open and claim and\n  the other way around, respectively.\n\n* bd_link/unlink_disk_holder() to create and remove holder/slave\n  symlinks.\n\n* open_by_devnum() wraps bdget() + blkdev_get().\n\nThe interface is a bit confusing and the decoupling of open and claim\nmakes it impossible to properly guarantee exclusive access as\nin-kernel open + claim sequence can disturb the existing exclusive\nopen even before the block layer knows the current open if for another\nexclusive access.  Reorganize the interface such that,\n\n* blkdev_get() is extended to include exclusive access management.\n  @holder argument is added and, if is @FMODE_EXCL specified, it will\n  gain exclusive access atomically w.r.t. other exclusive accesses.\n\n* blkdev_put() is similarly extended.  It now takes @mode argument and\n  if @FMODE_EXCL is set, it releases an exclusive access.  Also, when\n  the last exclusive claim is released, the holder/slave symlinks are\n  removed automatically.\n\n* bd_claim/release() and close_bdev_exclusive() are no longer\n  necessary and either made static or removed.\n\n* bd_link_disk_holder() remains the same but bd_unlink_disk_holder()\n  is no longer necessary and removed.\n\n* open_bdev_exclusive() becomes a simple wrapper around lookup_bdev()\n  and blkdev_get().  It also has an unexpected extra bdev_read_only()\n  test which probably should be moved into blkdev_get().\n\n* open_by_devnum() is modified to take @holder argument and pass it to\n  blkdev_get().\n\nMost of bdev open/close operations are unified into blkdev_get/put()\nand most exclusive accesses are tested atomically at the open time (as\nit should).  This cleans up code and removes some, both valid and\ninvalid, but unnecessary all the same, corner cases.\n\nopen_bdev_exclusive() and open_by_devnum() can use further cleanup -\nrename to blkdev_get_by_path() and blkdev_get_by_devt() and drop\nspecial features.  Well, let\u0027s leave them for another day.\n\nMost conversions are straight-forward.  drbd conversion is a bit more\ninvolved as there was some reordering, but the logic should stay the\nsame.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Neil Brown \u003cneilb@suse.de\u003e\nAcked-by: Ryusuke Konishi \u003ckonishi.ryusuke@lab.ntt.co.jp\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: Philipp Reisner \u003cphilipp.reisner@linbit.com\u003e\nCc: Peter Osterlund \u003cpetero2@telia.com\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Jan Kara \u003cjack@suse.cz\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Andreas Dilger \u003cadilger.kernel@dilger.ca\u003e\nCc: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nCc: Mark Fasheh \u003cmfasheh@suse.com\u003e\nCc: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCc: Alex Elder \u003caelder@sgi.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: dm-devel@redhat.com\nCc: drbd-dev@lists.linbit.com\nCc: Leo Chen \u003cleochen@broadcom.com\u003e\nCc: Scott Branden \u003csbranden@broadcom.com\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: Dave Kleikamp \u003cshaggy@linux.vnet.ibm.com\u003e\nCc: Joern Engel \u003cjoern@logfs.org\u003e\nCc: reiserfs-devel@vger.kernel.org\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cedb4a7d9f6aedb0dce94d6285b69dcb3c10fa05",
      "tree": "49a6b255a727421658cb917321ad3e29c8bd9fc0",
      "parents": [
        "17a9e7bbae178d1326e4631ab6350a272349c99d"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Nov 11 13:37:54 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Nov 11 13:40:11 2010 +0100"
      },
      "message": "block: remove unused copy_io_context()\n\nReported-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "02e031cbc843b010e72fcc05c76113c688b2860f",
      "tree": "9f68559ec3acc39bcc4ce2ff87043a094eaa2e8f",
      "parents": [
        "00e375e7e962f938f6b3c93e4cd097a5e26cc788"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Wed Nov 10 14:54:09 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Nov 10 14:54:09 2010 +0100"
      },
      "message": "block: remove REQ_HARDBARRIER\n\nREQ_HARDBARRIER is dead now, so remove the leftovers.  What\u0027s left\nat this point is:\n\n - various checks inside the block layer.\n - sanity checks in bio based drivers.\n - now unused bio_empty_barrier helper.\n - Xen blockfront use of BLKIF_OP_WRITE_BARRIER - it\u0027s dead for a while,\n   but Xen really needs to sort out it\u0027s barrier situaton.\n - setting of ordered tags in uas - dead code copied from old scsi\n   drivers.\n - scsi different retry for barriers - it\u0027s dead and should have been\n   removed when flushes were converted to FS requests.\n - blktrace handling of barriers - removed.  Someone who knows blktrace\n   better should add support for REQ_FLUSH and REQ_FUA, though.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a014741c0adfb8fb79952939ca087cf03d272bb9",
      "tree": "57bafa05736f172b94fde156bb51798b3ddb6107",
      "parents": [
        "77304d2abac6101f7249754ffdd4421258877ab0"
      ],
      "author": {
        "name": "Vasiliy Kulikov",
        "email": "segooon@gmail.com",
        "time": "Mon Nov 08 14:42:40 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Nov 10 14:40:53 2010 +0100"
      },
      "message": "block: ioctl: fix information leak to userland\n\nStructure hd_geometry is copied to userland with 4 padding bytes\nbetween cylinders and start fields uninitialized on 64-bit platforms.\nIt leads to leaking of contents of kernel stack memory.\n\nCurrently there is no memset() in real implementations of getgeo()\nin drivers/block/, so it makes sense to have memset() in blkdev_ioctl().\n\nSigned-off-by: Vasiliy Kulikov \u003csegooon@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "77304d2abac6101f7249754ffdd4421258877ab0",
      "tree": "8ee5914529d70120528a630a8e904c22f8c4f98c",
      "parents": [
        "90fdb0b98a62d78a0650b9fd3ddc58a48f71d740"
      ],
      "author": {
        "name": "Mike Snitzer",
        "email": "snitzer@redhat.com",
        "time": "Mon Nov 08 14:39:12 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Nov 10 14:40:53 2010 +0100"
      },
      "message": "block: read i_size with i_size_read()\n\nConvert direct reads of an inode\u0027s i_size to using i_size_read().\n\ni_size_{read,write} use a seqcount to protect reads from accessing\nincomple writes.  Concurrent i_size_write()s require mutual exclussion\nto protect the seqcount that is used by i_size_{read,write}.  But\ni_size_read() callers do not need to use additional locking.\n\nSigned-off-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nAcked-by: NeilBrown \u003cneilb@suse.de\u003e\nAcked-by: Lars Ellenberg \u003clars.ellenberg@linbit.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9f864c80913467312c7b8690e41fb5ebd1b50e92",
      "tree": "dea8f56529d175bc2b666b52d2f819c82abc3a19",
      "parents": [
        "9284bcf4e335e5f18a8bc7b26461c33ab60d0689"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 29 11:31:42 2010 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Nov 10 14:40:42 2010 +0100"
      },
      "message": "block: take care not to overflow when calculating total iov length\n\nReported-by: Dan Rosenberg \u003cdrosenberg@vsecurity.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9284bcf4e335e5f18a8bc7b26461c33ab60d0689",
      "tree": "82860d516748327e9be4903e541479e7ac40e6a1",
      "parents": [
        "151f52f09c5728ecfdd0c289da1a4b30bb416f2c"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 29 08:10:18 2010 -0600"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Nov 10 14:40:42 2010 +0100"
      },
      "message": "block: check for proper length of iov entries in blk_rq_map_user_iov()\n\nEnsure that we pass down properly validated iov segments before\ncalling into the mapping or copy functions.\n\nReported-by: Dan Rosenberg \u003cdrosenberg@vsecurity.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "2b9408a45978dcda77407859148deeccf403c372",
      "tree": "52fc549e7cc879c6dea98554f75da24df31c07cf",
      "parents": [
        "8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Tue Nov 09 14:51:13 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Nov 09 14:51:13 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t schedule a dispatch for a non-idle queue\n\nVivek suggests we don\u0027t need schedule a dispatch when an idle queue\nbecomes nonidle. And he is right, cfq_should_preempt already covers\nthe logic.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07",
      "tree": "2ba1aadf339af7d69931151e9d51f8054753ff85",
      "parents": [
        "d2d59e18a1ea8ecdd1c0a52af320e9a7f5391cc4"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:04 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:04 2010 +0100"
      },
      "message": "cfq-iosched: don\u0027t idle if a deep seek queue is slow\n\nIf a deep seek queue slowly deliver requests but disk is much faster, idle\nfor the queue just wastes disk throughput. If the queue delevers all requests\nbefore half its slice is used, the patch disable idle for it.\nIn my test, application delivers 32 requests one time, the disk can accept\n128 requests at maxium and disk is fast. without the patch, the throughput\nis just around 30m/s, while with it, the speed is about 80m/s. The disk is\na SSD, but is detected as a rotational disk. I can configure it as SSD, but\nI thought the deep seek queue logic should be fixed too, for example,\nconsidering a fast raid.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "d2d59e18a1ea8ecdd1c0a52af320e9a7f5391cc4",
      "tree": "b39812dc8fd9ae552c361a84a10dcd61d2caaab5",
      "parents": [
        "c1e44756fdb7b363fd22cb5514dced40752e36c5"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:03 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:03 2010 +0100"
      },
      "message": "cfq-iosched: schedule dispatch for noidle queue\n\nA queue is idle at cfq_dispatch_requests(), but it gets noidle later. Unless\nother task explictly does unplug or all requests are drained, we will not\ndeliever requests to the disk even cfq_arm_slice_timer doesn\u0027t make the\nqueue idle. For example, cfq_should_idle() returns true because of\nservice_tree-\u003ecount \u003d\u003d 1, and then other queues are added. Note, I didn\u0027t\nsee obvious performance impacts so far with the patch, but just thought\nthis could be a problem.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c1e44756fdb7b363fd22cb5514dced40752e36c5",
      "tree": "796ca172be3270043efa02d5d0bb2552e48cd9d8",
      "parents": [
        "f6f94e2ab1b33f0082ac22d71f66385a60d8157f"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shaohua.li@intel.com",
        "time": "Mon Nov 08 15:01:02 2010 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Nov 08 15:01:02 2010 +0100"
      },
      "message": "cfq-iosched: do cleanup\n\nSome functions should return boolean.\n\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b595076a180a56d1bb170e6eceda6eb9d76f4cd3",
      "tree": "bc01ec7283808013e0b8ce7713fd6fc40f810429",
      "parents": [
        "6aaccece1c483f189f76f1282b3984ff4c7ecb0a"
      ],
      "author": {
        "name": "Uwe Kleine-König",
        "email": "u.kleine-koenig@pengutronix.de",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Nov 01 15:38:34 2010 -0400"
      },
      "message": "tree-wide: fix comment/printk typos\n\n\"gadget\", \"through\", \"command\", \"maintain\", \"maintain\", \"controller\", \"address\",\n\"between\", \"initiali[zs]e\", \"instead\", \"function\", \"select\", \"already\",\n\"equal\", \"access\", \"management\", \"hierarchy\", \"registration\", \"interest\",\n\"relative\", \"memory\", \"offset\", \"already\",\n\nSigned-off-by: Uwe Kleine-König \u003cu.kleine-koenig@pengutronix.de\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "8e775167d54e6521e7cdbc03ee7ec42a8c67b49a",
      "tree": "a49914306fb28505c6e21a456df8bdc40d6eac23",
      "parents": [
        "4b37ba90f49d4157ac5628f8d730d3505f176724",
        "f253b86b4ad1b3220544e75880510fd455ebd23f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 25 07:45:10 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 25 07:45:10 2010 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-linus\u0027 of git://git.kernel.dk/linux-2.6-block:\n  Revert \"block: fix accounting bug on cross partition merges\"\n"
    },
    {
      "commit": "229aebb873e29726b91e076161649cf45154b0bf",
      "tree": "acc02a3702215bce8d914f4c8cc3d7a1382b1c67",
      "parents": [
        "8de547e1824437f3c6af180d3ed2162fa4b3f389",
        "50a23e6eec6f20d55a3a920e47adb455bff6046e"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 24 13:41:39 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Oct 24 13:41:39 2010 -0700"
      },
      "message": "Merge branch \u0027for-next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-next\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (39 commits)\n  Update broken web addresses in arch directory.\n  Update broken web addresses in the kernel.\n  Revert \"drivers/usb: Remove unnecessary return\u0027s from void functions\" for musb gadget\n  Revert \"Fix typo: configuation \u003d\u003e configuration\" partially\n  ida: document IDA_BITMAP_LONGS calculation\n  ext2: fix a typo on comment in ext2/inode.c\n  drivers/scsi: Remove unnecessary casts of private_data\n  drivers/s390: Remove unnecessary casts of private_data\n  net/sunrpc/rpc_pipe.c: Remove unnecessary casts of private_data\n  drivers/infiniband: Remove unnecessary casts of private_data\n  drivers/gpu/drm: Remove unnecessary casts of private_data\n  kernel/pm_qos_params.c: Remove unnecessary casts of private_data\n  fs/ecryptfs: Remove unnecessary casts of private_data\n  fs/seq_file.c: Remove unnecessary casts of private_data\n  arm: uengine.c: remove C99 comments\n  arm: scoop.c: remove C99 comments\n  Fix typo configue \u003d\u003e configure in comments\n  Fix typo: configuation \u003d\u003e configuration\n  Fix typo interrest[ing|ed] \u003d\u003e interest[ing|ed]\n  Fix various typos of valid in comments\n  ...\n\nFix up trivial conflicts in:\n\tdrivers/char/ipmi/ipmi_si_intf.c\n\tdrivers/usb/gadget/rndis.c\n\tnet/irda/irnet/irnet_ppp.c\n"
    },
    {
      "commit": "f253b86b4ad1b3220544e75880510fd455ebd23f",
      "tree": "cc2dd76b8ffc8df4356c1e95bd15276169dd335e",
      "parents": [
        "35da7a307c535f9c2929cae277f3df425c9f9b1e"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sun Oct 24 22:06:02 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sun Oct 24 22:06:02 2010 +0200"
      },
      "message": "Revert \"block: fix accounting bug on cross partition merges\"\n\nThis reverts commit 7681bfeeccff5efa9eb29bf09249a3c400b15327.\n\nConflicts:\n\n\tinclude/linux/genhd.h\n\nIt has numerous issues with the cleanup path and non-elevator\ndevices. Revert it for now so we can come up with a clean\nversion without rushing things.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7ad58c028652753814054f4e3ac58f925e7343f4",
      "tree": "2e3bc1c5e3c98078b970483cd49a49d7c1ae0dcf",
      "parents": [
        "7f3883962870dd28b5f2322ac44a9d03640ef448"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Oct 23 20:40:26 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Oct 23 20:40:26 2010 +0200"
      },
      "message": "block: fix use-after-free bug in blk throttle code\n\nblk_throtl_exit() frees the throttle data hanging off the queue\nin blk_cleanup_queue(), but blk_put_queue() will indirectly\ndereference this data when calling blk_sync_queue() which in\nturns calls throtl_shutdown_timer_wq().\n\nFix this by moving the freeing of the throttle data to when\nthe queue is truly being released, and post the call to\nblk_sync_queue().\n\nReported-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nTested-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b9da0571050c09863e59f94d0b8594a290d61b88",
      "tree": "3632c4fee768db9a27a5c872bd42133692e2f3d0",
      "parents": [
        "f8cae0f03f75adb54b1d48ddbc90f84a1f5de186",
        "5abd935661e01289ba143c3b2c1ba300c65bcc5f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 19:36:42 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 19:36:42 2010 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: (31 commits)\n  driver core: Display error codes when class suspend fails\n  Driver core: Add section count to memory_block struct\n  Driver core: Add mutex for adding/removing memory blocks\n  Driver core: Move find_memory_block routine\n  hpilo: Despecificate driver from iLO generation\n  driver core: Convert link_mem_sections to use find_memory_block_hinted.\n  driver core: Introduce find_memory_block_hinted which utilizes kset_find_obj_hinted.\n  kobject: Introduce kset_find_obj_hinted.\n  driver core: fix build for CONFIG_BLOCK not enabled\n  driver-core: base: change to new flag variable\n  sysfs: only access bin file vm_ops with the active lock\n  sysfs: Fail bin file mmap if vma close is implemented.\n  FW_LOADER: fix kconfig dependency warning on HOTPLUG\n  uio: Statically allocate uio_class and use class .dev_attrs.\n  uio: Support 2^MINOR_BITS minors\n  uio: Cleanup irq handling.\n  uio: Don\u0027t clear driver data\n  uio: Fix lack of locking in init_uio_class\n  SYSFS: Allow boot time switching between deprecated and modern sysfs layout\n  driver core: remove CONFIG_SYSFS_DEPRECATED_V2 but keep it for block devices\n  ...\n"
    },
    {
      "commit": "a2887097f25cd38cadfc11d10769e2b349fb5eca",
      "tree": "cd4adcb305365d6ba9acd2c02d4eb9d0125c6f8d",
      "parents": [
        "8abfc6e7a45eb74e51904bbae676fae008b11366",
        "005a1d15f5a6b2bb4ada80349513effbf22b4588"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:07:18 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:07:18 2010 -0700"
      },
      "message": "Merge branch \u0027for-2.6.37/barrier\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.37/barrier\u0027 of git://git.kernel.dk/linux-2.6-block: (46 commits)\n  xen-blkfront: disable barrier/flush write support\n  Added blk-lib.c and blk-barrier.c was renamed to blk-flush.c\n  block: remove BLKDEV_IFL_WAIT\n  aic7xxx_old: removed unused \u0027req\u0027 variable\n  block: remove the BH_Eopnotsupp flag\n  block: remove the BLKDEV_IFL_BARRIER flag\n  block: remove the WRITE_BARRIER flag\n  swap: do not send discards as barriers\n  fat: do not send discards as barriers\n  ext4: do not send discards as barriers\n  jbd2: replace barriers with explicit flush / FUA usage\n  jbd2: Modify ASYNC_COMMIT code to not rely on queue draining on barrier\n  jbd: replace barriers with explicit flush / FUA usage\n  nilfs2: replace barriers with explicit flush / FUA usage\n  reiserfs: replace barriers with explicit flush / FUA usage\n  gfs2: replace barriers with explicit flush / FUA usage\n  btrfs: replace barriers with explicit flush / FUA usage\n  xfs: replace barriers with explicit flush / FUA usage\n  block: pass gfp_mask and flags to sb_issue_discard\n  dm: convey that all flushes are processed as empty\n  ...\n"
    },
    {
      "commit": "e9dd2b6837e26fe202708cce5ea4bb4ee3e3482e",
      "tree": "f42fd892495bfc4cbb740d06b016d267c9c42d00",
      "parents": [
        "4f3a29dadaf999a273f1e7fe2476595d0283eef3",
        "b4627321e18582dcbdeb45d77df29d3177107c65"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:00:32 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 17:00:32 2010 -0700"
      },
      "message": "Merge branch \u0027for-2.6.37/core\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.37/core\u0027 of git://git.kernel.dk/linux-2.6-block: (39 commits)\n  cfq-iosched: Fix a gcc 4.5 warning and put some comments\n  block: Turn bvec_k{un,}map_irq() into static inline functions\n  block: fix accounting bug on cross partition merges\n  block: Make the integrity mapped property a bio flag\n  block: Fix double free in blk_integrity_unregister\n  block: Ensure physical block size is unsigned int\n  blkio-throttle: Fix possible multiplication overflow in iops calculations\n  blkio-throttle: limit max iops value to UINT_MAX\n  blkio-throttle: There is no need to convert jiffies to milli seconds\n  blkio-throttle: Fix link failure failure on i386\n  blkio: Recalculate the throttled bio dispatch time upon throttle limit change\n  blkio: Add root group to td-\u003etg_list\n  blkio: deletion of a cgroup was causes oops\n  blkio: Do not export throttle files if CONFIG_BLK_DEV_THROTTLING\u003dn\n  block: set the bounce_pfn to the actual DMA limit rather than to max memory\n  block: revert bad fix for memory hotplug causing bounces\n  Fix compile error in blk-exec.c for !CONFIG_DETECT_HUNG_TASK\n  block: set the bounce_pfn to the actual DMA limit rather than to max memory\n  block: Prevent hang_check firing during long I/O\n  cfq: improve fsync performance for small files\n  ...\n\nFix up trivial conflicts due to __rcu sparse annotation in include/linux/genhd.h\n"
    },
    {
      "commit": "092e0e7e520a1fca03e13c9f2d157432a8657ff2",
      "tree": "451897252c4c08c4b5a8ef535da156f1e817e80b",
      "parents": [
        "79f14b7c56d3b3ba58f8b43d1f70b9b71477a800",
        "776c163b1b93c8dfa5edba885bc2bfbc2d228a5f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:52:56 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:52:56 2010 -0700"
      },
      "message": "Merge branch \u0027llseek\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl\n\n* \u0027llseek\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl:\n  vfs: make no_llseek the default\n  vfs: don\u0027t use BKL in default_llseek\n  llseek: automatically add .llseek fop\n  libfs: use generic_file_llseek for simple_attr\n  mac80211: disallow seeks in minstrel debug code\n  lirc: make chardev nonseekable\n  viotape: use noop_llseek\n  raw: use explicit llseek file operations\n  ibmasmfs: use generic_file_llseek\n  spufs: use llseek in all file operations\n  arm/omap: use generic_file_llseek in iommu_debug\n  lkdtm: use generic_file_llseek in debugfs\n  net/wireless: use generic_file_llseek in debugfs\n  drm: use noop_llseek\n"
    },
    {
      "commit": "c37927d4359e81b85de644f8fb08878717cf5f3f",
      "tree": "25dabf2d905e1410819d1bdaba0bf5f779100d3c",
      "parents": [
        "5704e44d283e907623e3775c1262f206a2c48cf3",
        "2a48fc0ab24241755dc93bfd4f01d68efab47f5a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:49:54 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:49:54 2010 -0700"
      },
      "message": "Merge branch \u0027trivial\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl\n\n* \u0027trivial\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl:\n  block: autoconvert trivial BKL users to private mutex\n  drivers: autoconvert trivial BKL users to private mutex\n  ipmi: autoconvert trivial BKL users to private mutex\n  mac: autoconvert trivial BKL users to private mutex\n  mtd: autoconvert trivial BKL users to private mutex\n  scsi: autoconvert trivial BKL users to private mutex\n\nFix up trivial conflicts (due to addition of private mutex right next to\ndeletion of a version string) in drivers/char/pcmcia/cm40[04]0_cs.c\n"
    },
    {
      "commit": "e52eec13cd6b7f30ab19081b387813e03e592ae5",
      "tree": "7b327e0b9283c578fb10922edcf6e10b3b8fd943",
      "parents": [
        "39aba963d937edb20db7d9d93e6dda5d2adfdcdd"
      ],
      "author": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Wed Sep 08 16:54:17 2010 +0200"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Fri Oct 22 10:16:43 2010 -0700"
      },
      "message": "SYSFS: Allow boot time switching between deprecated and modern sysfs layout\n\nI have some systems which need legacy sysfs due to old tools that are\nmaking assumptions that a directory can never be a symlink to another\ndirectory, and it\u0027s a big hazzle to compile separate kernels for them.\n\nThis patch turns CONFIG_SYSFS_DEPRECATED into a run time option\nthat can be switched on/off the kernel command line. This way\nthe same binary can be used in both cases with just a option\non the command line.\n\nThe old CONFIG_SYSFS_DEPRECATED_V2 option is still there to set\nthe default. I kept the weird name to not break existing\nconfig files.\n\nAlso the compat code can be still completely disabled by undefining\nCONFIG_SYSFS_DEPRECATED_SWITCH -- just the optimizer takes\ncare of this now instead of lots of ifdefs. This makes the code\nlook nicer.\n\nv2: This is an updated version on top of Kay\u0027s patch to only\nhandle the block devices. I tested it on my old systems\nand that seems to work.\n\nCc: axboe@kernel.dk\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "b4627321e18582dcbdeb45d77df29d3177107c65",
      "tree": "f494dae7f39f219d73aa9752dfd3844293d65f50",
      "parents": [
        "11a691bea48887c27425cc40bf291e74c922df25"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 22 09:48:43 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 22 09:48:43 2010 +0200"
      },
      "message": "cfq-iosched: Fix a gcc 4.5 warning and put some comments\n\n- Andi encountedred following warning with gcc 4.5\n\n  linux/block/cfq-iosched.c: In function ‘cfq_dispatch_requests’:\n  linux/block/cfq-iosched.c:2156:3: warning: array subscript is above array\n  bounds\n\n- Warning happens due to following code.\n\n  slice \u003d group_slice * count /\n\t\tmax_t(unsigned, cfqg-\u003ebusy_queues_avg[cfqd-\u003eserving_prio],\n\t\tcfq_group_busy_queues_wl(cfqd-\u003eserving_prio, cfqd, cfqg));\n\n  gcc is complaining about cfqg-\u003ebusy_queues_avg[] being indexed by CFQ\n  prio classes (RT, BE and IDLE) while the array size is only 2.\n\n- At run time, we never access cfqg-\u003ebusy_queues_avg[IDLE] and return from\n  function before this code hits.\n\n- To fix warning increase the array size though it will remain unused. This\n  patch also puts some comments to clarify some of the confusions.\n\n- I have taken Jens\u0027s patch and modified it a bit.\n\n- Compile tested with gcc 4.4 and boot tested. I don\u0027t have gcc 4.5\n  running, Andi can you please test it with gcc 4.5 to make sure it\n  worked.\n\nReported-by: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "30c278192f9ab06125fb042f6e46763e0fd7140a",
      "tree": "eb457072fec9bed01d89a71ab61257785a24a66a",
      "parents": [
        "ef2533dae5a93527f2aac9449c0b1564c5ed2c2f",
        "478971600e47cb83ff2d3c63c5c24f2b04b0d6a1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 20 13:13:09 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 20 13:13:09 2010 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6:\n  [SCSI] bsg: fix incorrect device_status value\n  [SCSI] Fix VPD inquiry page wrapper\n"
    },
    {
      "commit": "fa251f89903d73989e2f63e13d0eaed1e07ce0da",
      "tree": "3f7fe779941e3b6d67754dd7c44a32f48ea47c74",
      "parents": [
        "dd3932eddf428571762596e17b65f5dc92ca361b",
        "cd07202cc8262e1669edff0d97715f3dd9260917"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Oct 19 09:13:04 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Oct 19 09:13:04 2010 +0200"
      },
      "message": "Merge branch \u0027v2.6.36-rc8\u0027 into for-2.6.37/barrier\n\nConflicts:\n\tblock/blk-core.c\n\tdrivers/block/loop.c\n\tmm/swapfile.c\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "7681bfeeccff5efa9eb29bf09249a3c400b15327",
      "tree": "8557964a2df96e253dcf1a61734b98dbfbf192d6",
      "parents": [
        "495d2b3883682fcd1c3dee3a45e38fd00154ae25"
      ],
      "author": {
        "name": "Yasuaki Ishimatsu",
        "email": "isimatu.yasuaki@jp.fujitsu.com",
        "time": "Tue Oct 19 09:05:00 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Oct 19 09:07:02 2010 +0200"
      },
      "message": "block: fix accounting bug on cross partition merges\n\n/proc/diskstats would display a strange output as follows.\n\n$ cat /proc/diskstats |grep sda\n   8       0 sda 90524 7579 102154 20464 0 0 0 0 0 14096 20089\n   8       1 sda1 19085 1352 21841 4209 0 0 0 0 4294967064 15689 4293424691\n                                                ~~~~~~~~~~\n   8       2 sda2 71252 3624 74891 15950 0 0 0 0 232 23995 1562390\n   8       3 sda3 54 487 2188 92 0 0 0 0 0 88 92\n   8       4 sda4 4 0 8 0 0 0 0 0 0 0 0\n   8       5 sda5 81 2027 2130 138 0 0 0 0 0 87 137\n\nIts reason is the wrong way of accounting hd_struct-\u003ein_flight. When a bio is\nmerged into a request belongs to different partition by ELEVATOR_FRONT_MERGE.\n\nThe detailed root cause is as follows.\n\nAssuming that there are two partition, sda1 and sda2.\n\n1. A request for sda2 is in request_queue. Hence sda1\u0027s hd_struct-\u003ein_flight\n   is 0 and sda2\u0027s one is 1.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |          0\n   sda2 |          1\n   ---------------------------\n\n2. A bio belongs to sda1 is issued and is merged into the request mentioned on\n   step1 by ELEVATOR_BACK_MERGE. The first sector of the request is changed\n   from sda2 region to sda1 region. However the two partition\u0027s\n   hd_struct-\u003ein_flight are not changed.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |          0\n   sda2 |          1\n   ---------------------------\n\n3. The request is finished and blk_account_io_done() is called. In this case,\n   sda2\u0027s hd_struct-\u003ein_flight, not a sda1\u0027s one, is decremented.\n\n        | hd_struct-\u003ein_flight\n   ---------------------------\n   sda1 |         -1\n   sda2 |          1\n   ---------------------------\n\nThe patch fixes the problem by caching the partition lookup\ninside the request structure, hence making sure that the increment\nand decrement will always happen on the same partition struct. This\nalso speeds up IO with accounting enabled, since it cuts down on\nthe number of lookups we have to do.\n\nWhen reloading partition tables, quiesce IO to ensure that no\nrequest references to the partition struct exists. When it is safe\nto free the partition table, the IO for that device is restarted\nagain.\n\nSigned-off-by: Yasuaki Ishimatsu \u003cisimatu.yasuaki@jp.fujitsu.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "478971600e47cb83ff2d3c63c5c24f2b04b0d6a1",
      "tree": "8a426c30523aa558249bc8e4844b757af6ac1b96",
      "parents": [
        "16d3ea26f82271fef9b1c4523b5e1ea31fa39eec"
      ],
      "author": {
        "name": "FUJITA Tomonori",
        "email": "fujita.tomonori@lab.ntt.co.jp",
        "time": "Fri Sep 17 00:46:42 2010 +0900"
      },
      "committer": {
        "name": "James Bottomley",
        "email": "James.Bottomley@suse.de",
        "time": "Fri Oct 15 10:18:48 2010 -0400"
      },
      "message": "[SCSI] bsg: fix incorrect device_status value\n\nbsg incorrectly returns sg\u0027s masked_status value for device_status.\n\n[jejb: fix up expression logic]\nReported-by: Douglas Gilbert \u003cdgilbert@interlog.com\u003e\nSigned-off-by: FUJITA Tomonori \u003cfujita.tomonori@lab.ntt.co.jp\u003e\nCc: Stable Tree \u003cstable@kernel.org\u003e\nSigned-off-by: James Bottomley \u003cJames.Bottomley@suse.de\u003e\n"
    },
    {
      "commit": "6038f373a3dc1f1c26496e60b6c40b164716f07e",
      "tree": "a0d3bbd026eea41b9fc36b8c722cbaf56cd9f825",
      "parents": [
        "1ec5584e3edf9c4bf2c88c846534d19cf986ba11"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Sun Aug 15 18:52:59 2010 +0200"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Fri Oct 15 15:53:27 2010 +0200"
      },
      "message": "llseek: automatically add .llseek fop\n\nAll file_operations should get a .llseek operation so we can make\nnonseekable_open the default for future file operations without a\n.llseek pointer.\n\nThe three cases that we can automatically detect are no_llseek, seq_lseek\nand default_llseek. For cases where we can we can automatically prove that\nthe file offset is always ignored, we use noop_llseek, which maintains\nthe current behavior of not returning an error from a seek.\n\nNew drivers should normally not use noop_llseek but instead use no_llseek\nand call nonseekable_open at open time.  Existing drivers can be converted\nto do the same when the maintainer knows for certain that no user code\nrelies on calling seek on the device file.\n\nThe generated code is often incorrectly indented and right now contains\ncomments that clarify for each added line why a specific variant was\nchosen. In the version that gets submitted upstream, the comments will\nbe gone and I will manually fix the indentation, because there does not\nseem to be a way to do that using coccinelle.\n\nSome amount of new code is currently sitting in linux-next that should get\nthe same modifications, which I will do at the end of the merge window.\n\nMany thanks to Julia Lawall for helping me learn to write a semantic\npatch that does all this.\n\n\u003d\u003d\u003d\u003d\u003d begin semantic patch \u003d\u003d\u003d\u003d\u003d\n// This adds an llseek\u003d method to all file operations,\n// as a preparation for making no_llseek the default.\n//\n// The rules are\n// - use no_llseek explicitly if we do nonseekable_open\n// - use seq_lseek for sequential files\n// - use default_llseek if we know we access f_pos\n// - use noop_llseek if we know we don\u0027t access f_pos,\n//   but we still want to allow users to call lseek\n//\n@ open1 exists @\nidentifier nested_open;\n@@\nnested_open(...)\n{\n\u003c+...\nnonseekable_open(...)\n...+\u003e\n}\n\n@ open exists@\nidentifier open_f;\nidentifier i, f;\nidentifier open1.nested_open;\n@@\nint open_f(struct inode *i, struct file *f)\n{\n\u003c+...\n(\nnonseekable_open(...)\n|\nnested_open(...)\n)\n...+\u003e\n}\n\n@ read disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n   *off \u003d E\n|\n   *off +\u003d E\n|\n   func(..., off, ...)\n|\n   E \u003d *off\n)\n...+\u003e\n}\n\n@ read_no_fpos disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ write @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n  *off \u003d E\n|\n  *off +\u003d E\n|\n  func(..., off, ...)\n|\n  E \u003d *off\n)\n...+\u003e\n}\n\n@ write_no_fpos @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ fops0 @\nidentifier fops;\n@@\nstruct file_operations fops \u003d {\n ...\n};\n\n@ has_llseek depends on fops0 @\nidentifier fops0.fops;\nidentifier llseek_f;\n@@\nstruct file_operations fops \u003d {\n...\n .llseek \u003d llseek_f,\n...\n};\n\n@ has_read depends on fops0 @\nidentifier fops0.fops;\nidentifier read_f;\n@@\nstruct file_operations fops \u003d {\n...\n .read \u003d read_f,\n...\n};\n\n@ has_write depends on fops0 @\nidentifier fops0.fops;\nidentifier write_f;\n@@\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n...\n};\n\n@ has_open depends on fops0 @\nidentifier fops0.fops;\nidentifier open_f;\n@@\nstruct file_operations fops \u003d {\n...\n .open \u003d open_f,\n...\n};\n\n// use no_llseek if we call nonseekable_open\n////////////////////////////////////////////\n@ nonseekable1 depends on !has_llseek \u0026\u0026 has_open @\nidentifier fops0.fops;\nidentifier nso ~\u003d \"nonseekable_open\";\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d nso, ...\n+.llseek \u003d no_llseek, /* nonseekable */\n};\n\n@ nonseekable2 depends on !has_llseek @\nidentifier fops0.fops;\nidentifier open.open_f;\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d open_f, ...\n+.llseek \u003d no_llseek, /* open uses nonseekable */\n};\n\n// use seq_lseek for sequential files\n/////////////////////////////////////\n@ seq depends on !has_llseek @\nidentifier fops0.fops;\nidentifier sr ~\u003d \"seq_read\";\n@@\nstruct file_operations fops \u003d {\n...  .read \u003d sr, ...\n+.llseek \u003d seq_lseek, /* we have seq_read */\n};\n\n// use default_llseek if there is a readdir\n///////////////////////////////////////////\n@ fops1 depends on !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier readdir_e;\n@@\n// any other fop is used that changes pos\nstruct file_operations fops \u003d {\n... .readdir \u003d readdir_e, ...\n+.llseek \u003d default_llseek, /* readdir is present */\n};\n\n// use default_llseek if at least one of read/write touches f_pos\n/////////////////////////////////////////////////////////////////\n@ fops2 depends on !fops1 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read.read_f;\n@@\n// read fops use offset\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d default_llseek, /* read accesses f_pos */\n};\n\n@ fops3 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+\t.llseek \u003d default_llseek, /* write accesses f_pos */\n};\n\n// Use noop_llseek if neither read nor write accesses f_pos\n///////////////////////////////////////////////////////////\n\n@ fops4 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !fops3 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\nidentifier write_no_fpos.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n .read \u003d read_f,\n...\n+.llseek \u003d noop_llseek, /* read and write both use no f_pos */\n};\n\n@ depends on has_write \u0026\u0026 !has_read \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write_no_fpos.write_f;\n@@\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+.llseek \u003d noop_llseek, /* write uses no f_pos */\n};\n\n@ depends on has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\n@@\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d noop_llseek, /* read uses no f_pos */\n};\n\n@ depends on !has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\n@@\nstruct file_operations fops \u003d {\n...\n+.llseek \u003d noop_llseek, /* no read or write fn */\n};\n\u003d\u003d\u003d\u003d\u003d End semantic patch \u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Julia Lawall \u003cjulia@diku.dk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\n"
    },
    {
      "commit": "e817bf3f68f55e7307c3e9abe5f32d0c05c83988",
      "tree": "0280cb83bb13b00d64af3cfc5960fcdd2a5343ba",
      "parents": [
        "892b6f90db81cccb723d5d92f4fddc2d68b206e1"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Fri Oct 15 15:49:18 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 15 15:49:18 2010 +0200"
      },
      "message": "block: Fix double free in blk_integrity_unregister\n\nCommit 3839e4b introduced a kobject_put but failed to remove the\nkmem_cache_free beneath it, leading to a double free.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "892b6f90db81cccb723d5d92f4fddc2d68b206e1",
      "tree": "a4cedbff388c2cc0659c76f429003b856ef17943",
      "parents": [
        "c49c06e4960949a9bced708858433fcf6ca36a9c"
      ],
      "author": {
        "name": "Martin K. Petersen",
        "email": "martin.petersen@oracle.com",
        "time": "Wed Oct 13 21:18:03 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Wed Oct 13 21:19:12 2010 +0200"
      },
      "message": "block: Ensure physical block size is unsigned int\n\nPhysical block size was declared unsigned int to accomodate the maximum\nsize reported by READ CAPACITY(16).  Make sure we use the right type in\nthe related functions.\n\nSigned-off-by: Martin K. Petersen \u003cmartin.petersen@oracle.com\u003e\nAcked-by: Mike Snitzer \u003csnitzer@redhat.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "430c62fb2948d964cf8dc7f3e2f69623c04ef62f",
      "tree": "79923717e1694745def152baec1a4cc09a5d072c",
      "parents": [
        "cb655d0f3d57c23db51b981648e452988c0223f9"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Oct 07 09:35:16 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Oct 07 09:35:16 2010 +0200"
      },
      "message": "elevator: fix oops on early call to elevator_change()\n\n2.6.36 introduces an API for drivers to switch the IO scheduler\ninstead of manually calling the elevator exit and init functions.\nThis API was added since q-\u003eelevator must be cleared in between\nthose two calls. And since we already have this functionality\ndirectly from use by the sysfs interface to switch schedulers\nonline, it was prudent to reuse it internally too.\n\nBut this API needs the queue to be in a fully initialized state\nbefore it is called, or it will attempt to unregister elevator\nkobjects before they have been added. This results in an oops\nlike this:\n\nBUG: unable to handle kernel NULL pointer dereference at 0000000000000051\nIP: [\u003cffffffff8116f15e\u003e] sysfs_create_dir+0x2e/0xc0\nPGD 47ddfc067 PUD 47c6a1067 PMD 0\nOops: 0000 [#1] PREEMPT SMP\nlast sysfs file: /sys/devices/pci0000:00/0000:00:02.0/0000:04:00.1/irq\nCPU 2\nModules linked in: t(+) loop hid_apple usbhid ahci ehci_hcd uhci_hcd libahci usbcore nls_base igb\n\nPid: 7319, comm: modprobe Not tainted 2.6.36-rc6+ #132 QSSC-S4R/QSSC-S4R\nRIP: 0010:[\u003cffffffff8116f15e\u003e]  [\u003cffffffff8116f15e\u003e] sysfs_create_dir+0x2e/0xc0\nRSP: 0018:ffff88027da25d08  EFLAGS: 00010246\nRAX: ffff88047c68c528 RBX: 00000000fffffffe RCX: 0000000000000000\nRDX: 000000000000002f RSI: 000000000000002f RDI: ffff88047e196c88\nRBP: ffff88027da25d38 R08: 0000000000000000 R09: d84156c5635688c0\nR10: d84156c5635688c0 R11: 0000000000000000 R12: ffff88047e196c88\nR13: 0000000000000000 R14: 0000000000000000 R15: ffff88047c68c528\nFS:  00007fcb0b26f6e0(0000) GS:ffff880287400000(0000) knlGS:0000000000000000\nCS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b\nCR2: 0000000000000051 CR3: 000000047e76e000 CR4: 00000000000006e0\nDR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\nDR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\nProcess modprobe (pid: 7319, threadinfo ffff88027da24000, task ffff88027d377090)\nStack:\n ffff88027da25d58 ffff88047c68c528 00000000fffffffe ffff88047e196c88\n\u003c0\u003e ffff88047c68c528 ffff88047e05bd90 ffff88027da25d78 ffffffff8123fb77\n\u003c0\u003e ffff88047e05bd90 0000000000000000 ffff88047e196c88 ffff88047c68c528\nCall Trace:\n [\u003cffffffff8123fb77\u003e] kobject_add_internal+0xe7/0x1f0\n [\u003cffffffff8123fd98\u003e] kobject_add_varg+0x38/0x60\n [\u003cffffffff8123feb9\u003e] kobject_add+0x69/0x90\n [\u003cffffffff8116efe0\u003e] ? sysfs_remove_dir+0x20/0xa0\n [\u003cffffffff8103d48d\u003e] ? sub_preempt_count+0x9d/0xe0\n [\u003cffffffff8143de20\u003e] ? _raw_spin_unlock+0x30/0x50\n [\u003cffffffff8116efe0\u003e] ? sysfs_remove_dir+0x20/0xa0\n [\u003cffffffff8116eff4\u003e] ? sysfs_remove_dir+0x34/0xa0\n [\u003cffffffff81224204\u003e] elv_register_queue+0x34/0xa0\n [\u003cffffffff81224aad\u003e] elevator_change+0xfd/0x250\n [\u003cffffffffa007e000\u003e] ? t_init+0x0/0x361 [t]\n [\u003cffffffffa007e000\u003e] ? t_init+0x0/0x361 [t]\n [\u003cffffffffa007e0a8\u003e] t_init+0xa8/0x361 [t]\n [\u003cffffffff810001de\u003e] do_one_initcall+0x3e/0x170\n [\u003cffffffff8108c3fd\u003e] sys_init_module+0xbd/0x220\n [\u003cffffffff81002f2b\u003e] system_call_fastpath+0x16/0x1b\nCode: e5 41 56 41 55 41 54 49 89 fc 53 48 83 ec 10 48 85 ff 74 52 48 8b 47 18 49 c7 c5 00 46 61 81 48 85 c0 74 04 4c 8b 68 30 45 31 f6 \u003c41\u003e 80 7d 51 00 74 0e 49 8b 44 24 28 4c 89 e7 ff 50 20 49 89 c6\nRIP  [\u003cffffffff8116f15e\u003e] sysfs_create_dir+0x2e/0xc0\n RSP \u003cffff88027da25d08\u003e\nCR2: 0000000000000051\n---[ end trace a6541d3bf07945df ]---\n\nFix this by adding a registered bit to the elevator queue, which is\nset when the sysfs kobjects have been registered.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "2a48fc0ab24241755dc93bfd4f01d68efab47f5a",
      "tree": "fa9ae10ce89b26b7d8ae9ce24bdfda5e3007b763",
      "parents": [
        "613655fa39ff6957754fa8ceb8559980920eb8ee"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Wed Jun 02 14:28:52 2010 +0200"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Tue Oct 05 15:01:10 2010 +0200"
      },
      "message": "block: autoconvert trivial BKL users to private mutex\n\nThe block device drivers have all gained new lock_kernel\ncalls from a recent pushdown, and some of the drivers\nwere already using the BKL before.\n\nThis turns the BKL into a set of per-driver mutexes.\nStill need to check whether this is safe to do.\n\nfile\u003d$1\nname\u003d$2\nif grep -q lock_kernel ${file} ; then\n    if grep -q \u0027include.*linux.mutex.h\u0027 ${file} ; then\n            sed -i \u0027/include.*\u003clinux\\/smp_lock.h\u003e/d\u0027 ${file}\n    else\n            sed -i \u0027s/include.*\u003clinux\\/smp_lock.h\u003e.*$/include \u003clinux\\/mutex.h\u003e/g\u0027 ${file}\n    fi\n    sed -i ${file} \\\n        -e \"/^#include.*linux.mutex.h/,$ {\n                1,/^\\(static\\|int\\|long\\)/ {\n                     /^\\(static\\|int\\|long\\)/istatic DEFINE_MUTEX(${name}_mutex);\n\n} }\"  \\\n    -e \"s/\\(un\\)*lock_kernel\\\u003e[ ]*()/mutex_\\1lock(\\\u0026${name}_mutex)/g\" \\\n    -e \u0027/[      ]*cycle_kernel_lock();/d\u0027\nelse\n    sed -i -e \u0027/include.*\\\u003csmp_lock.h\\\u003e/d\u0027 ${file}  \\\n                -e \u0027/cycle_kernel_lock()/d\u0027\nfi\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\n"
    },
    {
      "commit": "c49c06e4960949a9bced708858433fcf6ca36a9c",
      "tree": "071c65544a98b6b0b599896591855f8ac69ab79a",
      "parents": [
        "9355aede5a3c4975e0ba8bbfe2b9d1fd73308916"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 21:16:42 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 21:16:42 2010 +0200"
      },
      "message": "blkio-throttle: Fix possible multiplication overflow in iops calculations\n\no User can specify max iops value of 32bit (UINT_MAX), through cgroup\n  interface. If a user has specified say 4294967294 (UNIT_MAX  - 2), then\n  on 32bit platform, following multiplication can overflow.\n\n  io_allowed \u003d (tg-\u003eiops[rw] * jiffy_elapsed_rnd)\n\no Explicitly cast the multiplication to 64bit and then perform division and\n  then check whether result is still great then UNINT_MAX.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "9355aede5a3c4975e0ba8bbfe2b9d1fd73308916",
      "tree": "73db212009de0e60d71d343b737d6a90449b06b8",
      "parents": [
        "5e901a2b95db709c5e40599ff4df6029be1e2a12"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 21:16:41 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 21:16:41 2010 +0200"
      },
      "message": "blkio-throttle: limit max iops value to UINT_MAX\n\n- Limit max iops value to UINT_MAX and return error to user if value is more\n  than that instead of accepting bigger values and truncating implicitly.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "5e901a2b95db709c5e40599ff4df6029be1e2a12",
      "tree": "e2450a1157c6f9411429fceb9939002d8c0282f8",
      "parents": [
        "3aad5d3ee4e4fce8f4b5bb6ca73342dcade42b33"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 21:16:38 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 21:16:38 2010 +0200"
      },
      "message": "blkio-throttle: There is no need to convert jiffies to milli seconds\n\no Do not convert jiffies to mili seconds as it is not required. Just work\n  with jiffies and HZ.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "3aad5d3ee4e4fce8f4b5bb6ca73342dcade42b33",
      "tree": "1ba65d361b6d77761f53769fc8891a56085422c6",
      "parents": [
        "fe0714377ee2ca161bf2afb7773e22f15f1786d4"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 14:51:14 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:51:14 2010 +0200"
      },
      "message": "blkio-throttle: Fix link failure failure on i386\n\no Randy Dunlap reported following linux-next failure. This patch fixes it.\n\non i386:\n\nblk-throttle.c:(.text+0x1abb8): undefined reference to `__udivdi3\u0027\nblk-throttle.c:(.text+0x1b1dc): undefined reference to `__udivdi3\u0027\n\no bytes_per_second interface is 64bit and I was continuing to do 64 bit\n  division even on 32bit platform without help of special macros/functions\n  hence the failure.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReported-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "fe0714377ee2ca161bf2afb7773e22f15f1786d4",
      "tree": "09f5e8686d741d012333c92251b8cc66793ef916",
      "parents": [
        "02977e4af7ed3b478c505e50491ffdf3e1314cf4"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 14:49:49 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:49:49 2010 +0200"
      },
      "message": "blkio: Recalculate the throttled bio dispatch time upon throttle limit change\n\no Currently any cgroup throttle limit changes are processed asynchronousy and\n  the change does not take affect till a new bio is dispatched from same group.\n\no It might happen that a user sets a redicuously low limit on throttling.\n  Say 1 bytes per second on reads. In such cases simple operations like mount\n  a disk can wait for a very long time.\n\no Once bio is throttled, there is no easy way to come out of that wait even if\n  user increases the read limit later.\n\no This patch fixes it. Now if a user changes the cgroup limits, we recalculate\n  the bio dispatch time according to new limits.\n\no Can\u0027t take queueu lock under blkcg_lock, hence after the change I wake\n  up the dispatch thread again which recalculates the time. So there are some\n  variables being synchronized across two threads without lock and I had to\n  make use of barriers. Hoping I have used barriers correctly. Any review of\n  memory barrier code especially will help.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "02977e4af7ed3b478c505e50491ffdf3e1314cf4",
      "tree": "5adb947a5c8567cbbff79459e9feaccf354fd81f",
      "parents": [
        "61014e96e6ed55b8db0af31574eec2a75d4e8755"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 14:49:48 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:49:48 2010 +0200"
      },
      "message": "blkio: Add root group to td-\u003etg_list\n\no Currently all the dynamically allocated groups, except root grp is added\n  to td-\u003etg_list. This was not a problem so far but in next patch I will\n  travel through td-\u003etg_list to process any updates of limits on the group.\n  If root group is not in tg_list, then root group\u0027s updates are not\n  processed.\n\no It is better to root group also to tg_list instead of doing special\n  processing for it during limit updates.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "61014e96e6ed55b8db0af31574eec2a75d4e8755",
      "tree": "69201251c3c5c51a0ed31dbe595743e60fbdaf52",
      "parents": [
        "13f98250f587b7defa39ed738dfa74b600e46e7b"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 14:49:44 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:49:44 2010 +0200"
      },
      "message": "blkio: deletion of a cgroup was causes oops\n\no Now a cgroup list of blkg elements can contain blkg from multiple policies.\n  Before sending an unlink event, make sure blkg belongs to they policy. If\n  policy does not own the blkg, do not send update for this blkg.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "13f98250f587b7defa39ed738dfa74b600e46e7b",
      "tree": "9d06cb3cd0c8737d1c9289ad6d19e4f4c8ec601f",
      "parents": [
        "efb012b361cf9319cd86ff169afa7550b7aa9336"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Fri Oct 01 14:49:41 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:49:41 2010 +0200"
      },
      "message": "blkio: Do not export throttle files if CONFIG_BLK_DEV_THROTTLING\u003dn\n\nCurrently throttling related files were visible even if user had disabled\nthrottling using config options. It was switching off background throttling\nof bio but not the cgroup files. This patch fixes it.\n\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "efb012b361cf9319cd86ff169afa7550b7aa9336",
      "tree": "e8c0027db29ec3898d835ca0fa6efab93d86b9bd",
      "parents": [
        "260a67a9e534f0c7d49ddd6451833d54ba39ac81"
      ],
      "author": {
        "name": "Malahal Naineni",
        "email": "malahal@us.ibm.com",
        "time": "Fri Oct 01 14:45:27 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:45:27 2010 +0200"
      },
      "message": "block: set the bounce_pfn to the actual DMA limit rather than to max memory\n\nThe bounce_pfn of the request queue in 64 bit systems is set to the\ncurrent max_low_pfn. Adding more memory later makes this incorrect.\nMemory allocated beyond this boot time max_low_pfn appear to require\nbounce buffers (bounce buffers are actually not allocated but used in\ncalculating segments that may result in \"over max segments limit\"\nerrors).\n\nSigned-off-by: Malahal Naineni \u003cmalahal@us.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "260a67a9e534f0c7d49ddd6451833d54ba39ac81",
      "tree": "acc1fc416481201b5f38a53a9d6877c00b117fd8",
      "parents": [
        "e4ecda1b60bfd2333c12bbe71b153d3b6bdc831a"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:42:43 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Oct 01 14:42:43 2010 +0200"
      },
      "message": "block: revert bad fix for memory hotplug causing bounces\n\nRevert \"block: set the bounce_pfn to the actual DMA limit rather than to max memory\"\n\nThis reverts commit c49825facfd4969585224a896a5e717f88450cad.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "f281fb5fe54e15a7ab802945e42f8e24fceb56b2",
      "tree": "51a7dd2e900b8ce4118d1357ab6e187edfc12e25",
      "parents": [
        "a850ea30374ebed32a0724742601861853fde869"
      ],
      "author": {
        "name": "Adrian Hunter",
        "email": "adrian.hunter@nokia.com",
        "time": "Sat Sep 25 12:42:55 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Sat Sep 25 12:42:55 2010 +0200"
      },
      "message": "block: prevent merges of discard and write requests\n\nAdd logic to prevent two I/O requests being merged if\nonly one of them is a discard.  Ditto secure discard.\n\nWithout this fix, it is possible for write requests\nto transform into discard requests.  For example:\n\n  Submit bio 1 to discard 8 sectors from sector n\n  Submit bio 2 to write 8 sectors from sector n + 16\n  Submit bio 3 to write 8 sectors from sector n + 8\n\nBio 1 becomes request 1.  Bio 2 becomes request 2.\nBio 3 is merged with request 2, and then subsequently\nrequest 2 is merged with request 1 resulting in just\none I/O request which discards all 24 sectors.\n\nSigned-off-by: Adrian Hunter \u003cadrian.hunter@nokia.com\u003e\n\n(Moved the checks above the position checks /Jens)\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "c49825facfd4969585224a896a5e717f88450cad",
      "tree": "2c244fdf033f858147875333024838e493d9e43e",
      "parents": [
        "4b1977698ceb4c4caa800d475127139da49966f9"
      ],
      "author": {
        "name": "Malahal Naineni",
        "email": "malahal@us.ibm.com",
        "time": "Fri Sep 24 20:25:49 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 24 20:27:16 2010 +0200"
      },
      "message": "block: set the bounce_pfn to the actual DMA limit rather than to max memory\n\nThe bounce_pfn of the request queue in 64 bit systems is set to the\ncurrent max_low_pfn. Adding more memory later makes this incorrect.\nMemory allocated beyond this boot time max_low_pfn appear to require\nbounce buffers (bounce buffers are actually not allocated but used in\ncalculating segments that may result in \"over max segments limit\"\nerrors).\n\nSigned-off-by: Malahal Naineni \u003cmalahal@us.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "4b1977698ceb4c4caa800d475127139da49966f9",
      "tree": "9302bafc15dfb6d3923febaa982feb2cb12063cb",
      "parents": [
        "749ef9f8423054e326f3a246327ed2db4b6d395f"
      ],
      "author": {
        "name": "Mark Lord",
        "email": "kernel@teksavvy.com",
        "time": "Fri Sep 24 09:51:13 2010 -0400"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Fri Sep 24 15:52:09 2010 +0200"
      },
      "message": "block: Prevent hang_check firing during long I/O\n\nDuring long I/O operations, the hang_check timer may fire,\ntrigger stack dumps that unnecessarily alarm the user.\n\nEg.  hdparm --security-erase NULL /dev/sdb  ## can take *hours* to complete\n\nSo, if hang_check is armed, we should wake up periodically\nto prevent it from triggering.  This patch uses a wake-up interval\nequal to half the hang_check timer period, which keeps overhead low enough.\n\nSigned-off-by: Mark Lord \u003cmlord@pobox.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "180be2a0420a0d680285e9352c0db85016b9ed2a",
      "tree": "455f9f890a52bf728c4d8ab96f8773ff41347a5c",
      "parents": [
        "a45dc2d2b8d1afa57c91dcfac224e50ffcd3f805"
      ],
      "author": {
        "name": "Vivek Goyal",
        "email": "vgoyal@redhat.com",
        "time": "Tue Sep 14 08:47:11 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Sep 21 11:49:17 2010 +0200"
      },
      "message": "cfq-iosched: fix a kernel OOPs when usb key is inserted\n\nMike reported a kernel crash when a usb key hotplug is performed while all\nkernel thrads are not in a root cgroup and are running in one of the child\ncgroups of blkio controller.\n\n\tBUG: unable to handle kernel NULL pointer dereference at 0000002c\n\tIP: [\u003cc11c7b08\u003e] cfq_get_queue+0x232/0x412\n\t*pde \u003d 00000000\n\tOops: 0000 [#1] PREEMPT\n\tlast sysfs file: /sys/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0/host3/scsi_host/host3/uevent\n\n\t[..]\n\tPid: 30039, comm: scsi_scan_3 Not tainted 2.6.35.2-fg.roam #1 Volvi2                         /Aspire 4315\n\tEIP: 0060:[\u003cc11c7b08\u003e] EFLAGS: 00010086 CPU: 0\n\tEIP is at cfq_get_queue+0x232/0x412\n\tEAX: f705f9c0 EBX: e977abac ECX: 00000000 EDX: 00000000\n\tESI: f00da400 EDI: f00da4ec EBP: e977a800 ESP: dff8fd00\n\t DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068\n\tProcess scsi_scan_3 (pid: 30039, ti\u003ddff8e000 task\u003df6b6c9a0 task.ti\u003ddff8e000)\n\tStack:\n\t 00000000 00000000 00000001 01ff0000 f00da508 00000000 f00da524 f00da540\n\t\u003c0\u003e e7994940 dd631750 f705f9c0 e977a820 e977ac44 f00da4d0 00000001 f6b6c9a0\n\t\u003c0\u003e 00000010 00008010 0000000b 00000000 00000001 e977a800 dd76fac0 00000246\n\tCall Trace:\n\t [\u003cc11c7f10\u003e] ? cfq_set_request+0x228/0x34c\n\t [\u003cc11c7ce8\u003e] ? cfq_set_request+0x0/0x34c\n\t [\u003cc11bb3b9\u003e] ? elv_set_request+0xf/0x1c\n\t [\u003cc11bdd51\u003e] ? get_request+0x1ad/0x22f\n\t [\u003cc11bddf2\u003e] ? get_request_wait+0x1f/0x11a\n\t [\u003cc11d013b\u003e] ? kvasprintf+0x33/0x3b\n\t [\u003cc127b537\u003e] ? scsi_execute+0x1d/0x103\n\t [\u003cc127b675\u003e] ? scsi_execute_req+0x58/0x83\n\t [\u003cc127c391\u003e] ? scsi_probe_and_add_lun+0x188/0x7c2\n\t [\u003cc12718c6\u003e] ? attribute_container_add_device+0x15/0xfa\n\t [\u003cc11c95d1\u003e] ? kobject_get+0xf/0x13\n\t [\u003cc126d1db\u003e] ? get_device+0x10/0x14\n\t [\u003cc127be93\u003e] ? scsi_alloc_target+0x217/0x24d\n\t [\u003cc127cbd8\u003e] ? __scsi_scan_target+0x95/0x480\n\t [\u003cc10204eb\u003e] ? dequeue_entity+0x14/0x1fe\n\t [\u003cc1020491\u003e] ? update_curr+0x165/0x1ab\n\t [\u003cc1020491\u003e] ? update_curr+0x165/0x1ab\n\t [\u003cc127d00d\u003e] ? scsi_scan_channel+0x4a/0x76\n\t [\u003cc127d0b0\u003e] ? scsi_scan_host_selected+0x77/0xad\n\t [\u003cc127d13c\u003e] ? do_scan_async+0x0/0x11a\n\t [\u003cc127d137\u003e] ? do_scsi_scan_host+0x51/0x56\n\t [\u003cc127d13c\u003e] ? do_scan_async+0x0/0x11a\n\t [\u003cc127d14a\u003e] ? do_scan_async+0xe/0x11a\n\t [\u003cc127d13c\u003e] ? do_scan_async+0x0/0x11a\n\t [\u003cc10354c5\u003e] ? kthread+0x5e/0x63\n\t [\u003cc1035467\u003e] ? kthread+0x0/0x63\n\t [\u003cc1002af6\u003e] ? kernel_thread_helper+0x6/0x10\n\tCode: 44 24 1c 54 83 44 24 18 54 83 fa 03 75 94 8b 06 c7 86 64 02 00 00 01 00 00 00 83 e0 03 09 f0 89 06 8b 44 24 28 8b 90 58 01 00 00 \u003c8b\u003e 42 2c 85 c0 75 03 8b 42 08 8d 54 24 48 52 8d 4c 24 50 51 68\n\tEIP: [\u003cc11c7b08\u003e] cfq_get_queue+0x232/0x412 SS:ESP 0068:dff8fd00\n\tCR2: 000000000000002c\n\t---[ end trace 9a88306573f69b12 ]---\n\nThe problem here is that we don\u0027t have bdi-\u003edev information available when\nthread does some IO.  Hence when dev_name() tries to access bdi-\u003edev, it\ncrashes.\n\nThis problem does not happen if kernel threads are in root group as root\ngroup is statically allocated at device initialization time and we don\u0027t\nhit this piece of code.\n\nFix it by delaying the filling of major and minor number information of\ndevice in blk_group.  Initially a blk_group is created with 0 as device\ninformation and this information is filled later once some more IO comes\nin from same group.\n\nReported-by: Mike Kazantsev \u003cmk.fraggod@gmail.com\u003e\nSigned-off-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "a45dc2d2b8d1afa57c91dcfac224e50ffcd3f805",
      "tree": "aa36b478521c748f1699390e3f4517a4d9fd6644",
      "parents": [
        "b0722cb1ac84863f57471d2b254457c100319300"
      ],
      "author": {
        "name": "Benny Halevy",
        "email": "bhalevy@panasas.com",
        "time": "Mon Sep 13 21:32:19 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Sep 21 11:49:17 2010 +0200"
      },
      "message": "block: fix blk_rq_map_kern bio direction flag\n\nThis bug was introduced in 7b6d91daee5cac6402186ff224c3af39d79f4a0e\n\"block: unify flags for struct bio and struct request\"\n\nCc: Boaz Harrosh \u003cbharrosh@panasas.com\u003e\nSigned-off-by: Benny Halevy \u003cbhalevy@panasas.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "749ef9f8423054e326f3a246327ed2db4b6d395f",
      "tree": "388df763e4e731f5d9b4d8dcaedca641521571e3",
      "parents": [
        "6d0aed7a38d06284db2a0e46c0a072b0c1c3299b"
      ],
      "author": {
        "name": "Corrado Zoccolo",
        "email": "czoccolo@gmail.com",
        "time": "Mon Sep 20 15:24:50 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Mon Sep 20 15:24:50 2010 +0200"
      },
      "message": "cfq: improve fsync performance for small files\n\nFsync performance for small files achieved by cfq on high-end disks is\nlower than what deadline can achieve, due to idling introduced between\nthe sync write happening in process context and the journal commit.\n\nMoreover, when competing with a sequential reader, a process writing\nsmall files and fsync-ing them is starved.\n\nThis patch fixes the two problems by:\n- marking journal commits as WRITE_SYNC, so that they get the REQ_NOIDLE\n  flag set,\n- force all queues that have REQ_NOIDLE requests to be put in the noidle\n  tree.\n\nHaving the queue associated to the fsync-ing process and the one associated\n to journal commits in the noidle tree allows:\n- switching between them without idling,\n- fairness vs. competing idling queues, since they will be serviced only\n  after the noidle tree expires its slice.\n\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nReviewed-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nTested-by: Jeff Moyer \u003cjmoyer@redhat.com\u003e\nSigned-off-by: Corrado Zoccolo \u003cczoccolo@gmail.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "dd3932eddf428571762596e17b65f5dc92ca361b",
      "tree": "57cec5ae2f862037f78b7e993323d77955bb6463",
      "parents": [
        "8786fb70ccb36c7cff64680bb80c46d3a09d44db"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Sep 16 20:51:46 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Sep 16 20:52:58 2010 +0200"
      },
      "message": "block: remove BLKDEV_IFL_WAIT\n\nAll the blkdev_issue_* helpers can only sanely be used for synchronous\ncaller.  To issue cache flushes or barriers asynchronously the caller needs\nto set up a bio by itself with a completion callback to move the asynchronous\nstate machine ahead.  So drop the BLKDEV_IFL_WAIT flag that is always\nspecified when calling blkdev_issue_* and also remove the now unused flags\nargument to blkdev_issue_flush and blkdev_issue_zeroout.  For\nblkdev_issue_discard we need to keep it for the secure discard flag, which\ngains a more descriptive name and loses the bitops vs flag confusion.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "01ea50638bc04ca5259f5711fcdedefcdde1cf43",
      "tree": "c525dc13b05feab90d71b78a1d7adb0ddde081ea",
      "parents": [
        "2786c4e5e54802c34297e55050fef3e862a27b3f"
      ],
      "author": {
        "name": "Signed-off-by: Jan Kara",
        "email": "jack@suse.cz",
        "time": "Thu Sep 16 20:36:36 2010 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Sep 16 20:36:36 2010 +0200"
      },
      "message": "block: Fix race during disk initialization\n\nWhen a new disk is being discovered, add_disk() first ties the bdev to gendisk\n(via register_disk()-\u003eblkdev_get()) and only after that calls\nbdi_register_bdev(). Because register_disk() also creates disk\u0027s kobject, it\ncan happen that userspace manages to open and modify the device\u0027s data (or\ninode) before its BDI is properly initialized leading to a warning in\n__mark_inode_dirty().\n\nFix the problem by registering BDI early enough.\n\nThis patch addresses https://bugzilla.kernel.org/show_bug.cgi?id\u003d16312\n\nCc: stable@kernel.org\nReported-by: Larry Finger \u003cLarry.Finger@lwfinger.net\u003e\nSigned-off-by: Jan Kara \u003cjack@suse.cz\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    }
  ],
  "next": "8e89d13f4ede2467629a971618537430fafaaea3"
}
