summaryrefslogtreecommitdiffstats
path: root/sys/cam/ctl/ctl_backend_ramdisk.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2014-12-18 08:38:07 +0000
committermav <mav@FreeBSD.org>2014-12-18 08:38:07 +0000
commit4ff47ae9abedf70df85d191c50e4130adbdea839 (patch)
tree493e69933075582f0f9d4d1a850896cee12710af /sys/cam/ctl/ctl_backend_ramdisk.c
parent251a95deec1d0bdb97ae02542b701f42eb54476a (diff)
downloadFreeBSD-src-4ff47ae9abedf70df85d191c50e4130adbdea839.zip
FreeBSD-src-4ff47ae9abedf70df85d191c50e4130adbdea839.tar.gz
MFC r275474: Add GET LBA STATUS command support to CTL.
It is implemented for LUNs backed by ZVOLs in "dev" mode and files. GEOM has no such API, so for LUNs backed by raw devices all LBAs will be reported as mapped/unknown. Sponsored by: iXsystems, Inc.
Diffstat (limited to 'sys/cam/ctl/ctl_backend_ramdisk.c')
-rw-r--r--sys/cam/ctl/ctl_backend_ramdisk.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/sys/cam/ctl/ctl_backend_ramdisk.c b/sys/cam/ctl/ctl_backend_ramdisk.c
index 9b3b14a..adace4f 100644
--- a/sys/cam/ctl/ctl_backend_ramdisk.c
+++ b/sys/cam/ctl/ctl_backend_ramdisk.c
@@ -967,8 +967,31 @@ ctl_backend_ramdisk_config_write(union ctl_io *io)
static int
ctl_backend_ramdisk_config_read(union ctl_io *io)
{
- /*
- * XXX KDM need to implement!!
- */
- return (0);
+ int retval = 0;
+
+ switch (io->scsiio.cdb[0]) {
+ case SERVICE_ACTION_IN:
+ if (io->scsiio.cdb[1] == SGLS_SERVICE_ACTION) {
+ /* We have nothing to tell, leave default data. */
+ ctl_config_read_done(io);
+ retval = CTL_RETVAL_COMPLETE;
+ break;
+ }
+ ctl_set_invalid_field(&io->scsiio,
+ /*sks_valid*/ 1,
+ /*command*/ 1,
+ /*field*/ 1,
+ /*bit_valid*/ 1,
+ /*bit*/ 4);
+ ctl_config_read_done(io);
+ retval = CTL_RETVAL_COMPLETE;
+ break;
+ default:
+ ctl_set_invalid_opcode(&io->scsiio);
+ ctl_config_read_done(io);
+ retval = CTL_RETVAL_COMPLETE;
+ break;
+ }
+
+ return (retval);
}
OpenPOWER on IntegriCloud