• B
    ide-disk: fix flush requests (take 2) · 395d8ef5
    Bartlomiej Zolnierkiewicz 提交于
    commit 813a0eb2
    Author: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    Date:   Fri Jan 25 22:17:10 2008 +0100
    
        ide: switch idedisk_prepare_flush() to use REQ_TYPE_ATA_TASKFILE requests
    
    ...
    
    broke flush requests.
    
    Allocating IDE command structure on the stack for flush requests is not
    a very brilliant idea:
    
    - idedisk_prepare_flush() only prepares the request and it doesn't wait
      for it to be completed
    
    - there are can be multiple flush requests queued in the queue
    
    Fix the problem (per hints from James Bottomley) by:
    - dynamically allocating ide_task_t instance using kmalloc(..., GFP_ATOMIC)
    - adding new taskfile flag (IDE_TFLAG_DYN)
    - calling kfree() in ide_end_drive_command() if IDE_TFLAG_DYN is set
      (while at it rename 'args' to 'task' and fix whitespace damage)
    
    [ This will be fixed properly before 2.6.25 but this bug is rather
      critical and the proper solution requires some more work + testing. ]
    
    Thanks to Sebastian Siewior and Christoph Hellwig for reporting the
    problem and testing patches (extra thanks to Sebastian for bisecting
    it to the guilty commmit).
    Tested-by: NSebastian Siewior <ide-bug@ml.breakpoint.cc>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
    Cc: Jens Axboe <jens.axboe@oracle.com>
    Cc: Tejun Heo <htejun@gmail.com>
    Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
    Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    395d8ef5
ide-disk.c 30.9 KB