• T
    [PATCH] libata-eh-fw: update ata_qc_from_tag() to enforce normal/EH qc ownership · f69499f4
    Tejun Heo 提交于
    New EH framework has clear distinction about who owns a qc.  Every qc
    starts owned by normal execution path - PIO, interrupt or whatever.
    When an exception condition occurs which affects the qc, the qc gets
    scheduled for EH.  Note that some events (say, link lost and regained,
    command timeout) may schedule qc's which are not directly related but
    could have been affected for EH too.  Scheduling for EH is atomic
    w.r.t. ap->host_set->lock and once schedule for EH, normal execution
    path is not allowed to access the qc in whatever way.  (PIO
    synchronization acts a bit different and will be dealt with later)
    
    This patch make ata_qc_from_tag() check whether a qc is active and
    owned by normal path before returning it.  If conditions don't match,
    NULL is returned and thus access to the qc is denied.
    __ata_qc_from_tag() is the original ata_qc_from_tag() and is used by
    libata core/EH layers to access inactive/failed qc's.
    
    This change is applied only if the associated LLDD implements new EH
    as indicated by non-NULL ->error_handler
    Signed-off-by: NTejun Heo <htejun@gmail.com>
    f69499f4
libata-core.c 125.8 KB