)]}'
{
  "log": [
    {
      "commit": "4abdc6ee7c47a1a6e12f95717e461baeebee5df7",
      "tree": "51cac3d66891d026483838563e35124467a8eb86",
      "parents": [
        "08243ba731ee08ff42cf1589379c81567690218f"
      ],
      "author": {
        "name": "Elias Oltmanns",
        "email": "eo@nebensachen.de",
        "time": "Mon Oct 13 21:39:50 2008 +0200"
      },
      "committer": {
        "name": "Bartlomiej Zolnierkiewicz",
        "email": "bzolnier@gmail.com",
        "time": "Mon Oct 13 21:39:50 2008 +0200"
      },
      "message": "ide: Implement disk shock protection support (v4)\n\nOn user request (through sysfs), the IDLE IMMEDIATE command with UNLOAD\nFEATURE as specified in ATA-7 is issued to the device and processing of\nthe request queue is stopped thereafter until the specified timeout\nexpires or user space asks to resume normal operation. This is supposed\nto prevent the heads of a hard drive from accidentally crashing onto the\nplatter when a heavy shock is anticipated (like a falling laptop expected\nto hit the floor). Port resets are deferred whenever a device on that\nport is in the parked state.\n\nv3:\nElias Oltmanns \u003ceo@nebensachen.de\u003e wrote:\n[...]\n\u003e \u003e\u003e 1. Make sure that no negative value is being passed to\n\u003e \u003e\u003e    jiffies_to_msecs() in ide_park_show().\n\u003e \u003e\u003e 2. Drop the superfluous variable hwif in ide_special_rq().\n\u003e \u003e\u003e 3. Skip initialisation of task and tf in ide_special_rq() if we are not\n\u003e \u003e\u003e    handling a (un)park request.\n\u003e \u003e\n\u003e \u003e Well, #3 should have been done differently because we donn\u0027t want to\n\u003e \u003e check for REQ_(UN)?PARK_HEADS more often than is necessary.\n\u003e \n\u003e While preparing the backport to 2.6.27, it has just occurred to me that\n\u003e we need to clear the IDE_DFLAG_PARKED flag in ide_disk_pre_reset()\n\u003e because this flag must not be set after *any* sort of access to the\n\u003e device.\n\nv4:\nFix a memory leak due to a missing blk_put_request() in\nissue_park_cmd(). Additionally, we should plug the queue when enqueueing\nthe unpark request because there is no guarantee that the park timeout\nhas not expired by then. Even though the chance for that to happen is\nvery slim, the request might end up hanging in the queue until the next\nI/O operation is queued up. While at it, clean up the code a little:\n- make issue_park_cmd() a function of type void since nobody cares for\n  the return value anyway;\n- use blk_start_queueing() instead of __blk_run_queue() since we don\u0027t\n  have to worry about recursion;\n- remove a superfluous pointer deference in task_no_data_intr().\n\nSigned-off-by: Elias Oltmanns \u003ceo@nebensachen.de\u003e\nCc: Jeff Garzik \u003cjeff@garzik.org\u003e,\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Tejun Heo \u003chtejun@gmail.com\u003e\nSigned-off-by: Bartlomiej Zolnierkiewicz \u003cbzolnier@gmail.com\u003e\n"
    }
  ]
}
