[4621] in linux-scsi channel archive

home help back first fref pref prev next nref lref last post

Unneccessary fat removal (scsi_ioctl.c)

daemon@ATHENA.MIT.EDU (Pavel Machek)
Sat Aug 29 12:38:04 1998

Date: 	Fri, 28 Aug 1998 21:45:34 +0200
From: Pavel Machek <pavel@bug.ucw.cz>
To: linux-scsi@vger.rutgers.edu

--- clean/drivers/scsi/scsi_ioctl.c	Tue Jun  9 22:36:09 1998
+++ linux/drivers/scsi/scsi_ioctl.c	Sat Aug  1 13:40:39 1998
@@ -364,10 +364,7 @@
      * may try and take the device offline, in which case all further
      * access to the device is prohibited.
      */
-    if( !scsi_block_when_processing_errors(dev) )
-      {
-        return -ENODEV;
-      }
+    if( !scsi_block_when_processing_errors(dev) ) return -ENODEV;
     
     switch (cmd) {
     case SCSI_IOCTL_GET_IDLUN:
@@ -387,16 +384,11 @@
         put_user( dev->host->host_no, (int *) arg);
 	return 0;
     case SCSI_IOCTL_TAGGED_ENABLE:
-	if(!capable(CAP_SYS_ADMIN))  return -EACCES;
-	if(!dev->tagged_supported) return -EINVAL;
-	dev->tagged_queue = 1;
-	dev->current_tag = 1;
-	return 0;
     case SCSI_IOCTL_TAGGED_DISABLE:
 	if(!capable(CAP_SYS_ADMIN))  return -EACCES;
 	if(!dev->tagged_supported) return -EINVAL;
-	dev->tagged_queue = 0;
-	dev->current_tag = 0;
+	dev->tagged_queue = dev->current_tag = 
+                (cmd == SCSI_IOCTL_TAGGED_ENABLE);
 	return 0;
     case SCSI_IOCTL_PROBE_HOST:
 	return ioctl_probe(dev->host, arg);
@@ -405,43 +397,29 @@
 	return scsi_ioctl_send_command((Scsi_Device *) dev,
 				       (Scsi_Ioctl_Command *) arg);
     case SCSI_IOCTL_DOORLOCK:
-	if (!dev->removable || !dev->lockable) return 0;
-	scsi_cmd[0] = ALLOW_MEDIUM_REMOVAL;
-	scsi_cmd[1] = dev->lun << 5;
-	scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[5] = 0;
-	scsi_cmd[4] = SCSI_REMOVAL_PREVENT;
-	return ioctl_internal_command((Scsi_Device *) dev, scsi_cmd,
-				      NORMAL_TIMEOUT, NORMAL_RETRIES);
-	break;
     case SCSI_IOCTL_DOORUNLOCK:
 	if (!dev->removable || !dev->lockable) return 0;
 	scsi_cmd[0] = ALLOW_MEDIUM_REMOVAL;
 	scsi_cmd[1] = dev->lun << 5;
 	scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[5] = 0;
-	scsi_cmd[4] = SCSI_REMOVAL_ALLOW;
+	scsi_cmd[4] = (cmd == SCSI_IOCTL_DOORLOCK) ? 
+                      SCSI_REMOVAL_PREVENT : SCSI_REMOVAL_ALLOW;
 	return ioctl_internal_command((Scsi_Device *) dev, scsi_cmd,
 				      NORMAL_TIMEOUT, NORMAL_RETRIES);
+	break;
     case SCSI_IOCTL_TEST_UNIT_READY:
 	scsi_cmd[0] = TEST_UNIT_READY;
 	scsi_cmd[1] = dev->lun << 5;
-	scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[5] = 0;
-	scsi_cmd[4] = 0;
+	scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[4] = scsi_cmd[5] = 0;
 	return ioctl_internal_command((Scsi_Device *) dev, scsi_cmd,
 				      NORMAL_TIMEOUT, NORMAL_RETRIES);
 	break;
     case SCSI_IOCTL_START_UNIT:
-	scsi_cmd[0] = START_STOP;
-	scsi_cmd[1] = dev->lun << 5;
-	scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[5] = 0;
-	scsi_cmd[4] = 1;
-	return ioctl_internal_command((Scsi_Device *) dev, scsi_cmd,
-				      START_STOP_TIMEOUT, NORMAL_RETRIES);
-	break;
     case SCSI_IOCTL_STOP_UNIT:
 	scsi_cmd[0] = START_STOP;
 	scsi_cmd[1] = dev->lun << 5;
 	scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[5] = 0;
-	scsi_cmd[4] = 0;
+	scsi_cmd[4] = (cmd == SCSI_IOCTL_START_UNIT);
 	return ioctl_internal_command((Scsi_Device *) dev, scsi_cmd,
 				      START_STOP_TIMEOUT, NORMAL_RETRIES);
 	break;

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.rutgers.edu

home help back first fref pref prev next nref lref last post