Loading drivers/ata/libata-scsi.c +59 −34 Original line number Diff line number Diff line Loading @@ -1016,21 +1016,28 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc) &sense_key, &asc, &ascq, verbose); ata_scsi_set_sense(cmd, sense_key, asc, ascq); } else { /* ATA PASS-THROUGH INFORMATION AVAILABLE */ ata_scsi_set_sense(cmd, RECOVERED_ERROR, 0, 0x1D); } /* * Sense data is current and format is descriptor. * ATA PASS-THROUGH INFORMATION AVAILABLE * Always in descriptor format sense. */ sb[0] = 0x72; scsi_build_sense_buffer(1, cmd->sense_buffer, RECOVERED_ERROR, 0, 0x1D); } desc[0] = 0x09; if ((cmd->sense_buffer[0] & 0x7f) >= 0x72) { u8 len; /* set length of additional sense data */ sb[7] = 14; /* descriptor format */ len = sb[7]; desc = (char *)scsi_sense_desc_find(sb, len + 8, 9); if (!desc) { if (SCSI_SENSE_BUFFERSIZE < len + 14) return; sb[7] = len + 14; desc = sb + 8 + len; } desc[0] = 9; desc[1] = 12; /* * Copy registers into sense buffer. */ Loading @@ -1054,6 +1061,24 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc) desc[8] = tf->hob_lbam; desc[10] = tf->hob_lbah; } } else { /* Fixed sense format */ desc[0] = tf->feature; desc[1] = tf->command; /* status */ desc[2] = tf->device; desc[3] = tf->nsect; desc[0] = 0; if (tf->flags & ATA_TFLAG_LBA48) { desc[8] |= 0x80; if (tf->hob_nsect) desc[8] |= 0x40; if (tf->hob_lbal || tf->hob_lbam || tf->hob_lbah) desc[8] |= 0x20; } desc[9] = tf->lbal; desc[10] = tf->lbam; desc[11] = tf->lbah; } } /** Loading Loading
drivers/ata/libata-scsi.c +59 −34 Original line number Diff line number Diff line Loading @@ -1016,21 +1016,28 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc) &sense_key, &asc, &ascq, verbose); ata_scsi_set_sense(cmd, sense_key, asc, ascq); } else { /* ATA PASS-THROUGH INFORMATION AVAILABLE */ ata_scsi_set_sense(cmd, RECOVERED_ERROR, 0, 0x1D); } /* * Sense data is current and format is descriptor. * ATA PASS-THROUGH INFORMATION AVAILABLE * Always in descriptor format sense. */ sb[0] = 0x72; scsi_build_sense_buffer(1, cmd->sense_buffer, RECOVERED_ERROR, 0, 0x1D); } desc[0] = 0x09; if ((cmd->sense_buffer[0] & 0x7f) >= 0x72) { u8 len; /* set length of additional sense data */ sb[7] = 14; /* descriptor format */ len = sb[7]; desc = (char *)scsi_sense_desc_find(sb, len + 8, 9); if (!desc) { if (SCSI_SENSE_BUFFERSIZE < len + 14) return; sb[7] = len + 14; desc = sb + 8 + len; } desc[0] = 9; desc[1] = 12; /* * Copy registers into sense buffer. */ Loading @@ -1054,6 +1061,24 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc) desc[8] = tf->hob_lbam; desc[10] = tf->hob_lbah; } } else { /* Fixed sense format */ desc[0] = tf->feature; desc[1] = tf->command; /* status */ desc[2] = tf->device; desc[3] = tf->nsect; desc[0] = 0; if (tf->flags & ATA_TFLAG_LBA48) { desc[8] |= 0x80; if (tf->hob_nsect) desc[8] |= 0x40; if (tf->hob_lbal || tf->hob_lbam || tf->hob_lbah) desc[8] |= 0x20; } desc[9] = tf->lbal; desc[10] = tf->lbam; desc[11] = tf->lbah; } } /** Loading