summaryrefslogtreecommitdiffstats
path: root/sys/cam/ctl/ctl_error.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2017-01-05 11:36:08 +0000
committermav <mav@FreeBSD.org>2017-01-05 11:36:08 +0000
commitee77fa442765816d4dcc6ed47c262d0252dd7d91 (patch)
tree445b3d1400c7a997bc35fbfefb8fe14ecb41a7ce /sys/cam/ctl/ctl_error.c
parent0c2d11b23972e5b1e61036417ccec7397ed24f1b (diff)
downloadFreeBSD-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.c12
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);
}
OpenPOWER on IntegriCloud