aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2014-09-22 00:40:20 +0000
committerAlexander Motin <mav@FreeBSD.org>2014-09-22 00:40:20 +0000
commit2db9b8b5a04ac5c9a429c4c69abcd030c88e832e (patch)
tree7ceaca00aa70c6f6fe096ebc03082bf424b7513a
parent211d5708c902847edfa924d42b59b9451a2a3db6 (diff)
downloadsrc-2db9b8b5a04ac5c9a429c4c69abcd030c88e832e.tar.gz
src-2db9b8b5a04ac5c9a429c4c69abcd030c88e832e.zip
Polish INQUIRY command fields validation.
Notes
Notes: svn path=/head/; revision=271940
-rw-r--r--sys/cam/ctl/ctl.c40
1 files changed, 9 insertions, 31 deletions
diff --git a/sys/cam/ctl/ctl.c b/sys/cam/ctl/ctl.c
index 9a1937494ece..55231b66eb49 100644
--- a/sys/cam/ctl/ctl.c
+++ b/sys/cam/ctl/ctl.c
@@ -10723,45 +10723,23 @@ ctl_inquiry(struct ctl_scsiio *ctsio)
struct scsi_inquiry *cdb;
int retval;
- cdb = (struct scsi_inquiry *)ctsio->cdb;
-
- retval = 0;
-
CTL_DEBUG_PRINT(("ctl_inquiry\n"));
- /*
- * Right now, we don't support the CmdDt inquiry information.
- * This would be nice to support in the future. When we do
- * support it, we should change this test so that it checks to make
- * sure SI_EVPD and SI_CMDDT aren't both set at the same time.
- */
-#ifdef notyet
- if (((cdb->byte2 & SI_EVPD)
- && (cdb->byte2 & SI_CMDDT)))
-#endif
- if (cdb->byte2 & SI_CMDDT) {
- /*
- * Point to the SI_CMDDT bit. We might change this
- * when we support SI_CMDDT, but since both bits would be
- * "wrong", this should probably just stay as-is then.
- */
+ cdb = (struct scsi_inquiry *)ctsio->cdb;
+ if (cdb->byte2 & SI_EVPD)
+ retval = ctl_inquiry_evpd(ctsio);
+ else if (cdb->page_code == 0)
+ retval = ctl_inquiry_std(ctsio);
+ else {
ctl_set_invalid_field(ctsio,
/*sks_valid*/ 1,
/*command*/ 1,
- /*field*/ 1,
- /*bit_valid*/ 1,
- /*bit*/ 1);
+ /*field*/ 2,
+ /*bit_valid*/ 0,
+ /*bit*/ 0);
ctl_done((union ctl_io *)ctsio);
return (CTL_RETVAL_COMPLETE);
}
- if (cdb->byte2 & SI_EVPD)
- retval = ctl_inquiry_evpd(ctsio);
-#ifdef notyet
- else if (cdb->byte2 & SI_CMDDT)
- retval = ctl_inquiry_cmddt(ctsio);
-#endif
- else
- retval = ctl_inquiry_std(ctsio);
return (retval);
}