diff options
author | mav <mav@FreeBSD.org> | 2017-01-05 11:36:08 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2017-01-05 11:36:08 +0000 |
commit | ee77fa442765816d4dcc6ed47c262d0252dd7d91 (patch) | |
tree | 445b3d1400c7a997bc35fbfefb8fe14ecb41a7ce /sys/cam/ctl/ctl_error.c | |
parent | 0c2d11b23972e5b1e61036417ccec7397ed24f1b (diff) | |
download | FreeBSD-src-ee77fa442765816d4dcc6ed47c262d0252dd7d91.zip FreeBSD-src-ee77fa442765816d4dcc6ed47c262d0252dd7d91.tar.gz |
MFC r310285:
When reporting "Logical block address out of range" error, report the LBA
in sense data INFORMATION field.
Diffstat (limited to 'sys/cam/ctl/ctl_error.c')
-rw-r--r-- | sys/cam/ctl/ctl_error.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/cam/ctl/ctl_error.c b/sys/cam/ctl/ctl_error.c index 5bdaf08..4f839db 100644 --- a/sys/cam/ctl/ctl_error.c +++ b/sys/cam/ctl/ctl_error.c @@ -181,8 +181,8 @@ ctl_sense_to_desc(struct scsi_sense_data_fixed *sense_src, /*asc*/ sense_src->add_sense_code, /*ascq*/ sense_src->add_sense_code_qual, - /* Information Bytes */ - (scsi_4btoul(sense_src->info) != 0) ? + /* Information Bytes */ + (sense_src->error_code & SSD_ERRCODE_VALID) ? SSD_ELEM_INFO : SSD_ELEM_SKIP, sizeof(sense_src->info), sense_src->info, @@ -727,14 +727,20 @@ ctl_set_aborted(struct ctl_scsiio *ctsio) } void -ctl_set_lba_out_of_range(struct ctl_scsiio *ctsio) +ctl_set_lba_out_of_range(struct ctl_scsiio *ctsio, uint64_t lba) { + uint8_t info[8]; + + scsi_u64to8b(lba, info); + /* "Logical block address out of range" */ ctl_set_sense(ctsio, /*current_error*/ 1, /*sense_key*/ SSD_KEY_ILLEGAL_REQUEST, /*asc*/ 0x21, /*ascq*/ 0x00, + /*type*/ (lba != 0) ? SSD_ELEM_INFO : SSD_ELEM_SKIP, + /*size*/ sizeof(info), /*data*/ &info, SSD_ELEM_NONE); } |