diff options
Diffstat (limited to 'sys/cam/ctl/ctl.c')
-rw-r--r-- | sys/cam/ctl/ctl.c | 20 |
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); } |