• Damien Le Moal's avatar
    ata: libata-core: Fix ata_dev_config_cpr() · fda17afc
    Damien Le Moal authored
    The concurrent positioning ranges log page 47h is a general purpose log
    page and not a subpage of the indentify device log. Using
    ata_identify_page_supported() to test for concurrent positioning ranges
    support is thus wrong. ata_log_supported() must be used.
    
    Furthermore, unlike other advanced ATA features (e.g. NCQ priority),
    accesses to the concurrent positioning ranges log page are not gated by
    a feature bit from the device IDENTIFY data. Since many older drives
    react badly to the READ LOG EXT and/or READ LOG DMA EXT commands isued
    to read device log pages, avoid problems with older drives by limiting
    the concurrent positioning ranges support detection to drives
    implementing at least the ACS-4 ATA standard (major version 11). This
    additional condition effectively turns ata_dev_config_cpr() into a nop
    for older drives, avoiding problems in the field.
    
    Fixes: fe22e1c2 ("libata: support concurrent positioning ranges log")
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=215519
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
    Tested-by: default avatarAbderraouf Adjal <adjal.arf@gmail.com>
    Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
    fda17afc
libata-core.c 165 KB