• Damien Le Moal's avatar
    scsi: sd: Check for unaligned partial completion · c46f0917
    Damien Le Moal authored
    Commit <f2e767bb> ("mpt3sas: Force request partial completion
    alignment") was not considering the case of commands not operating on
    logical block size units (e.g. REQ_OP_ZONE_REPORT and its 64B aligned
    partial replies). In this case, forcing alignment of resid to the device
    logical block size can break the command result, e.g. in the case of
    REQ_OP_ZONE_REPORT, the exact number of zone reported by the device.
    
    Move the partial completion alignement check of mpt3sas to a generic
    implementation in sd_done(). The check is added within the default
    section of the initial req_op() switch case so that the report and reset
    zone commands are ignored. In addition, as sd_done() is not called for
    passthrough requests, resid corrections are not done as intended by the
    initial mpt3sas patch.
    
    Fixes: f2e767bb ("mpt3sas: Force request partial completion alignment")
    Cc: <stable@vger.kernel.org> # v4.10
    Signed-off-by: default avatarDamien Le Moal <damien.lemoal@wdc.com>
    Acked-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    c46f0917
mpt3sas_scsih.c 267 KB