From 179ebc59474dcb5eeb4f6278cafff38ee4ed3aab Mon Sep 17 00:00:00 2001 From: Vladislav Bolkhovitin Date: Sat, 16 Apr 2011 15:17:19 +0000 Subject: [PATCH] Minor fixes git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@3385 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scst/src/dev_handlers/scst_vdisk.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/scst/src/dev_handlers/scst_vdisk.c b/scst/src/dev_handlers/scst_vdisk.c index eebc25e62..113cc25a0 100644 --- a/scst/src/dev_handlers/scst_vdisk.c +++ b/scst/src/dev_handlers/scst_vdisk.c @@ -2041,15 +2041,22 @@ out: } static void vdisk_ctrl_m_pg_select(unsigned char *p, - struct scst_vdisk_dev *virt_dev) + struct scst_vdisk_dev *virt_dev, struct scst_cmd *cmd) { struct scst_device *dev = virt_dev->dev; int old_swp = dev->swp, old_tas = dev->tas, old_dsense = dev->d_sense; -#if 0 - /* Not implemented yet, see comment in vdisk_ctrl_m_pg() */ - dev->tst = p[2] >> 5; +#if 0 /* Not implemented yet, see comment in vdisk_ctrl_m_pg() */ + dev->tst = (p[2] >> 5) & 1; dev->queue_alg = p[3] >> 4; +#else + if ((dev->tst != ((p[2] >> 5) & 1)) || (dev->queue_alg != (p[3] >> 4))) { + TRACE(TRACE_MINOR|TRACE_SCSI, "%s", "MODE SELECT: Changing of " + "TST and QUEUE ALGORITHM not supported"); + scst_set_cmd_error(cmd, + SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb)); + return; + } #endif dev->swp = (p[4] & 0x8) >> 3; dev->tas = (p[5] & 0x40) >> 6; @@ -2140,7 +2147,7 @@ static void vdisk_exec_mode_select(struct scst_cmd *cmd) scst_sense_invalid_field_in_parm_list)); goto out_put; } - vdisk_ctrl_m_pg_select(&address[offset], virt_dev); + vdisk_ctrl_m_pg_select(&address[offset], virt_dev, cmd); } else { PRINT_ERROR("MODE SELECT: Invalid request %x", address[offset] & 0x3f);