summaryrefslogtreecommitdiffstats
path: root/sys/cam/ctl/ctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cam/ctl/ctl.c')
-rw-r--r--sys/cam/ctl/ctl.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/sys/cam/ctl/ctl.c b/sys/cam/ctl/ctl.c
index b5b05cd..cbf7467 100644
--- a/sys/cam/ctl/ctl.c
+++ b/sys/cam/ctl/ctl.c
@@ -5353,7 +5353,8 @@ ctl_sync_cache(struct ctl_scsiio *ctsio)
* to see an error for an out of range LBA.
*/
if ((starting_lba + block_count) > (lun->be_lun->maxlba + 1)) {
- ctl_set_lba_out_of_range(ctsio);
+ ctl_set_lba_out_of_range(ctsio,
+ MAX(starting_lba, lun->be_lun->maxlba + 1));
ctl_done((union ctl_io *)ctsio);
goto bailout;
}
@@ -5669,7 +5670,8 @@ ctl_write_same(struct ctl_scsiio *ctsio)
*/
if (((lba + num_blocks) > (lun->be_lun->maxlba + 1))
|| ((lba + num_blocks) < lba)) {
- ctl_set_lba_out_of_range(ctsio);
+ ctl_set_lba_out_of_range(ctsio,
+ MAX(lba, lun->be_lun->maxlba + 1));
ctl_done((union ctl_io *)ctsio);
return (CTL_RETVAL_COMPLETE);
}
@@ -5782,7 +5784,8 @@ ctl_unmap(struct ctl_scsiio *ctsio)
num_blocks = scsi_4btoul(range->length);
if (((lba + num_blocks) > (lun->be_lun->maxlba + 1))
|| ((lba + num_blocks) < lba)) {
- ctl_set_lba_out_of_range(ctsio);
+ ctl_set_lba_out_of_range(ctsio,
+ MAX(lba, lun->be_lun->maxlba + 1));
ctl_done((union ctl_io *)ctsio);
return (CTL_RETVAL_COMPLETE);
}
@@ -6986,7 +6989,7 @@ ctl_get_lba_status(struct ctl_scsiio *ctsio)
alloc_len = scsi_4btoul(cdb->alloc_len);
if (lba > lun->be_lun->maxlba) {
- ctl_set_lba_out_of_range(ctsio);
+ ctl_set_lba_out_of_range(ctsio, lba);
ctl_done((union ctl_io *)ctsio);
return (CTL_RETVAL_COMPLETE);
}
@@ -8776,7 +8779,8 @@ ctl_read_write(struct ctl_scsiio *ctsio)
*/
if (((lba + num_blocks) > (lun->be_lun->maxlba + 1))
|| ((lba + num_blocks) < lba)) {
- ctl_set_lba_out_of_range(ctsio);
+ ctl_set_lba_out_of_range(ctsio,
+ MAX(lba, lun->be_lun->maxlba + 1));
ctl_done((union ctl_io *)ctsio);
return (CTL_RETVAL_COMPLETE);
}
@@ -8885,7 +8889,8 @@ ctl_cnw(struct ctl_scsiio *ctsio)
*/
if (((lba + num_blocks) > (lun->be_lun->maxlba + 1))
|| ((lba + num_blocks) < lba)) {
- ctl_set_lba_out_of_range(ctsio);
+ ctl_set_lba_out_of_range(ctsio,
+ MAX(lba, lun->be_lun->maxlba + 1));
ctl_done((union ctl_io *)ctsio);
return (CTL_RETVAL_COMPLETE);
}
@@ -8996,7 +9001,8 @@ ctl_verify(struct ctl_scsiio *ctsio)
*/
if (((lba + num_blocks) > (lun->be_lun->maxlba + 1))
|| ((lba + num_blocks) < lba)) {
- ctl_set_lba_out_of_range(ctsio);
+ ctl_set_lba_out_of_range(ctsio,
+ MAX(lba, lun->be_lun->maxlba + 1));
ctl_done((union ctl_io *)ctsio);
return (CTL_RETVAL_COMPLETE);
}
OpenPOWER on IntegriCloud